@bind-dependent cells compile to WebAssembly via WasmTarget.jl and ship as interactive islands inside the classic static HTML export — sliders work on any static host, with no slider server and no precomputed request files.
using PlutoIslands
export_notebook("notebook.jl")
# → notebook.html + notebook.islands/ (serve anywhere static)- Export time — the notebook runs once in Pluto. Each group of co-dependent
@bindvariables is extracted into pure Julia functions (one per dependent cell, upstream code inlined) and compiled to a small WasmGC module. - Verified before shipping — per cell: original output bodies must reproduce byte-exactly under Node, and a differential oracle re-runs the notebook on sampled bond values and compares against the wasm. Mismatching cells don't ship.
- In the browser — a small shim intercepts
fetchand answers Pluto's standard slider-server protocol locally from the wasm. The stock Pluto frontend is untouched; slider moves are local WASM calls. - Honest fallbacks — cells whose bond group can't compile keep their
original content and are decorated with a Pluto-native
!!! warningadmonition explaining exactly why (expandable reasons). Partial islands are fine: compiled cells update live, failed cells warn.
Exporters with their own run pipeline (e.g. a PlutoSliderServer.jl-style setup) call the hook on a running notebook instead:
islands_dirname = generate_wasm_islands(session, notebook, original_state;
output_dir, url_path)
html = inject_islands_script(html, islands_dirname)The non-island bond groups still reach whatever backend you run (precomputed
staterequest files, a live slider server) — the shim passes their requests
through, and fallback_warnings=false disables the warnings since those
groups are interactive after all.
Young and moving fast. The featured-notebook gallery in the
docs doubles as the
public scoreboard: which real notebooks ship how many islands, and exactly
why the rest don't yet. Coverage grows with
WasmTarget.jl — every
fallback reason is a ranked work item (WASM_FINDINGS.md).
- WasmTarget.jl — the Julia-to-WasmGC compiler doing the heavy lifting
- Therapy.jl — signals-based Julia web framework (powers the docs site)
- Pluto.jl / PlutoSliderServer.jl — the beautiful foundations
MIT