Skip to content

Conversation

@agriyakhetarpal
Copy link
Member

@agriyakhetarpal agriyakhetarpal commented Oct 24, 2025

Text styling

  • The blog is written with plain language (where relevant).
  • If there are headers, they use the proper header tags in order to do so (with only one level-one header).
  • All links describe where they link to (for example, check the Quansight labs website).
  • Any kind of styling that the author uses (for example, bold for emphasis) is consistent throughout the blog.

Non-text contents

  • Blog post featured image is in PNG or JPEG format, not SVG.
  • All content is represented as text (for example, images need alt text and videos need captions or descriptive transcripts).
  • If there are emojis, there are not more than three in a row.
  • Don't use flashing gifs or videos.
  • If it were to be read as plain text, the blog still makes sense and no information is missing.

Hi! This blog post describes our work on Jupyter Everywhere (@JupyterEverywhere), an application built on JupyterLite for K-12 education. The blog post is currently a draft and not final; I would appreciate any feedback you have. I am on PTO at the moment, and this PR is a way for me to hand it over to @krassowski and @peytondmurray to finish the remaining bits (I've added them as collaborators on my fork): adding images/screenshots everywhere, polishing the writing and enhancing any technical descriptions further, links to PRs about our upstream work adding content to incomplete sections, and any other improvements you see fit. Thank you!

The goal is to publish this sometime next week, and ideally before 3rd November, as we'd love for it to be highlighted at JupyterCon through @Skew-The-Script's keynote and tutorial session on the application. I've marked the publication date as 1st November.

@vercel
Copy link

vercel bot commented Oct 24, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
labs Ready Ready Preview Comment Nov 4, 2025 5:34pm

@agriyakhetarpal
Copy link
Member Author

I've requested reviews from everyone, despite this being a draft PR, as the main outline for the content is ready.


Popularised by platforms such as [Observable](https://observablehq.com/), Google Colaboratory, Kaggle Notebooks, and Deepnote, "Run" buttons next to code cells are a common feature in modern interactive computing environments. These buttons provide a convenient way for users to execute individual code cells with a single click, without needing to navigate to the toolbar or use keyboard shortcuts.

However, Jupyter does not provide this functionality out of the box. <!-- link to nine-year-old issue -->.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

link to nine-year-old issue

Brutal 🤣

Co-authored-by: Michał Krassowski <[email protected]>
@@ -0,0 +1,235 @@
---
title: 'Jupyter Everywhere: empowering interactive computing for K-12 education' # not final
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as @krassowski suggested in one of his previous suggestions that this is not something everyone might be aware of:

Suggested change
title: 'Jupyter Everywhere: empowering interactive computing for K-12 education' # not final
title: 'Jupyter Everywhere: empowering interactive computing for high school students'

Copy link

@peytondmurray peytondmurray left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great! A few small comments, but this is really close.

- Uploading notebooks to a server for storage and sharing
- Generating sharing IDs based on a hash of the current session and the notebook state, and readable IDs as a mnemonic for sharing purposes via a database of aquatic animal names and adjectives to make it more fun and engaging for students.

<!-- Add diagram from Adam's architecture-overview.md on Slack -->

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to the section above, maybe this architecture diagram should go before the paragraph that discusses it?


Later in the development process, we decided it would be more user-friendly to generate friendlier URLs for sharing, rather than the default UUID-based URLs that are not easy to remember or share verbally, which the sharing service initially generated. To achieve this, the sharing service implemented a system that produces human-readable IDs from combinations of aquatic animal names and adjectives, creating memorable, engaging URLs for sharing notebooks. This approach not only enhances the user experience but also adds a fun element to the sharing process, making it more appealing for students and educators alike. We integrated the sharing service's response to use these "readable IDs" in the interface by default.

<!-- add image of share dialog opened by clicking the "Share" button -->

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A screen recording of the sharing process might be helpful here, though a static image would do just fine too.


When a user opens a shared notebook link, they are presented with a read-only view of the notebook, where they can navigate through the cells, view outputs, and interact with any visualisations or widgets embedded in the notebook. However, they cannot modify the notebook's contents or execute any cells.

This was trickier to implement than we initially thought. At that time, JupyterLab did not expose a command for opening a notebook without a kernel attached. Fortunately, Jupyter is a swiss-army knife of extensibility, and we were able to override JupyterLab's default behaviour to allow opening a notebook in read-only mode without a kernel. This involved creating a custom notebook factory that would create a read-only notebook widget, and overriding the default kernel selection behaviour to prevent the user from selecting a kernel for the read-only notebook – by not instantiating a kernel at all.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it worth providing github permalinks to specific code sections here?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants