These are the initiatives that currently drive 2i2c’s work. They mostly involve making upstream contributions in open source communities. See About the roadmap for what these mean.
🚀 In-Flight Initiatives¶
These are driving our work right now...
Allow users to read / write from object storage like a filesystem6/6Fund this
As an end user on the cloud, I have to use object storage (such as S3) for storing and accessing intermediate and final data products. While I use cloud native methods to do most of the work, in some cases it is very helpful to be able to access cloud object storage as if it was a traditional filesystem:
When dealing with smaller intermediate and final data products produced by other systems (like an external job queue)
As a way to use existing data exploration tools (including the Jupyterlab file browser) that work best with traditional filesystems
Sub-issues
🟣 Enable mountpoint-s3-csi-driver on MAAP clusterUpdated 13d ago
🟣 Add ability to provision a PV for S3 bucket mountingUpdated 13d ago
🟣 Mount buckets in user pod with `singleuser.extraVolume` and `singleuser.extraVolumeMounts` in MAAPUpdated 13d ago
🟣 Validate S3 FUSE driver in staging with MAAPUpdated 13d ago
🟣 Roll out s3 fuse mounts to MAAP prodUpdated 7d ago
🟣 Write a blog post about S3 access via FUSE on hubsUpdated 7d ago
Build a way to spin up nodes for users before they need them4/11Fund this
As a JupyterHub user, I sometimes end up needing to wait for 5-10 minutes for a server to start up, and I see some messages in my startup screen about ‘new node spinning up’. This feels random and out of my own control, and the inconsistency makes it hard for me to plan for how long before I can access my interactive environment. I would like my server start times to be more consistent.
As a JupyterHub admin, I would like to be able to say ‘always have X% headroom for my users’, to be able to better trade-off server startup time vs cloud cost. I want to be able to say ‘spin up new nodes when the existing pool is 80% full’ rather than when it’s 100% full - I believe this gets me a better balance than using much larger nodes
Sub-issues
🟣 Initialise projectUpdated 6d ago
🟣 Mechanism to talk to GCPUpdated 6d ago
🟣 Generalise mechanism to talk to cloud providersUpdated 6d ago
🟣 Code ReviewUpdated 6d ago
🟢 Address code review commentsUpdated 4d ago
🟢 Plug-in to trigger scaling based on utilisation thresholdUpdated 6d ago
🟢 Deployment and testing on GCP hubsUpdated 6d ago
🟢 Mechanism to talk to AWSUpdated 6d ago
🟢 Deployment and testing on AWS hubsUpdated 6d ago
🟢 Rollout autoscaler-pluginsUpdated 6d ago
🟢 Update internal and external-facing documentation regarding 'pre-initialization' for eventsUpdated 6d ago
Build and stage `jupyterhub_oauthenticator_authz_helpers` for Canvas authentication6/8Fund this
With the ability to log into the production UToronto hubs using Canvas authentication, we may turn our eye to restricting particular kinds of users to particular kinds of resources (storage and compute). This requires the existence of an authorization library, jupyterhub_oauthenticator_authz_helpers that will be built for this purpose.
Sub-issues
🟣 Build `jupyterhub_oauthenticator_authz_helpers`Updated 6mo ago
🟣 Test `jupyterhub_oauthenticator_authz_helpers` on UToronto staging hubUpdated 6mo ago
🟣 Extend `jupyterhub_oauthenticator_authz_helpers` to include a non-Canvas helperUpdated 1mo ago
🟣 Receive review from tech-lead on oauth helpersUpdated 1mo ago
🟢 Deploy `jupyterhub_oauthenticator_authz_helpers` to a UToronto production hub(s)Updated 19d ago
🟣 Write blog post about `jupyterhub_oauthenticator_authz_helpers`Updated 1mo ago
🟣 Roll out `jupyterhub_oauthenticator_authz_helpers` to UToronto staging againUpdated 1mo ago
🟢 Publish Canvas auth blog postUpdated 1mo ago
Check out Candidate Initiatives » for a list of initiatives for which we’re seeking endorsement or co-funding.
📋 Upcoming Initiatives¶
We’ll work on these next as we finish up In-Flight initiatives...
Move to Helm v4 for our infrastructure1/4Fund this
We use helm to deploy the JupyterHub chart z2jh. The helm project released v4 in September of 2025. We need to structurally keep up with these releases in time, so we don’t have to scramble when the older version gets end-of-life. We currently don’t know if zero to jupyterhub works with helm v4, so we can not ‘simply’ upgrade.
Sub-issues
🟣 Support installing helm v4 in https://github.com/jupyterhub/action-k3s-helmUpdated 27d ago
🟢 Contribute to zero to jupyterhub to make sure it works on helm v3 and helm v4Updated 27d ago
🟢 Roll out helm v4 in our infrastructureUpdated 13d ago
🟢 Write a blog post about our helm v4 migrationUpdated 9mo ago
Allow creating links to specific hub server options0/0Fund this
As a user on the hub, I want to have someone else get into the exact same kind of server I am on (environment, resource allocation, content pulled, etc) so we can work together with less accidental complexity caused by underlying server differences. Currently to do so, I have to explicitly give them verbal instructions on what options to choose or type in their ‘Start Server’ page (‘Select the JupyterLab instance, and pick the 14.1 GB resource allocation, then click start’), which is error prone. It is particularly error prone when those instructions use features such as ‘Unlisted choice’ (‘Select Other..., and type in this exact image, and avoid spaces’) or ‘Build your own image’. I want an easier and more succint way to share this that doesn’t involve verbal instructions.
Support providing cost effective % of GPUs for users on a hub (on AWS)0/1Fund this
As an instructor, I want to teach content that requires use of a not very powerful GPU some of the time. It’s integrated into my teaching syllabus, where there is a lot of CPU bound work and some GPU bound work. While I could bounce to a different tool that offers just GPUs (like Google Colab) that has its own set of compliance, pedagogy and UX problems that detract from my teaching and I don’t want my students to go through that.
As a student, I want to do all my course content in one familiar hub where I have access to similar tools and my home directory is the same over time for any particular course, without bouncing between different tools. I also don’t want to have to understand the differences between various GPUs, etc before I do my work, as I’m just doing light GPU work to understand fundamentals.
As a hub admin, I want to support my instructors using GPUs but without blowing through my budget entirely. I also want to give them any GPU access at all, in the face of limited GPU availability on many cloud providers today (in 2026)
As a 2i2c engineer, I want to support the same features across all cloud providers, so my support load is less.
Sub-issues
🟢 Enable GPU timeslicing on AWSUpdated 7mo ago
Improve monitoring of GPU usage by users0/0Fund this
As a JupyterHub admin, I want to provide GPU access to my users, but want to know if they are using it efficiently. GPUs are expensive, and we pay for them when we provision them, regardless of how much they are used. So I want to be able to tell if users are heavily underutilizing them, so I can talk to them to provide more educational resources or investigate if their needs are met by CPU-only tooling already. I also want to tell if someone is maxing out their GPU, so I can offer them bigger resources if needed. This reporting also helps me justify my cloud spend budget, as I can point to end users utilizing the resources I provide.
Support running hubs on an NRP allocation0/0Fund this
As a JupyterHub admin, I want to leverage all possible kinds cloud resources available to me to serve my users, rather than just commercial cloud providers (like AWS, GCP, etc). I’ve limited budget that goes towards everything I do, and being able to reduce the cloud spend $$$ lets me put that money towards other things that add value. Due to my affiliation, I have access to an allocation of resources on the National Research Platform. I want something a little more customized than NRP’s hosted jupyterhub, and I don’t have the skillset (or time) to deploy my own JupyterHub there. I would like to be able to use NRP’s resources (particularly GPUs) to serve my users.
Support running GPUs on Jetstream20/0Fund this
As a hub admin, I want to provide GPU access for my instructors & students so they can experiment with modern code that requires GPU. However, GPUs in commercial cloud are expensive and I want to balance how much $$$ I spend on the cloud. Due to my institutional affiliation, I have access to credits on Jetstream2, and I would like to run a hub with GPU access there.
Support running fixed cost hubs on Hetzner / OVH1/1Fund this
As an instructor in a smaller or under-resourced college or university, I want to use JupyterHub to provide interactive instructional help for my students. However, we have a limited and fixed budget, and I must know beforehand how much it is going to cost each month. I am told that commercial cloud providers with autoscaling will have cloud spend ‘based on usage’, and the estimates I am given are beyond my current reach. My class sizes are reasonably small, and I would love to have a fixed cost pathway towards running a hub. This should also help me prove to my institution that this is a valuable service that we should pay for as an organization.
Sub-issues
🟣 Add support for running a single node cluster on OVHUpdated 5mo ago
Provide opinionated guidance on how communities can structure groups from their authenticator0/0Fund this
As a JupyterHub admin, I want to put users in different kinds of ‘groups’ for different purposes:
For access to the hub
For cost monitoring and reporting
For access to different size of resources (more RAM, GPUs, etc)
For admin access (to other users’ servers and home directories and shared directories)
For potential collaboration
All these are groups under different ‘axes’, and I don’t know how to structure groups from my authenticator to support these use cases. There are many different ways to do this, and I don’t have any guidance or expertise to figure out what the options are, and how to choose them.
Support real time collaboration between users on JupyterLab0/0Fund this
As a researcher, I want to be collaborate with another user (or users) on my hub by temporarily granting them real time access to the notebook I’m working on in a secure way.
As a student, I want to temporarily grant real time access to my notebook to a TA so they can help me with some conceptual or coding problems I am having.
Support unauthenticated, pull-based static rendering of Jupyter Books2/4Fund this
As a Project Pythia cookbook author, I want to be able to see previews of PRs created on a GitHub Repository. I do not want to register my cookbook with a central provider such as ReadTheDocs.
As a Project Pythia maintainer, I want to simplify my CD workflows to reduce complexity around PR previews. Presently, this complexity is required by each community that wishes to implement GitHub Pages-based PR preview workflows. I want to keep
pull_request_targetworkflows as trivial as possible, due to the security challenges with this mechanism.
Sub-issues
🟣 Upstream work on jupyterbook.pub for artifact building and running on a hubUpdated 6mo ago
🟣 Spike into PR previews via JupyterBook.pubUpdated 5mo ago
🟢 Add loading mechanism to JupyterBook.pubUpdated 5mo ago
🟢 Add error handling page to JupyterBook.pubUpdated 5mo ago
Facilitate hub-adjacent rendering of authenticated static content1/2Fund this
As a community leader, I want to be able to view confidential reports that detail usage and costing of our hub. I want to be able to share links to these that continue to work for some time. I already have a JupyterHub running 24/7, and I would like to take advantage of this without incurring much additional expense.
As a researcher, I want to share in-progress research with my community. I am not yet able / permitted to share this more widely, so I want to ensure that only particular users and/or groups can see it.[^scopes]
Sub-issues
🟣 Deploy JupyterBook.pub on the 2i2c-aws-us staging hub using authenticationUpdated 5mo ago
🟢 Support providing tokens to JupyterBook.pub repoprovidersUpdated 5mo ago
Migrate UToronto production hubs to Canvas authentication8/8Fund this
Given successful deployment of Canvas based authentication to the UToronto staging hubs, we need to roll this feature out to production. In doing so, we must be careful to ensure that existing users enjoy uninterrupted access to their
Sub-issues
🟣 Create plan for Canvas migration switchoverUpdated 3mo ago
🟣 Perform home directory migration for UTorontoUpdated 1mo ago
🟣 Respond to problems with `sis_user_id` fieldUpdated 2mo ago
🟣 Enable canvas authentication on the UToronto highmem hubUpdated 1mo ago
🟣 Enable canvas authentication on the UToronto prod hubUpdated 1mo ago
🟣 Enable canvas authentication on the UToronto r hubUpdated 1mo ago
🟣 Anticipate and respond to UToronto issues following Canvas migrationUpdated 1mo ago
🟣 Plan migration of user data on UTorontoUpdated 6mo ago
Roll out `jupyterhub_oauthenticator_authz_helpers` to UToronto production0/0Fund this
Having built jupyterhub_oauthenticator_authz_helpers, we would like to deploy it to the UToronto production hubs. This will involve ensuring that no adverse impact to user experience occurs, and that the functionality matches the SoW.
Perform upstream governance work towards setting up `jupyterhub-contrib`1/2Fund this
There is ongoing governance work in the JupyterHub ecosystem that 2i2c folks are involved in towards setting up a jupyterhub-contrib space that serves as a multi-stakeholder home for non-core projects. Given how broadly used Canvas is, and the desire to continue using it without having to be the sole maintainers of it, jupyterhub_oauthenticator_authz_helpers would make a fantastic addition to such a space once it exists.
Sub-issues
🟣 Set up basic scaffolding and documentation for jupyterhub-contribUpdated 2mo ago
🟢 Upstream governance of `jupyterhub-contrib`Updated 6mo ago
Check out Candidate Initiatives » for a list of initiatives for which we’re seeking endorsement or co-funding.