Compiled exercise applications

Built artifacts, not source. Each *.html / *.js pair here is a model compiled to WebAssembly by artesian; the *.whl files are the Python wheels the page installs in the reader’s browser via Pyodide.

The wheels are shared by every exercise in this directory. panel and bokeh are together about 35 MB and are what makes that worth doing: paid once here, they would otherwise be paid once per exercise. Adding a second exercise costs roughly 30 KB, not 35 MB. Keep new exercises in this same directory for that reason.

To rebuild, or to add another:

pip install artesian
artesian build path/to/your_app.py -o exercises/apps -p path/to/model -r numpy

artesian pins panel and bokeh to whatever versions the build environment has, so a rebuild does not silently pull new 35 MB wheels into git history. Upgrading them is a deliberate act.

Provenance

Record what each application was built from, so a result a student reports can be reproduced years later. A wheel’s version number is not sufficient evidence on its own: a build from a modified working tree carries the same version as the release it was branched from, and is indistinguishable by filename.

grlp_panel — gravel-river long profile

   
model GRLP v2.1.0 (tag), the release pip install grlp gives
application source GRLP demo/responsive-figure @ 1d9d2533a9fb (interactive_demo/grlp_panel.py)
built 2026-09-02
panel / bokeh 1.9.4 / 3.9.2
browser requirements numpy, scipy

Verified at build time: every module in the shipped wheel is byte-identical to the v2.1.0 tag.

networkx is deliberately not requested. GRLP gained its river-network code after v2.1.0, so the tagged release neither imports it nor declares it as a dependency; asking for it made every reader download about 1 MB of wheel that was never used.

Do not hand-edit anything here except this file.