Roadmap¶
marimo-book is alpha (v0.1.0a1) and evolving. This page is the
public-facing summary of what's shipped, what's in flight, and what's
on the medium-term horizon. Plans change; treat this as a direction,
not a contract.
Shipped in v0.1 (April 2026)¶
- Five working CLI commands:
new,build,serve,check,clean book.ymlschema (pydantic v2) covering title, authors, branding, palette, launch buttons, per-widget defaults, analytics, dependencies mode, external-link checker flag, TOC- Preprocessor transforms: marimo
.py→ Markdown + inlined outputs; callouts, anywidgets,.ipynb→.mdcross-ref rewrite,../images/path fixup - Anywidget runtime shim (client-side rehydration, no marimo kernel)
- Material for MkDocs shell with sensible defaults; dark mode, full-text search, code-copy buttons, responsive theme
- GitHub Pages deploy workflow scaffolded by
marimo-book new sandboxdependency mode (PEP 723 per-notebook isolation viauv)- MIT license; PyPI Trusted Publishing workflow
Next up (v0.2, in planning)¶
WASM / hybrid render modes¶
Enable per-chapter interactivity without requiring a marimo kernel.
Three modes, per-entry selection in book.yml:
toc:
- file: content/MR_Physics.py
mode: wasm # runs reactively in-browser via Pyodide
- file: content/GLM.py
mode: hybrid # static by default, "Run interactively" button swaps in WASM
- file: content/Preprocessing.py
mode: static # current behaviour
Pyodide remains wasm32 (2 GB memory cap, no nibabel/nilearn
support), so WASM works best for lightweight pedagogical chapters
(physics simulations, small-data demos). Heavy fMRI chapters stay
static with a molab escape hatch.
Dependency-graph-aware build cache¶
Marimo already computes a reactive DAG per notebook. Emit a build
manifest so marimo-book build re-executes only the cells whose
upstream dependencies changed, not the whole notebook. This is our
single biggest authoring-UX lever — today's full rebuild of a 30-page
book can take a minute; a smart cache would bring incremental edits to
under 1 s.
Citation hover-cards¶
BibTeX ingest + [@key] rendering with Material's card syntax showing
authors, title, year, DOI on hover. Modern-doc-site parity.
"Open in marimo WASM" launch button¶
Replaces Jupyter Book's Thebe integration with marimo's native WASM bundle. Zero-install, in-page interactivity from any static chapter that fits within Pyodide's constraints.
Medium term (v0.3+)¶
Port to zensical¶
Zensical is Material for MkDocs' Rust-based
successor, built by the same team. It's designed for drop-in
compatibility: same mkdocs.yml, same Python Markdown extensions,
same custom CSS/JS, with minor MiniJinja template tweaks.
marimo-book's architecture is deliberately shell-agnostic — the
preprocessor emits plain Markdown + inline HTML, not mkdocs-plugin
artifacts. When zensical stabilizes, flipping to it will be one
command change in CI:
- marimo-book build # runs `mkdocs build` under the hood
+ marimo-book build --shell zensical # runs `zensical build`
Expected differentiators: 4–5× faster builds via zensical's differential-build engine, a faster client search (Disco), and a longer support runway than Material for MkDocs which is entering 12-month maintenance mode.
Smoke test — 2026-04-24 (zensical 0.0.36): a pip install zensical
run against the _site_src/mkdocs.yml that marimo-book build emits
builds successfully in 0.21s — ~5× the speed of MkDocs on this site
— and picks up our custom extra.css, Inter/JetBrains Mono fonts,
and theme.palette hex. Observations from the first build:
- The Rust core panics (
invariant: Format(Path(RootDir))) on absolutesite_dirpaths.shell.pycurrently emits absolute paths; the port will need to emit relative or pre-resolve. zensical newgenerates azensical.tomlwith a different schema thanmkdocs.yml(TOML tables, noplugins:, Lucide icons instead ofmaterial/*). The compat-page claim of "no new config format to learn" is currently aspirational; a real port will still want to emit a zensical-native config rather than relying on the YAML fallback.- Plugins we use (
social,htmlproofer) are not in zensical's 0.0.x plugin surface yet. Search is built-in (Disco). - Nav entries lose explicit
title:labels; zensical uses the page's# H1instead. Preserving TOC titles will need a config or preprocessor change. - Our icon uses (
material/weather-sunny) render as Lucide substitutes.
Net: zensical is further along than the 2026 v0.3 expectation, but still 0.0.x. A real port remains a v0.3 item, not a near-term swap.
Timeline: tracking zensical's own trajectory, not ours. Likely 6–12 months out.
Per-notebook dependency override¶
Mix env and sandbox modes within the same book by overriding at
the entry level:
First-class BibTeX + {cite} / [@key]¶
Full citation support: inline [@smith2020], auto-generated
references page, APA + numbered styles. Uses
pybtex.
Multi-book cross-references¶
Link from one marimo-book site to a chapter in another (similar to
Sphinx's intersphinx or Jupyter Book's xref:). Low priority — we
haven't met a user who needs this yet.
Not on the roadmap¶
Things we've deliberately decided not to do, with reasoning:
- PDF / EPUB / Word export. Orthogonal to a web-first tool. Users
who need PDF output can layer
mkdocs-with-pdfon top of the generatedmkdocs.yml. - A notebook editor. Author in marimo itself;
marimo-bookonly builds. - A kernel runner. The static site serves HTML + JS; no server-side execution. Reactivity comes from anywidgets (client-side) or molab (external).
- MyST syntax. marimo-book uses Material for MkDocs's Markdown dialect
(
!!! notefor admonitions,[label](page.md)for cross-refs). Existing Jupyter Book content using MyST directives like:::{glossary}or roles like{download}needs a one-time migration to Material syntax.
How to influence this¶
marimo-book is open and transparent. Everything above is a hypothesis
about what users need — your use case might shift priorities.
- File an issue on github.com/ljchang/marimo-book/issues describing what you're trying to publish and what's blocking you.
- Send a pull request — the project is MIT-licensed, tests are green and fast, and the architecture is small enough to comprehend in an afternoon.
- Build your own book and tell us what broke. The tool is in active use on at least one real course but needs more consumers to surface the things we haven't hit yet.