Interactive Pluto Exports

No Julia Server

@bind-dependent cells of a Pluto.jl notebook compile to WebAssembly via WasmTarget.jl and ship as interactive islands inside the classic static export. Sliders work on any static host — no slider server, no precomputed request files. Cells that can't compile keep their original content and say so, beautifully.

Quickstart

using PlutoIslands

# classic HTML export, plus: every compilable bond group ships as a
# WasmGC island — verified against the real notebook before shipping
export_notebook("notebook.jl")

# → notebook.html + notebook.islands/   (serve anywhere static)

At export time the notebook runs once in Pluto. Each group of co-dependent @bind variables is extracted into pure Julia functions (one per dependent cell), compiled to a small WasmGC module, and verified two ways: original output bodies must reproduce byte-exactly, and a differential oracle re-runs the notebook on sampled bond values and compares against the wasm. In the browser, a small shim answers Pluto's slider-server protocol locally from the wasm — the stock Pluto frontend is untouched.

Instant Interactivity

Slider moves are local WASM calls — no network round-trip, no Julia process, no combinatorial precompute explosion. Continuous and infinite bond domains work.

Proven Before Shipping

Every island passes an export-time differential oracle: byte-exact agreement with real notebook re-runs on sampled bond values. Mismatches degrade to the classic fallbacks — nothing ships unverified.

Stock Pluto Frontend

No Pluto fork. A fetch-interception shim answers the standard slider-server protocol in-tab; per-group fallbacks pass through to precomputed files or a live server.