<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - Jupyter Book</title><link href="https://jasongrout.github.io/medium-archive/pelican/" rel="alternate"/><link href="https://jasongrout.github.io/medium-archive/pelican/feeds/tag-jupyter-book.atom.xml" rel="self"/><id>https://jasongrout.github.io/medium-archive/pelican/</id><updated>2026-07-09T15:15:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>Navigating the Post-Workshop Fog: a Path to Myst</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2026/navigating-the-post-workshop-fog-a-path-to-myst/" rel="alternate"/><published>2026-07-09T15:15:00+00:00</published><updated>2026-07-09T15:15:00+00:00</updated><author><name>Chiara Marmo</name></author><id>tag:jasongrout.github.io,2026-07-09:/medium-archive/pelican/posts/2026/navigating-the-post-workshop-fog-a-path-to-myst/</id><summary type="html">&lt;p&gt;by Chiara Marmo and Serena Bonaretti&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;by Chiara Marmo and Serena Bonaretti&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/navigating-the-post-workshop-fog-a-path-to-myst/images/001-1_rxDzW-V0Ey6pg-hkg2bPag.jpeg" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;From June 15th to 17th 2026 a &lt;a href="https://events.linuxfoundation.org/jupyter-workshops/"&gt;Jupyter Workshop&lt;/a&gt; took place at Paris-Saclay University : “&lt;a href="/posts/2026/a-jupyter-workshop-demystifying-myst-markdown-in/"&gt;Demystifying MyST Markdown in education&lt;/a&gt;”. The workshop combined presentations in the mornings with collaborative sprints during the afternoons. It has been funded by the &lt;a href="https://jupyterfoundation.org/"&gt;Jupyter Foundation&lt;/a&gt; and &lt;a href="https://www.dataia.eu/formations"&gt;SaclAI-School&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="milestones"&gt;Milestones&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improving documentation and tools for easier deployment even for non-specialists.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Freek Pols from Delft University and Brigitta Sipočz form CalTech presented some examples and challenges in publishing courses and documentation at large scales. Angus Hollands, MyST maintainer, made an in depth presentation of Myst and JupyterBook2. Guided tutorials introduced participants to complete a Jupyter Book workflow. The participants learned how to create their first Jupyter Book, and how to publish it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Text notebooks as first citizens.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Marc Wouts and Yahya Heni discussed the path from &lt;a href="https://jupytext.org/"&gt;jupytext&lt;/a&gt; to &lt;a href="https://github.com/notebook-link/jupyter-plainb"&gt;jupyter-plainb&lt;/a&gt; to open and execute plain markdown text notebooks directly in Jupyter Lab. Two Jupyter Enhancement Proposals (JEP) has been discussed together with Jupyter Lab and MyST maintainers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/jupyter/enhancement-proposals/pull/103"&gt;Markdown based notebooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jupyter/enhancement-proposals/pull/138"&gt;Specify the markup language and flavor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="one-step-at-a-time"&gt;One step at a time&lt;/h2&gt;
&lt;p&gt;Over 30 &lt;a href="https://github.com/search?q=myst-education-2026&amp;amp;type=issues"&gt;issues&lt;/a&gt; and &lt;a href="https://github.com/search?q=myst-education-2026&amp;amp;type=pullrequests"&gt;pull requests&lt;/a&gt; have been opened in the whole Jupyter ecosystem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;documentation items: for example, about &lt;a href="https://github.com/jupytext/jupytext/issues/1548"&gt;text notebooks in jupyterlite&lt;/a&gt; or publishing on &lt;a href="https://github.com/jupyter-book/jupyter-book/pull/2635"&gt;different hosting solutions&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;feature requests: for example, &lt;a href="https://github.com/jupyter-book/jupyter-book/issues/2634"&gt;single document feature in JupyterBook2&lt;/a&gt;, &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/19093"&gt;non-default application to open files in Jupyter Lab&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;adopt JupyterBook2 for software documentation: for instance &lt;a href="https://github.com/mwouts/itables/pull/570"&gt;itables&lt;/a&gt; and &lt;a href="https://gitlab.com/travo-cr/travo/-/merge_requests/240"&gt;travo&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="sidewalks"&gt;Sidewalks&lt;/h2&gt;
&lt;p&gt;The workshop provided the opportunity to continue previous discussions about AI in education: some participants attended the workshop “&lt;a href="https://events.linuxfoundation.org/ai-in-jupyter/"&gt;AI in Jupyter&lt;/a&gt;” and were able to pick up the conversation from there.&lt;/p&gt;
&lt;p&gt;Relationships between Academia and Open Source Software communities were also topic of conversation: about Open Source Program Offices (OSPOs) and how their action can be connected to education strategies.&lt;/p&gt;
&lt;h2 id="wandering"&gt;Wandering&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/navigating-the-post-workshop-fog-a-path-to-myst/images/002-1_aWttEDS_jHdMWa1ZwvimPg.jpeg" alt="Participant group photo" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Collaboration is a matter of trust. That’s why it is still important for people to meet in person and to know each other. It is about exchanging details, like keys to decrypt characters and aspirations. One might discover a shared passion for shoes. Another may finally enjoy long French-style lunch breaks.&lt;/p&gt;
&lt;p&gt;When the time comes to resume the path, important steps have already been taken in the right direction.&lt;/p&gt;
</content><category term="events"/><category term="Jupyter Book"/><category term="MyST"/><category term="workshops"/></entry><entry><title>Becoming the new JupyterHub and Jupyter Book community manager</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2026/becoming-the-new-jupyterhub-and-jupyter-book-community/" rel="alternate"/><published>2026-06-15T07:01:00+00:00</published><updated>2026-06-15T07:01:00+00:00</updated><author><name>Serena Bonaretti</name></author><id>tag:jasongrout.github.io,2026-06-15:/medium-archive/pelican/posts/2026/becoming-the-new-jupyterhub-and-jupyter-book-community/</id><summary type="html">&lt;p&gt;There are moments in life when things, simply, converge. You work and study, study and work, and then, simply, it happens. It starts one…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/becoming-the-new-jupyterhub-and-jupyter-book-community/images/001-1_FO2axICPqqSETF34ZMoaBw.jpeg" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;There are moments in life when things, simply, converge. You work and study, study and work, and then, simply, it happens. It starts one day when somebody tells you “there is this new thing called Jupyter Notebook, you should give it a try!”. So you install it, play around with it. It works like a charm. It’s easy, fast, nearly playful. It’s beautiful–and if you grow up in Italy, beauty always matters. Then, you have the urge to tell others about it. You organize a workshop at a conference in musculoskeletal image analysis and introduce marvelous novel tools for computational research: “You know? Nowadays we can do open science easily because somebody has created Jupyter Notebook, Binder, new Python libraries!” And then, together with some friends, you write a proposal for a &lt;a href="/posts/2022/report-on-the-jupyter-community-workshop/"&gt;Jupyter Community Workshop&lt;/a&gt;, and–unbelievable!–you get it. Initially, you think you are just organizing a workshop. But somehow, the number of people interested becomes larger and larger, and you find yourself co-founding and coordinating what is now the Open and Reproducible Musculoskeletal Imaging Research (&lt;a href="https://www.ormir.org"&gt;ORMIR&lt;/a&gt;) Community. In ORMIR’s Python packages, the examples are in Jupyter Notebook, the documentation is in Jupyter Book. Sooner or later, we will have our JupyterHubs too; it’s just a matter of time. In parallel, life gives you some professional challenges. So you start teaching Python online, one-to-one. You look for material that fits your style, but you cannot find any. So you start teaching it your way, using Jupyter Notebook in JupyterLab and it works. Students find it easy, independent of their background. The teaching material seems to work, so you transcribe it into a book entitled &lt;a href="http://www.learnpythonwithjupyter.com"&gt;Learn Python with Jupyter&lt;/a&gt;, and you make it open. At the same time, you are obsessed with keeping up to date. You go to JupyterCon, meet the people, watch their YouTube videos, participate in online meetings. And then, there is a &lt;a href="/posts/2026/call-for-applications-community-manager-for-jupyterhub/"&gt;job posting&lt;/a&gt; for a community manager. And you are like: “Nah, they will never hire me”, so you set it aside. But then somebody out of the blue tells you to apply because “100% of lottery winners played!”. So you give it a chance, and here I am: my name is &lt;a href="https://sbonaretti.github.io/"&gt;Serena Bonaretti&lt;/a&gt; and I am the new JupyterHub and Jupyter Book community manager!&lt;/p&gt;
&lt;p&gt;In this new role, I am very much looking forward to working with the JupyterHub and Jupyter Book communities! I will collaborate with maintainers to understand and document projects’ priorities and define the best processes to achieve their vision. I will support contributors in finding their way into the projects and make the real-world impact that they hope to achieve. I will dialogue with users to make sure that the tools we create are useful for their work. And I will share our activities monthly and what we learn with anybody interested, so that we can all benefit from this journey!&lt;/p&gt;
&lt;p&gt;And you? How did you start using the tools of the Jupyter ecosystem? Do you work in JupyterHub? Have you ever written a Jupyter Book? Would you like to be a contributor? Are you an enthusiastic user? Write me on &lt;a href="https://discord.mystmd.org/"&gt;Discord&lt;/a&gt; (Jupyter Book/MyST) or &lt;a href="https://jupyter.zulipchat.com/#narrow/channel/469744-jupyterhub"&gt;Zulip&lt;/a&gt; (JupyterHub). The JupyterHub and Jupyter Book communities and I are looking forward to getting to know you!&lt;/p&gt;
</content><category term="community"/><category term="Jupyter Book"/><category term="JupyterHub"/></entry><entry><title>A Jupyter Workshop: Demystifying MyST Markdown in Education</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2026/a-jupyter-workshop-demystifying-myst-markdown-in/" rel="alternate"/><published>2026-04-30T15:05:00+00:00</published><updated>2026-04-30T15:05:00+00:00</updated><author><name>Chiara Marmo</name></author><id>tag:jasongrout.github.io,2026-04-30:/medium-archive/pelican/posts/2026/a-jupyter-workshop-demystifying-myst-markdown-in/</id><summary type="html">&lt;p&gt;A new Jupyter Workshop is happening June 15–17, 2026 in Orsay, France. Demystifying MyST Markdown in Education is a three-day workshop…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;A new &lt;a href="https://events.linuxfoundation.org/jupyter-workshops/"&gt;Jupyter Workshop&lt;/a&gt; is happening &lt;strong&gt;June 15–17, 2026&lt;/strong&gt; in Orsay, France. &lt;a href="https://events.linuxfoundation.org/demystifying-myst-markdown/"&gt;Demystifying MyST Markdown in Education&lt;/a&gt; is a three-day workshop organized by the Jupyter community, focused on helping science educators adopt Jupyter Book and the MyST document engine for their teaching materials.&lt;/p&gt;
&lt;h2 id="whats-it-about"&gt;What’s it about?&lt;/h2&gt;
&lt;p&gt;The workshop aims to remove barriers for educators who want to use Jupyter Book and MyST to publish accessible, reproducible pedagogical content. Here are the broad topics of each day of the event:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Teaching use cases and needs&lt;/strong&gt; : what educators actually need from tools like Jupyter Book.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contributor tutorials and onboarding&lt;/strong&gt; : how to get involved with the project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MyST Markdown as a text representation for Jupyter notebooks :&lt;/strong&gt; writing and sharing computational narratives.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Attendees will learn how to contribute to the Jupyter Book community, collaborate with maintainers, and advocate for the needs of their users.&lt;/p&gt;
&lt;p&gt;Have a look to the &lt;a href="https://events.linuxfoundation.org/demystifying-myst-markdown/program/schedule/"&gt;workshop agenda&lt;/a&gt; and if you have ideas you would like to be discussed there, please share them in the &lt;a href="https://github.com/jupyter-book/team-compass/issues/47"&gt;related issue&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="where-and-how-to-join"&gt;Where and how to join&lt;/h2&gt;
&lt;p&gt;The workshop is hosted by &lt;a href="https://www.lisn.upsaclay.fr/"&gt;Laboratoire Interdisciplinaire des Sciences du Numérique (LISN)&lt;/a&gt; and supported by &lt;a href="https://www.dataia.eu/en/saclai-school"&gt;SaclAI-School&lt;/a&gt; at Université Paris-Saclay.&lt;br&gt;
&lt;strong&gt;Travel funding is available&lt;/strong&gt;, &lt;a href="https://events.linuxfoundation.org/demystifying-myst-markdown/attend/travel-funding/"&gt;apply here for travel funding&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Registration and full details are on the &lt;a href="https://events.linuxfoundation.org/demystifying-myst-markdown/"&gt;event page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="thanks"&gt;Thanks&lt;/h2&gt;
&lt;p&gt;A huge thank you to the whole Jupyter community supporting the event and to the &lt;a href="/posts/2025/jupyter-community-workshops-early-2026/"&gt;Jupyter Foundation&lt;/a&gt; for making it possible.&lt;/p&gt;
</content><category term="events"/><category term="Jupyter Book"/><category term="MyST"/><category term="workshops"/></entry><entry><title>How we combine multiple repositories into one website at jupyterbook.org</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2026/how-we-combine-multiple-repositories-into-one-website/" rel="alternate"/><published>2026-04-22T13:01:00+00:00</published><updated>2026-04-22T13:01:00+00:00</updated><author><name>Chris Holdgraf</name></author><id>tag:jasongrout.github.io,2026-04-22:/medium-archive/pelican/posts/2026/how-we-combine-multiple-repositories-into-one-website/</id><summary type="html">&lt;p&gt;The Jupyter Book project has content in a bunch of different repositories — user docs, a blog, a team compass, and project &amp;amp; community…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;The Jupyter Book project has content in a bunch of different repositories — &lt;a href="https://github.com/jupyter-book/jupyter-book"&gt;user docs&lt;/a&gt;, &lt;a href="https://github.com/jupyter-book/blog"&gt;a blog&lt;/a&gt;, &lt;a href="https://github.com/jupyter-book/team-compass"&gt;a team compass&lt;/a&gt;, and &lt;a href="https://github.com/jupyter-book/jupyterbook.org"&gt;project &amp;amp; community pages&lt;/a&gt;. We recently finished an initiative to serve each set of content at &lt;code&gt;jupyterbook.org&lt;/code&gt;, while keeping the source files separated in their repositories.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Jupyter Book builds tools and standards for communicating and publishing computational narratives." src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/how-we-combine-multiple-repositories-into-one-website/images/001-1_5u-ku4TtFxBSmtmjTPqhfA_2x.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Jupyter Book builds tools and standards for communicating and publishing computational narratives.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Getting there required a combination of Netlify configuration and several improvements to MyST and the MyST theme along the way. This post walks through the pieces and how they fit together, so you can do something similar with a multi-repo project.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Cross-posted with this&lt;/em&gt; &lt;a href="https://jupyterbook.org/blog/posts/2026/multi-repo"&gt;&lt;em&gt;Jupyter Book blog post&lt;/em&gt;&lt;/a&gt; &lt;em&gt;where you can see the MyST engine in action.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="why-is-this-useful"&gt;Why is this useful?&lt;/h2&gt;
&lt;p&gt;Two things bugged us about the old setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We had multiple types of content embedded in one repository. In particular we had &lt;strong&gt;versioned user documentation&lt;/strong&gt; alongside &lt;strong&gt;evergreen community documentation&lt;/strong&gt; (e.g., &lt;a href="https://jupyterbook.org/roadmap"&gt;the roadmaps page&lt;/a&gt;). This meant we had duplicated content for some user documentation, and a slow lag time before it’d make it’s way into &lt;code&gt;/stable&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Search engines treat subdomains as separate websites, so &lt;code&gt;blog.jupyterbook.org&lt;/code&gt; wasn’t helping &lt;code&gt;jupyterbook.org&lt;/code&gt; in search rankings.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We wanted &lt;code&gt;jupyterbook.org&lt;/code&gt;, &lt;code&gt;jupyterbook.org/blog&lt;/code&gt;, &lt;code&gt;jupyterbook.org/stable&lt;/code&gt;, &lt;code&gt;jupyterbook.org/compass&lt;/code&gt; all under one roof, with each repo still deploying on its own via static websites.&lt;/p&gt;
&lt;p&gt;We accomplished this with &lt;strong&gt;Netlify proxy rules&lt;/strong&gt; and &lt;strong&gt;shared MyST configuration&lt;/strong&gt;!&lt;/p&gt;
&lt;h2 id="proxying-sub-sites-with-netlify-rewrites"&gt;Proxying sub-sites with Netlify rewrites&lt;/h2&gt;
&lt;p&gt;We discovered that &lt;a href="https://docs.netlify.com/routing/redirects/rewrites-proxies/"&gt;Netlify reverse proxy rules&lt;/a&gt; are a great way to accomplish this. These essentially intercept queries to a URL path (eg. &lt;code&gt;/blog/**&lt;/code&gt;) and serve content at that path from elsewhere (e.g., &lt;code&gt;blog.jupyterbook.org&lt;/code&gt;). The browser sees &lt;code&gt;jupyterbook.org/blog&lt;/code&gt;, but Netlify fetches the content from a totally different site behind the scenes.&lt;/p&gt;
&lt;p&gt;We set up a &lt;a href="https://github.com/jupyter-book/jupyterbook.org"&gt;“jupyterbook.org” repo&lt;/a&gt; that serves the landing page and our evergreen community documentation, and proxies everything else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt; - served directly from the &lt;a href="https://github.com/jupyter-book/jupyterbook.org"&gt;jupyterbook.org repo&lt;/a&gt; (served on Netlify)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/blog&lt;/code&gt; - proxied from the &lt;a href="https://github.com/jupyter-book/blog"&gt;blog repo&lt;/a&gt; (served on Netlify)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/compass&lt;/code&gt; - proxied from the &lt;a href="https://github.com/jupyter-book/team-compass"&gt;team-compass repo&lt;/a&gt; (Served on Netlify)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/stable&lt;/code&gt; - proxied from the &lt;a href="https://github.com/jupyter-book/jupyter-book"&gt;jupyter-book repo&lt;/a&gt; (served on &lt;a href="https://readthedocs.org"&gt;ReadTheDocs&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here’s what the &lt;code&gt;netlify.toml&lt;/code&gt; looks like (simplified):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;Blog&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proxied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;another&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Netlify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;[redirects&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;/blog/*&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;https://jupyter-book-blog.netlify.app/blog/:splat&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proxied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ReadTheDocs&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;[redirects&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;/stable/*&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;https://jupyter-book.readthedocs.io/stable/:splat&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Each repo deploys independently, meaning we can update the content at whatever cadence is best for that repository. The &lt;a href="http://jupyterbook.org"&gt;jupyterbook.org&lt;/a&gt; repo only needs updating when the nav structure changes. But making it all &lt;em&gt;feel&lt;/em&gt; like one site took some work on the MyST side.&lt;/p&gt;
&lt;h2 id="shared-configuration-with-extends"&gt;Shared configuration with &lt;code&gt;extends&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;MyST’s &lt;code&gt;extends:&lt;/code&gt; &lt;a href="https://mystmd.org/guide/external-references"&gt;configuration&lt;/a&gt; lets one project inherit configuration from another. We use this to share navbar, logo, and favicon config across all sub-sites from a single &lt;code&gt;site.yml&lt;/code&gt; in the core repo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gh"&gt;#&lt;/span&gt; In the blog&amp;#39;s myst.yml
extends:
  &lt;span class="k"&gt;-&lt;/span&gt; https://github.com/jupyter-book/jupyterbook.org/raw/refs/heads/main/docs/_site/site.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If we change the configuration at that file, it’ll automatically be inherited in every other repository when we re-build it (usually done on each commit, or on a daily CRON job with GitHub Actions).&lt;/p&gt;
&lt;p&gt;Here are a few useful things that we’ve shared across sites via the pattern above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navigation bar URLs&lt;/li&gt;
&lt;li&gt;Site footer configuration&lt;/li&gt;
&lt;li&gt;Site branding (logo, titles, etc)&lt;/li&gt;
&lt;li&gt;Announcement bars (when we need a temporary announcement to show up everywhere)&lt;/li&gt;
&lt;li&gt;Internal domain configuration (see above)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along the way we &lt;a href="https://github.com/jupyter-book/mystmd/issues/2126"&gt;added&lt;/a&gt; &lt;code&gt;parts:&lt;/code&gt; &lt;a href="https://github.com/jupyter-book/mystmd/issues/2126"&gt;support to the&lt;/a&gt; &lt;code&gt;extends:&lt;/code&gt; &lt;a href="https://github.com/jupyter-book/mystmd/issues/2126"&gt;key&lt;/a&gt; to get this working.&lt;/p&gt;
&lt;h2 id="one-gotcha-base_url-for-asset-paths"&gt;One gotcha: &lt;code&gt;BASE_URL&lt;/code&gt; for asset paths&lt;/h2&gt;
&lt;p&gt;MyST bakes &lt;code&gt;BASE_URL&lt;/code&gt; into CSS, JS, and image paths at build time. If you build with &lt;code&gt;BASE_URL=/&lt;/code&gt; but serve at &lt;code&gt;/blog&lt;/code&gt;, none of those load properly.&lt;/p&gt;
&lt;p&gt;To fix this, each sub-site builds with &lt;code&gt;BASE_URL&lt;/code&gt; set to its final path on &lt;a href="http://jupyterbook.org"&gt;jupyterbook.org&lt;/a&gt;. For example, here’s some &lt;a href="https://github.com/jupyter-book/blog/blob/main/netlify.toml"&gt;Netlify config&lt;/a&gt; from the blog that does this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[build]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="na"&gt;publish&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;publish&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# This ensures that `/blog` is appended to asset paths&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="na"&gt;environment = { BASE_URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/blog&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="na"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;cd docs &amp;amp;&amp;amp; myst build --html &amp;amp;&amp;amp; \&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;mkdir -p ../publish/blog &amp;amp;&amp;amp; \&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Here we move the HTML assets to the blog&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="na"&gt;mv _build/html/* ../publish/blog/&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="na"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="internal_domains-for-cross-site-navigation"&gt;&lt;code&gt;internal_domains&lt;/code&gt; for cross-site navigation&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;BASE_URL&lt;/code&gt; fixes asset loading, but it doesn’t fix navigation. Jupyter Book used to treat full URLs as “external” links, adding an extra icon and opening a new tab when clicked. This led to a bunch of tabs any time you navigated around &lt;a href="http://jupyterbook.org"&gt;jupyterbook.org&lt;/a&gt;, and was &lt;a href="https://github.com/jupyter-book/mystmd/issues/2719"&gt;also reported by the Project Pythia team&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We added an &lt;code&gt;internal_domains&lt;/code&gt; &lt;a href="https://github.com/jupyter-book/myst-theme/pull/816"&gt;option&lt;/a&gt; to fix this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;internal_domains&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jupyterbook&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;org&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now the theme treats any link to &lt;code&gt;jupyterbook.org&lt;/code&gt; as internal. It provides same-tab navigation and no external link icon, even though the link is technically a full URL.&lt;/p&gt;
&lt;h2 id="want-to-do-this-too"&gt;Want to do this too?&lt;/h2&gt;
&lt;p&gt;Hopefully this is a useful workflow for communities that have multiple repositories of content.&lt;/p&gt;
&lt;p&gt;All of the config is in &lt;a href="https://github.com/jupyter-book/jupyterbook.org"&gt;jupyter-book/jupyterbook.org&lt;/a&gt;, and the tracking issue with the full story is &lt;a href="https://github.com/jupyter-book/jupyter-book/issues/2528"&gt;jupyter-book/jupyter-book#2528&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you’ve got questions about this work, come chat with us at &lt;a href="https://discord.mystmd.org"&gt;discord.mystmd.org&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Thanks to &lt;a href="https://projectpythia.org/"&gt;Project Pythia&lt;/a&gt; for providing additional guidance, collaboration, and support for this work.&lt;/li&gt;
&lt;li&gt;Thanks to &lt;a href="https://docs.earthscope.org/en/latest/intro.html"&gt;EarthScope&lt;/a&gt; for giving user feedback about the usefulness of this as they explore converting their docs to the new MyST engine.&lt;/li&gt;
&lt;/ul&gt;
</content><category term="Jupyter Book"/><category term="MyST"/></entry><entry><title>The MyST AnyWidget Directive</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2026/the-myst-anywidget-directive/" rel="alternate"/><published>2026-04-16T15:28:00+00:00</published><updated>2026-04-16T15:28:00+00:00</updated><author><name>Steve Purves</name></author><id>tag:jasongrout.github.io,2026-04-16:/medium-archive/pelican/posts/2026/the-myst-anywidget-directive/</id><summary type="html">&lt;p&gt;Authors of MyST Markdown can now embed interactive JavaScript widgets directly in content using the new {anywidget} directive.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Authors of MyST Markdown can now embed interactive JavaScript widgets directly in content using the new &lt;code&gt;{anywidget}&lt;/code&gt; directive.&lt;/p&gt;
&lt;h2 id="what-this-means"&gt;What this means&lt;/h2&gt;
&lt;p&gt;You can now add any javascript interactivity to your MyST Markdown website or Jupyter Book.&lt;/p&gt;
&lt;p&gt;Here’s an example that creates a clickable button 👇 to see an interactive version check out &lt;a href="https://jupyterbook.org/blog/posts/2026/the-myst-anywidget#how-we-got-here"&gt;the post on the Jupyter Book blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/the-myst-anywidget-directive/images/001-1_TksTxGw_ahJkRxlsIVU5_g.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="how-we-got-here"&gt;How we got here&lt;/h2&gt;
&lt;p&gt;The idea of a portable widget interface for interactive computing isn’t new: &lt;a href="https://anywidget.dev"&gt;anywidget&lt;/a&gt; has been an emerging standard in the Jupyter community for a while, leveraging modern Javascript principles (via &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules"&gt;ESM Modules&lt;/a&gt;), and giving you a simple &lt;code&gt;initialize({ model }); render({ model, el })&lt;/code&gt;&lt;a href="https://jupyterbook.org/blog/posts/2026/the-myst-anywidget#fn-model"&gt;[1]&lt;/a&gt; contract so that widgets can be written once and reused across notebooks. AnyWidget in Jupyter interfaces supports tight integration with the kernel, allowing interactions similar to &lt;code&gt;ipywidgets&lt;/code&gt;&lt;a href="https://jupyterbook.org/blog/posts/2026/the-myst-anywidget#fn-jupyter"&gt;[2]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From the MyST Markdown and Jupyter Book point of view, we’ve focussed on supporting the &lt;code&gt;render()&lt;/code&gt; side of the AnyWidget interface (see &lt;a href="https://anywidget.dev/en/afm/#what-is-afm"&gt;AnyWidget Frontend Modules&lt;/a&gt;) to allow MyST users to bring any kind of javascript-based interactivity into their articles and books &lt;em&gt;without having to lean on Jupyter at all&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;That part of the story started at SciPy 2024 with &lt;a href="https://github.com/manzt"&gt;Trevor Mantz&lt;/a&gt; and Steve Purves hacking through a proof of concept during the sprints. Curvenote built working support for &lt;a href="https://www.npmjs.com/package/@curvenote/any-widget"&gt;AnyWidgets as a MyST Markdown extension&lt;/a&gt; while working with researchers to support domain specific visualizations, and then upstreamed the implementation to create the &lt;code&gt;{anywidget}&lt;/code&gt; directive that has just been released in &lt;code&gt;mystmd&lt;/code&gt; and &lt;code&gt;jb2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The new directive in &lt;code&gt;mystmd&lt;/code&gt; and the respective supporting package in &lt;code&gt;@myst-theme/anywidget&lt;/code&gt; evolved with input from the JupyterBook team. Here’s how it is currently structured:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;anywidget&lt;/code&gt; is a new node in the MyST AST, meaning first-class support for this capability outside of notebooks.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mystmd&lt;/code&gt; will bundle ESM and CSS modules at build time, ensuring dependencies are packaged with the book/article when it is published or deployed.&lt;/li&gt;
&lt;li&gt;The ESM and CSS modules can either be (a) hosted remotely (which makes sense for shared widgets that many people are using or collaborating around) or (b) added as local files (which makes sense for widgets specific to a single book/website).&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;NodeRenderer&lt;/code&gt; part of the release is an independent package &lt;a href="https://www.npmjs.com/package/@myst-theme/anywidget"&gt;@myst-theme/anywidget&lt;/a&gt; that can be optionally adopted by theme developers (it’s already built into the core themes).&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;mystmd&lt;/code&gt; and Jupyter Book users, to upgrade to the latest theme. Run &lt;code&gt;myst clean --templates&lt;/code&gt; before you next start your server and the latest version will be downloaded.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;p&gt;From an author’s perspective, point the directive at an ESM module (either a URL to a hosted script or a local path) and the widget runs in the page with its own state and DOM. You may optionally pass in a CSS URL/path and a JSON body of props to initialize the widget model.&lt;/p&gt;
&lt;p&gt;To understand how to build your own widgets, the &lt;a href="https://mystmd.org/guide/widgets"&gt;MyST widgets guide&lt;/a&gt; walks through the &lt;code&gt;render({ model, el })&lt;/code&gt; signature, styling with Shadow DOM, and cleanup on unmount. It’s the same mental model as &lt;code&gt;anywidget&lt;/code&gt; in Jupyter, so if you’ve written or seen Jupyter AnyWidgets, you’re already most of the way there.&lt;/p&gt;
&lt;p&gt;If you want to try it, the &lt;a href="https://github.com/jupyter-book/example-widgets"&gt;example-widgets repo&lt;/a&gt; has small demos (confetti, div-map, etc. Contributions are welcome!), and the &lt;a href="https://opensci.dev/"&gt;opensci.dev blog&lt;/a&gt; has some live examples using scientific datasets.&lt;/p&gt;
&lt;h2 id="whats-next"&gt;What’s next&lt;/h2&gt;
&lt;p&gt;Widget support in MyST is still marked experimental so the details may evolve. There are still some things on the roadmap for &lt;code&gt;{anywidget}&lt;/code&gt; which will no doubt expand as we hear of new requirements from widget creators, but we expect the following to be close to the top of the stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;model&lt;/code&gt; part of the interface, which will allow multiple instances of a widget to communicate on the page&lt;a href="https://jupyterbook.org/blog/posts/2026/the-myst-anywidget#fn-model"&gt;[1]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shipping additional dependencies like static files that the widgets may need&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The JupyterBook team is actively working on improving and evolving the widget model and integrating with Jupyter. We look forward to seeing what the community builds — visit the &lt;a href="https://discord.mystmd.org/"&gt;discord&lt;/a&gt; to showcase what you have built!&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;A shout out to my co-contributors on this work; to &lt;a href="https://github.com/manzt"&gt;@mantz&lt;/a&gt; for the original hacking, &lt;a href="https://github.com/rowanc1"&gt;@rowanc1&lt;/a&gt; and &lt;a href="https://github.com/fwkoch"&gt;@fwkoch&lt;/a&gt; for iterating on the downstream code, &lt;a href="https://github.com/agoose77"&gt;@agoose77&lt;/a&gt; for working with me on the upstream changes, &lt;a href="https://github.com/choldgraf"&gt;@choldgraph&lt;/a&gt; for insightful reviews and a docs! and &lt;a href="https://github.com/jupyter-book"&gt;the broader Jupyter Book Team&lt;/a&gt; for all the reviews and feedback.&lt;/p&gt;
</content><category term="anywidget"/><category term="Jupyter Book"/><category term="MyST"/></entry><entry><title>Call for applications: Community Manager for JupyterHub and Jupyter Book</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2026/call-for-applications-community-manager-for-jupyterhub/" rel="alternate"/><published>2026-03-05T16:44:00+00:00</published><updated>2026-03-05T19:07:00+00:00</updated><author><name>Kirstie Whitaker</name></author><id>tag:jasongrout.github.io,2026-03-05:/medium-archive/pelican/posts/2026/call-for-applications-community-manager-for-jupyterhub/</id><summary type="html">&lt;p&gt;The JupyterHub and Jupyter Book communities are hiring a community manager.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;The &lt;a href="https://jupyter.org/hub"&gt;JupyterHub&lt;/a&gt; and &lt;a href="https://jupyterbook.org"&gt;Jupyter Book&lt;/a&gt; communities are hiring a &lt;strong&gt;community manager&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="a cartoon of people working together. there are a group in the center and then spokes of people working in different contexts on different focus areas, some are alone but others are working in smaller groups, all part of the whole collaboration." src="https://jasongrout.github.io/medium-archive/pelican/posts/2026/call-for-applications-community-manager-for-jupyterhub/images/001-1__jfvloGZbtvcYdoZ0N6orA.jpeg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Join our community and support us all to grow, nurture, and build things together. Credit: The Turing Way and Scriberia, used under a CC-BY license &lt;a href="https://doi.org/10.5281/zenodo.3332808"&gt;https://doi.org/10.5281/zenodo.3332808&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In JupyterHub, we are democratizing access to interactive computing environments to allow everyone, no matter where they are, to explore data, develop code, and advance knowledge without barriers. In Jupyter Book, we are building the next generation of open, community-driven technical publication tooling, leveraging the &lt;a href="https://mystmd.org/"&gt;MyST document engine&lt;/a&gt; to create modular, reusable, and reproducible computational narratives.&lt;/p&gt;
&lt;p&gt;We are excited to fund dedicated time for someone — maybe you! — to join these teams.&lt;/p&gt;
&lt;p&gt;The community manager will be responsible for identifying and developing activities and communication pathways that align maintainer and contributor actions with the goals of each project, and that build bridges across the Jupyter ecosystem.&lt;/p&gt;
&lt;p&gt;You can read more about our motivation for this role in the &lt;a href="https://github.com/jupyter-governance/funding-proposals/issues/6"&gt;proposal&lt;/a&gt;, part of the Jupyter Foundation’s &lt;a href="https://jupyterfoundation.org/community-funding-proposals"&gt;Community Funding&lt;/a&gt; initiative. We particularly encourage applicants to review the section “&lt;em&gt;Impact Metrics: How do we define success?&lt;/em&gt;”&lt;/p&gt;
&lt;p&gt;In this blog post we have outlined the community manager’s &lt;strong&gt;responsibilities&lt;/strong&gt;, their &lt;strong&gt;preferred expertise&lt;/strong&gt;, and &lt;strong&gt;how to apply.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This is a contract role, funded at $90,000 to be spent by the end of April 2027.&lt;/strong&gt; The community manager will be engaged as a contractor of the Linux Foundation and will follow the standard Linux Foundation contractor onboarding process.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The deadline to apply is 29 March 2026.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="responsibilities"&gt;Responsibilities&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Strategic alignment and contributor guidance&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Collaborate with the maintainer teams from both projects to understand, document, and broadcast each project’s priorities to their communities.&lt;/li&gt;
&lt;li&gt;Actively connect contributors to open issues and workstreams that align with the respective project’s goals, and redirect well-intentioned contributions that are not aligned with the project’s currently prioritized efforts.&lt;/li&gt;
&lt;li&gt;Efficiently connect contributors with maintainers to provide them the guidance and review needed to make efficient progress, managing workload on both sides of the mentorship pair.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Contributor growth and leadership development&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Design, visualize, and manage a clear contributor journey, including identifying requisite skills and project context knowledge, for each community.&lt;/li&gt;
&lt;li&gt;Identify engaged community members and create pathways for them to take on more responsibility, such as triaging issues, reviewing pull requests, or mentoring others within their project of interest.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Fostering knowledge sharing and collaboration&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identify and create opportunities for the community of each project to share information, best practices, and technical knowledge, while respecting their distinct roadmaps.&lt;/li&gt;
&lt;li&gt;Facilitate cross-community events, such as running “collaboration cafes” for both JupyterHub and JupyterBook, and strategically shape them into meetings that provide value and foster connection for both projects.&lt;/li&gt;
&lt;li&gt;Develop re-usable templates for explaining contributor pathways, such as onboarding documentation, skills maps/matrices for progression into contribution and maintenance roles, and collaboration cafe guides.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Learn in the open&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ensure all materials are publicly available and discoverable, including progress against our community health metrics described below.&lt;/li&gt;
&lt;li&gt;Promote these learnings across the Jupyter community including within the Zulip channel, at regular community calls, and by “visiting” other sub-projects (at synchronous meetings or in asynchronous discussion spaces) to discuss community management efforts as requested.&lt;/li&gt;
&lt;li&gt;Join the &lt;a href="https://jupyter.org/governance/communitybuildingworkinggroup/"&gt;Jupyter Community Building Working Group&lt;/a&gt; and be an active member throughout their paid time on the project.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="preferred-expertise"&gt;Preferred expertise&lt;/h2&gt;
&lt;p&gt;We have not marked any of the expertise categories listed here as &lt;em&gt;required&lt;/em&gt;. We recognize that we are looking for a unicorn, and they are curiously hard to find! &lt;strong&gt;If you do not have expertise across all of these categories we encourage you to apply.&lt;/strong&gt; We are looking forward to getting to know candidates better, including where they have identified opportunities for career and skill development as part of the JupyterHub and Jupyter Book teams.&lt;/p&gt;
&lt;p&gt;Our assessment pathway is included as part of this list to guide applicants in curating their strongest application. If you are uncertain how to answer any of the questions and/or prompts, please ask in our &lt;a href="https://jupyter.zulipchat.com/#narrow/channel/469744-jupyterhub"&gt;Jupyter Hub Zulip channel&lt;/a&gt; or email Kirstie Whitaker directly at &lt;a href="mailto:kirstie.whitaker@berkeley.edu"&gt;kirstie.whitaker@berkeley.edu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Track record of contributions to open source projects.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assessment: Cover letter &amp;amp; links&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Understanding of multi-stakeholder, community governed open source community dynamics.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assessment: Interview question. Describe two situations — one featuring a success and one a failure — where you have sought to align diverse stakeholders around a common goal. For both, share what you learned from the experiences.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Understanding of the challenges that Jupyter Hub and Jupyter Book are designed to solve (or reduce) in the world.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assessment: Interview question. Describe two deployments — one each of Jupyter Hub and Jupyter Book — that each meet a need in either education, research or technical development. You do not need to have run these deployments yourself.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Technical skills in Python and/or TypeScript.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assessment: Cover letter &amp;amp; links&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Track record of identifying and completing tasks in the presence of significant uncertainty.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assessment: Cover letter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ability to work effectively with two distinct and diverse teams whose community members are geographically distributed with significant time zone differences.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assessment: Cover letter. All instructions from this recruitment call followed, the letter is clearly and concisely written, includes concrete examples, and publicly accessible links where appropriate.&lt;/li&gt;
&lt;li&gt;Assessment: Interview question. Given your knowledge of Jupyter Hub and Jupyter Book, and your previous experience, how will you know if you are working effectively within these two communities?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ability to ask for help and self manage time allocations and tasks.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assessment: Interview question. Which aspects of this role do you think will be hard for you? Which aspects will be easy (or easier) for you? Where do you expect to ask for help and/or support in the role?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-to-apply"&gt;How to apply&lt;/h2&gt;
&lt;p&gt;Submit a cover letter and resume through this Google Form: &lt;a href="https://forms.gle/Qw6ddyJ8rzZY5vQm6"&gt;https://forms.gle/Qw6ddyJ8rzZY5vQm6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please include:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your motivation to apply for this role.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Links to up to 3 publicly available GitHub repositories that highlight engagement in issues, pull requests, community discussions (or equivalent conversations on alternative git forge platforms).&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you don’t have publicly available links, provide a letter from a team member from a private initiative who can endorse these collaboration skills.&lt;/li&gt;
&lt;li&gt;If you can not meet this requirement, please note that in your application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Links to up to 3 examples of code you have written in Python and/or TypeScript.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you don’t have publicly available links, provide a letter from a team member on a private initiative endorsing these development skills.&lt;/li&gt;
&lt;li&gt;If you can not meet this requirement, please note that in your application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;A description of a previous role (paid or volunteer) where you have identified and delivered outcomes in the presence of uncertainty.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include links to task documentation (issue / PR / report) if publicly available.&lt;/li&gt;
&lt;li&gt;If you can not meet this requirement, please note that in your application.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-to-expect"&gt;&lt;strong&gt;What to expect&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;We’ll accept applications from now through 29 March, 2026.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Once applications are in, here’s our process:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Resume and cover letter review:&lt;/strong&gt; The recruitment panel will review all applications and invite up to 5 applicants for an interview on zoom at a time that is convenient for the applicant and the panel members.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interview:&lt;/strong&gt; The recruitment panel will meet with applicants for 30 minutes over Zoom. They will ask the same questions of every applicant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Panel discussion &amp;amp; alignment:&lt;/strong&gt; The recruitment panel will discuss interview outcomes and align on a decision.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offer:&lt;/strong&gt; We expect to communicate a final decision to all applicants by 30 April, 2026.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Timeline&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;29 March 2026, &lt;a href="https://en.wikipedia.org/wiki/Anywhere_on_Earth"&gt;AoE&lt;/a&gt;: Deadline for resume and cover letter applications.&lt;/li&gt;
&lt;li&gt;Before 5 April 2026: Invite up to 5 applicants to interview.&lt;/li&gt;
&lt;li&gt;8 April — 17 April 2026: Interviews conducted over Zoom.&lt;/li&gt;
&lt;li&gt;Before 11 May 2026: Communicate final decision to all applicants.&lt;/li&gt;
&lt;li&gt;May 2026: Post holder coordinates a contract with the Linux Foundation, following their standard onboarding process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;This job description was co-created by April Johnson, Yuvi, and Kirstie Whitaker, with guidance from Chris Holdgraf, Min Ragan-Kelley, Raniere Silva, and Stéfan van der Walt, along with community input at the JupyterHub and Jupyter Book collaboration cafes.&lt;/p&gt;
</content><category term="community"/><category term="Jupyter Book"/><category term="JupyterHub"/></entry><entry><title>Announcing the new Jupyter Book</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2020/announcing-the-new-jupyter-book/" rel="alternate"/><published>2020-08-12T19:55:00+00:00</published><updated>2020-08-12T20:07:00+00:00</updated><author><name>Chris Holdgraf</name></author><id>tag:jasongrout.github.io,2020-08-12:/medium-archive/pelican/posts/2020/announcing-the-new-jupyter-book/</id><summary type="html">&lt;p&gt;Note: this announcement is cross-posted between the Jupyter Blog and the Executable Book Project updates blog&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;Note: this announcement is cross-posted between the&lt;/em&gt; &lt;a href="https://blog.jupyter.org/"&gt;&lt;em&gt;Jupyter Blog&lt;/em&gt;&lt;/a&gt; &lt;em&gt;and the&lt;/em&gt; &lt;a href="https://executablebooks.org/en/latest/updates/index.html"&gt;&lt;em&gt;Executable Book Project updates blog&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/announcing-the-new-jupyter-book/images/001-1_7SNQTEdxo9qTuEpR-yUNZQ.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;Jupyter Book is an open source project for building beautiful, publication-quality books, websites, and documents from source material that contains computational content. With this post, we’re happy to announce that Jupyter Book has been re-written from the ground up, making it easier to install, faster to use, and able to create more complex publishing content in your books. It is now supported by &lt;a href="https://executablebooks.org/en/latest/"&gt;the Executable Book Project&lt;/a&gt;, an open community that builds open source tools for interactive and executable documents in the Jupyter ecosystem and beyond.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="The new Jupyter Book interface, highlighting how you can insert code outputs into your content" src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/announcing-the-new-jupyter-book/images/002-0_ExwTAlNcaJadUOkS.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The new Jupyter Book interface, highlighting how you can &lt;a href="https://jupyterbook.org/content/glue.html"&gt;insert code outputs into your content&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;This post is a short overview of the new features in Jupyter Book, and gives some background on the future of the project.&lt;/p&gt;
&lt;p&gt;You can also browse the &lt;a href="https://jupyterbook.org/"&gt;new Jupyter Book documentation&lt;/a&gt;, or &lt;a href="https://github.com/executablebooks/jupyter-book"&gt;check out the Jupyter Book GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;❗❗ Jupyter Book is still in beta, so things are always changing. We’d love your feedback, ideas, and PRs for how to make the project better!❗❗&lt;/p&gt;
&lt;h2 id="what-does-the-new-jupyter-book-do"&gt;What does the new Jupyter Book do?&lt;/h2&gt;
&lt;p&gt;The new version of Jupyter Book will feel very similar. However, it has a lot of new features due to the new Jupyter Book stack underneath (more on that later).&lt;/p&gt;
&lt;p&gt;The new Jupyter Book has the following main features (with links to the relevant documentation for each):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅&lt;/strong&gt; &lt;a href="https://jupyterbook.org/content-types/markdown"&gt;&lt;strong&gt;Write publication-quality content in markdown&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
You can write in either Jupyter markdown, or an extended flavor of markdown with &lt;a href="https://jupyterbook.org/content/myst"&gt;publishing features&lt;/a&gt;. This includes support for rich syntax such as &lt;a href="https://jupyterbook.org/content/citations"&gt;citations and cross-references&lt;/a&gt;, &lt;a href="https://jupyterbook.org/content/math"&gt;math and equations&lt;/a&gt;, and &lt;a href="https://jupyterbook.org/content/figures"&gt;figures&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅&lt;/strong&gt; &lt;a href="https://jupyterbook.org/content-types/notebooks"&gt;&lt;strong&gt;Write content in Jupyter Notebooks&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
This allows you to include your code and outputs in your book. You can also write notebooks &lt;a href="https://jupyterbook.org/content-types/myst-notebooks"&gt;entirely in markdown&lt;/a&gt; to execute when you build your book.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅&lt;/strong&gt; &lt;a href="https://jupyterbook.org/content/execute"&gt;&lt;strong&gt;Execute and cache your book’s content&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
For &lt;code&gt;.ipynb&lt;/code&gt; and markdown notebooks, execute code and insert the latest outputs into your book. In addition, &lt;a href="https://jupyterbook.org/content/execute.html#cacheing-the-notebook-execution"&gt;cache and re-use&lt;/a&gt; outputs to be used later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅&lt;/strong&gt; &lt;a href="https://jupyterbook.org/content/glue"&gt;&lt;strong&gt;Insert notebook outputs into your content&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Generate outputs as you build your documentation, and insert them in-line with your content across pages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅&lt;/strong&gt; &lt;a href="https://jupyterbook.org/interactive/launchbuttons"&gt;&lt;strong&gt;Add interactivity to your book&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
You can &lt;a href="https://jupyterbook.org/interactive/hiding"&gt;toggle cell visibility&lt;/a&gt;, include &lt;a href="https://jupyterbook.org/interactive/interactive"&gt;interactive outputs&lt;/a&gt; from Jupyter, and &lt;a href="https://jupyterbook.org/interactive/launchbuttons"&gt;connect with online services&lt;/a&gt; like Binder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅&lt;/strong&gt; &lt;a href="https://jupyterbook.org/start/build"&gt;&lt;strong&gt;Generate a variety of outputs&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
This includes single- and multi-page websites, as well as &lt;a href="https://jupyterbook.org/advanced/pdf"&gt;PDF outputs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;✅&lt;/strong&gt; &lt;a href="https://jupyterbook.org/reference/cli"&gt;&lt;strong&gt;Build books with a simple command-line interface&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
You can quickly generate your books with one command, like so: &lt;code&gt;jupyter-book build mybook/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These are just a few of the major changes that we’ve made. For a more complete idea of what you can do, &lt;a href="https://jupyterbook.org/"&gt;check out the Jupyter Book documentation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="major-changes"&gt;Major changes&lt;/h2&gt;
&lt;p&gt;In the next few sections we’ll talk about some major changes that you may notice in Jupyter Book.&lt;/p&gt;
&lt;h3 id="an-enhanced-flavor-of-markdown"&gt;An enhanced flavor of markdown&lt;/h3&gt;
&lt;p&gt;The biggest enhancement to Jupyter Book is support for the &lt;a href="https://myst-parser.readthedocs.io/en/latest/"&gt;MyST Markdown language&lt;/a&gt;. MyST stands for “Markedly Structured Text”, and is a flavor of markdown that implements all of the features of the &lt;a href="https://www.sphinx-doc.org/"&gt;Sphinx documentation engine&lt;/a&gt;, allowing you to write scientific publications in markdown. It draws inspiration from RMarkdown and the reStructuredText ecosystem of tools. Anything you can do in Sphinx, you can do with MyST as well.&lt;/p&gt;
&lt;p&gt;MyST Markdown is a &lt;em&gt;superset&lt;/em&gt; of Jupyter Markdown (AKA, CommonMark), meaning that &lt;em&gt;any default markdown in a Jupyter Notebook is valid in Jupyter Book&lt;/em&gt;. If you’d like extra features in markdown such as citations, figures, references, etc, then you may include extra MyST Markdown syntax in your content.&lt;/p&gt;
&lt;p&gt;For example, here’s how you can &lt;a href="https://jupyterbook.org/content/citations.html"&gt;include a citation&lt;/a&gt; in the new Jupyter Book:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="A sample citation. Here we see how you can include citation syntax in-line with your markdown, and then insert a bibliography later on in your page." src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/announcing-the-new-jupyter-book/images/003-0_SSmfD6zf7vpQHYy3.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;A sample citation. Here we see how you can include citation syntax in-line with your markdown, and then insert a bibliography later on in your page.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;And here’s how you can include a figure:&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="A sample figure. Here we see how you can insert a figure with a caption into your book, and control some aspects of how the figure is displayed with options." src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/announcing-the-new-jupyter-book/images/004-0_yKc7ku6ENbclkhg1.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;A sample figure. Here we see how you can insert a figure with a caption into your book, and control some aspects of how the figure is displayed with options.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="a-smarter-build-system"&gt;A smarter build system&lt;/h3&gt;
&lt;p&gt;While the old version of Jupyter Book used a combination of Python and Jekyll to build your book’s HTML, the new Jupyter Book uses Python all the way through. This means that building the HTML for your book is as simple as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;jupyter-book build mybookname/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In addition, the new build system leverages &lt;a href="https://jupyter-cache.readthedocs.io/"&gt;Jupyter Cache&lt;/a&gt; to execute notebook content &lt;em&gt;only if the code is updated&lt;/em&gt;, and to insert the outputs from the cache at build time. This saves you time by avoiding the need to re-execute code that hasn’t been changed.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="An example build process. Here the jupyter-book command-line interface is used to convert a collection of content into an HTML book." src="https://jasongrout.github.io/medium-archive/pelican/posts/2020/announcing-the-new-jupyter-book/images/005-0_-5xZV1SW6nA4ARWx.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;An example build process. Here the &lt;code&gt;jupyter-book&lt;/code&gt; command-line interface is used to convert a collection of content into an HTML book.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="more-book-output-types"&gt;More book output types&lt;/h3&gt;
&lt;p&gt;By leveraging Sphinx, Jupyter Book will be able to support more complex outputs than &lt;em&gt;just&lt;/em&gt; an HTML website. For example, we are currently prototyping &lt;a href="https://jupyterbook.org/advanced/pdf.html"&gt;PDF Outputs&lt;/a&gt;, both via HTML as well as via LaTeX. This gives Jupyter Book more flexibility to generate the right book for your use case.&lt;/p&gt;
&lt;p&gt;You can also run Jupyter Book on &lt;a href="https://jupyterbook.org/start/build.html#build-a-standalone-page"&gt;individual pages&lt;/a&gt;. This means that you can write single-page content (like a scientific article) entirely in Markdown.&lt;/p&gt;
&lt;h3 id="a-new-stack"&gt;A new stack&lt;/h3&gt;
&lt;p&gt;The biggest change under-the-hood is that Jupyter Book now uses &lt;a href="https://www.sphinx-doc.org/en/master/"&gt;the Sphinx documentation engine&lt;/a&gt; instead of Jekyll for building books. By leveraging the Sphinx ecosystem, Jupyter Book can more effectively build on top of community tools, and can contribute components back to the broader community.&lt;/p&gt;
&lt;p&gt;Instead of being a single repository, the old Jupyter Book repository has now been separated into several modular tools. &lt;strong&gt;Each of these tools can be used on their own in your Sphinx documentation&lt;/strong&gt;, and they can be coordinated together &lt;em&gt;via&lt;/em&gt; Jupyter Book:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://myst-parser.readthedocs.io/en/latest/"&gt;&lt;strong&gt;The MyST markdown parser for Sphinx&lt;/strong&gt;&lt;/a&gt; allows you to write fully-featured Sphinx documentation in Markdown.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://myst-nb.readthedocs.io/en/latest/"&gt;&lt;strong&gt;MyST-NB&lt;/strong&gt;&lt;/a&gt; is an &lt;code&gt;.ipynb&lt;/code&gt; parser for Sphinx that allows you to use MyST Markdown in your notebooks. It also provides tools for execution, cacheing, and variable insertion of Jupyter Notebooks in Sphinx.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sphinx-book-theme.readthedocs.io/"&gt;&lt;strong&gt;The Sphinx Book Theme&lt;/strong&gt;&lt;/a&gt; is a beautiful book-like theme for Sphinx, build on top of the &lt;a href="https://pydata-sphinx-theme.readthedocs.io/en/latest/"&gt;PyData Sphinx Theme&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jupyter-cache.readthedocs.io/en/latest/"&gt;&lt;strong&gt;Jupyter Cache&lt;/strong&gt;&lt;/a&gt; allows you to execute a collection of notebooks and store their outputs in a hashed database. This lets you cache your notebook’s output without including it in the &lt;code&gt;.ipynb&lt;/code&gt; file itself.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sphinx-thebe.readthedocs.io/en/latest/"&gt;&lt;strong&gt;Sphinx-Thebe&lt;/strong&gt;&lt;/a&gt; converts your “static” HTML page into an interactive page with code cells that are run remotely by a Binder kernel.&lt;/li&gt;
&lt;li&gt;Finally, Jupyter Book also supports a growing &lt;strong&gt;collection of Sphinx extensions&lt;/strong&gt;, such as &lt;a href="https://sphinx-copybutton.readthedocs.io/en/latest/"&gt;sphinx-copybutton&lt;/a&gt;, &lt;a href="https://sphinx-togglebutton.readthedocs.io/"&gt;sphinx-togglebutton&lt;/a&gt;, &lt;a href="https://sphinx-comments.readthedocs.io/en/latest/"&gt;sphinx-comments&lt;/a&gt;, and &lt;a href="https://sphinx-panels.readthedocs.io/en/latest/?badge=latest"&gt;sphinx-panels&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ll write a more developer-focused post in the future to describe each of these components in more detail.&lt;/p&gt;
&lt;h2 id="what-next"&gt;What next?&lt;/h2&gt;
&lt;p&gt;Jupyter Book and its related projects will continue to be developed as a part of the &lt;a href="https://executablebooks.org/"&gt;Executable Book Project&lt;/a&gt;, a community that builds open source tools for high-quality scientific publications from computational content in the Jupyter ecosystem and beyond.&lt;/p&gt;
&lt;p&gt;If you’d like to learn more about Jupyter Book or get started building your own books, then check out &lt;a href="https://jupyterbook.org/"&gt;the new Jupyter Book documentation&lt;/a&gt;. Jupyter Book is still in beta and is constantly being improved, so your &lt;a href="https://github.com/executablebooks/jupyter-book/issues/new/choose"&gt;feedback and contributions are always welcome&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If there are particular features you’d like to see, open an issue or give a 👍 to a pre-existing issue, and &lt;a href="https://executablebooks.org/en/latest/feature-vote.html"&gt;it will be bumped up on the feature request leaderboard&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="get-involved"&gt;Get involved&lt;/h2&gt;
&lt;p&gt;If you’d like to contribute to any of the projects listed in this post, you are highly encouraged to do so! The Executable Book Project (and thus Jupyter Book) is run as an open project that &lt;a href="https://executablebooks.org/en/latest/contributing.html"&gt;welcomes contributions from others&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are excited about all the new features and improvements in the new Jupyter Book, and look forward to seeing the new books that the community creates with this stack!&lt;/p&gt;
</content><category term="Jupyter Book"/><category term="publishing"/></entry></feed>