Framework-agnostic Jupyter notebook renderer for the browser.
@jupyter-kit/* renders .ipynb notebooks in the browser from any host —
React, Vue 3, Svelte 5, a Web Component, or plain DOM. Optional packages
add in-browser execution (Pyodide / WebR), remote Jupyter kernels,
interactive ipywidgets, KaTeX / MathJax, editable CodeMirror cells, and
13 chrome themes × 8 syntax themes.
Formerly
react-ipynb-renderer(v1 / v2). v3 is a rewrite into a pnpm monorepo; see the migration guide.
pnpm add @jupyter-kit/react @jupyter-kit/theme-default
import { Notebook } from '@jupyter-kit/react';
import { python } from '@jupyter-kit/core/langs/python';
import '@jupyter-kit/theme-default/default.css';
import '@jupyter-kit/theme-default/syntax/one-dark.css';
import notebook from './demo.ipynb';
export default function App() {
return <Notebook ipynb={notebook} language="python" languages={[python]} />;
}
Vue / Svelte / Web Component / vanilla variants + every opt-in (math, executor, widgets, …) are generated by the install wizard.
@jupyter-kit/react, @jupyter-kit/vue,
@jupyter-kit/svelte, @jupyter-kit/wc (<jk-notebook> custom
element), or @jupyter-kit/core used directly from vanilla JS.@jupyter-kit/executor-pyodide (Python) and
@jupyter-kit/executor-webr (R) run cells in a Web Worker, with
multi-CDN fallback + per-candidate timeout.@jupyter-kit/executor-jupyter talks to
any running Jupyter Server / JupyterHub / BinderHub / Enterprise
Gateway over the standard kernel WebSocket protocol (Python, R,
Julia, …).@jupyter-kit/widgets hydrates saved
widget-state for static notebooks, or drives widgets live over the
Jupyter Comm protocol when paired with the Pyodide executor.@jupyter-kit/katex / -cdn / @jupyter-kit/mathjax / -cdn.@jupyter-kit/theme-<name>) or all-in-one (@jupyter-kit/theme-all).@jupyter-kit/editor-codemirror makes cells
editable; combine with an executor for a mini notebook.packages/e2e/tests/xss.spec.ts) runs on every push.| Package | Purpose |
|---|---|
@jupyter-kit/core |
Rendering engine (no framework dependency) |
@jupyter-kit/react / vue / svelte / wc |
Framework wrappers (<Notebook> / <jk-notebook>) |
@jupyter-kit/theme-<name> |
Notebook chrome CSS — 13 variants |
@jupyter-kit/theme-all |
Every chrome + every syntax theme under subpaths |
@jupyter-kit/editor-codemirror |
CodeMirror 6 editor plugin |
@jupyter-kit/executor-pyodide |
Python executor (Pyodide) |
@jupyter-kit/executor-webr |
R executor (WebR) — GPL-2.0+ |
@jupyter-kit/executor-jupyter |
Remote Jupyter Server / Hub / Binder kernel executor |
@jupyter-kit/katex / -cdn |
KaTeX math plugin (bundled / CDN) |
@jupyter-kit/mathjax / -cdn |
MathJax math plugin (bundled / CDN) |
@jupyter-kit/widgets |
ipywidgets renderer |
@jupyter-kit/comm |
Jupyter Comm protocol types (zero runtime) |
packages/
core ← rendering engine
react, vue, svelte, wc ← framework wrappers
theme ← less sources + publish build
editor-codemirror ← editor plugin
executor-pyodide, executor-webr ← in-browser runtimes
executor-jupyter ← remote Jupyter kernel client
katex, katex-cdn, mathjax, mathjax-cdn
widgets, comm ← ipywidgets support
fixtures ← shared .ipynb test fixtures
storybook ← Storybook stories
e2e ← Playwright tests
docs ← Astro + Starlight site
# Clone with the jupyter-themes submodule (less sources for chromes)
git clone --recurse-submodules https://github.com/walkframe/jupyter-kit.git
cd jupyter-kit
pnpm install
# Workspace-wide build — all packages, topologically ordered
pnpm build
# Unit tests
pnpm test
# Playwright e2e (builds the storybook static site automatically)
pnpm test:e2e
# Interactive stories
pnpm storybook
# Docs dev server (theme watcher + Astro at http://localhost:4321)
pnpm -F @jupyter-kit/docs dev
Apache-2.0. See LICENSE. Third-party license elections and
one opt-in GPL dependency (@jupyter-kit/executor-webr) are documented
in NOTICE.md.