Jupyter Server 2.0 is released!

Zach Sailer
Jupyter Blog
Published in
4 min readDec 6, 2022

--

We are thrilled to announce the release of Jupyter Server 2.0!

Jupyter Server provides the core web server that powers JupyterLab and Jupyter Notebook.

This release brings many new features and lays groundwork for a more multi-user, (real-time) collaborative Jupyter experience.

Major Highlights

Below is a short list of highlights for everyone! 🚀

New Identity API

As Jupyter continues to innovate its real-time collaboration experience, identity is an important component. While we all love that mysterious “Anonymous Jovyan” appearing in our notebooks, we’d prefer to know who is editing/viewing our documents.

The new Identity API in Jupyter Server makes this possible. It is a configurable, pluggable API that provides a clear extension point to customize how Jupyter Server authenticates and identifies its users.

Deployers of Jupyter Server can configure Server’s default IdentityProvider or swap in their own IdentityProvider to authenticate users with any auth provider.

New Authorization API

Enabling collaboration on a notebook shouldn’t mean “allow everyone with access to my Jupyter Server to edit my notebooks”. What if I want to share my notebook with e.g. a subset of my teammates?

The new Jupyter Server Authorization API is a critical step towards making this type of “fine-grained” permission management possible.

It provides a clear, pluggable extension point where we can build authorization layers (e.g. RBAC) backed by any auth provider. Deployers of Jupyter Server can extend Jupyter Server’s new Authorizer API to control user access in a running Jupyter Server.

New Event System API

Looking ahead at Jupyter’s future, it became clear that there is a whole class of untapped features — like notebook commenting or notifications— that need a Jupyter “event system"; these features react to events happening in and around a running Server.

This led us to create jupyter_events—a package that provides a JSON-schema-based event-driven system to Jupyter Server and server extensions. Jupyter Server leverages this new system to emit events from the server. Keep an eye out for future development where we will define more “core” events (similar to the Contents Service Events) to enable better event-driven functionality in the Server.

Other major changes

Below is list of other major changes and features that impact folks who extend + customize the Jupyter Server experience. This section is a little more technical in nature, but offers some exciting updates for folks who customize Jupyter Server.

New Kernel Websocket API

Jupyter Server now provides a configurable, pluggable layer between the kernel’s ZMQ sockets and websocket, called the KernelWebsocketConnection. This enables folks to innovate in the space between kernels and the server’s clients.

Server ships its own Kernel Manager

Jupyter Server now provides its own kernel manager class, ServerKernelManager. This enables us to innovate the kernel management layer to specifically fit the needs of Jupyter Server and add features like kernel-based events, persistence, and other kernel lifecycle-related functionality

This affects folks who have extended the default KernelManager with custom functionality — they will need to derive from this new class in order to take advantage of new server-specific functionality.

Terminals Service is now a Server Extension

Jupyter Server now ships the “Terminals Service” as an extension (installed and enabled by default) rather than a core Jupyter Service.

Most users will not notice this change, but this enables terminals to be optionally disabled. For more sensitive deployment environments, this is a big win!

pytest-jupyter, a pytest plugin for Jupyter

As we worked to increase our test coverage to ~80% (major “thank you” to Steve Silvester!), we built a handy set of pytest fixtures that can benefit Jupyter developers and extension authors.

This led us to release pytest-jupyter, a packaged pytest plugin for testing Jupyter core libraries and extensions.

Changelog

This post was only an overview of what’s new in 2.0! If you are looking for a more complete list of the changes including bug fixes, be sure to have a look at the changelog.

Installation

To install Jupyter Server with pip:

pip install jupyter_server

or with conda:

conda install -c conda-forge jupyter_server=2.0.0

Documentation

Find our full documentation here.

We are still catching up! Please have patience with us as we continue to update our documentation. If this is something you’d be interested in helping us improve, we’d love your help!

Acknowledgements

Massive “thank you” to the whole Jupyter Server Team. The Jupyter Server project is largely shepherded by the amazing folks listed here.

We’re also incredibly grateful to the large list of contributors outside the team. Y’all are the best! Thank you for helping us make Jupyter Server better each day!

If you’re interested in meeting or getting involved with the team, stop by one of our weekly community meetings, or better yet, join our Contributing Hour!

About the author

Zach Sailer is a Senior Software Engineer at Apple, where he is the Jupyter Open Source Champion. He is a Jupyter Distinguished Contributor and the Jupyter Server Steering Council Representative.

--

--