Furthermore, Jupyter’s software offers multiple programmatic, public APIs, which facilitate customization and extension without forking or copying the entire code base. For example, the Jupyter server usually stores users’ files on a local filesystem. However, the server offers an API that third parties have leveraged to store notebooks on Amazon S3, relational databases, and Google Drive. Users can install and use any combination of these extensions. The architecture of Jupyter’s next-generation user interface, JupyterLab, also illustrates this pattern: the entire application is a set of extensions that are standalone JavaScript packages. These can be composed into new tools that meet the needs of the users, without the project having to implement every conceivable feature.