Files
terminal/docs/img/web-live-crypto.png
Michael ShimelesandClaude Opus 5.5 728179ae66 feat(web): run the terminal in the browser with WebAssembly and WebGPU (#23)
* feat(web): build the terminal for the browser with WebAssembly

Compile the app for wasm32-unknown-unknown and run it with eframe's web
runner on WebGPU, with a separate WebGL2 build for browsers without it.
Desktop-only pieces sit behind cfg(target_arch = "wasm32") seams: a
tokio/browser task shim, a websocket wrapper, localStorage in place of
files, and stand-ins for SQLite, Congress ingest and SnapTrade.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* perf(web): WebGPU-only main build, emoji fonts after first frame

The default browser build drops wgpu's WebGL2 path (naga, wgpu-core,
wgpu-hal), and the page loads a second build with it only when there is
no WebGPU adapter. egui's emoji fonts now load after the first frame
instead of shipping inside the .wasm. Together that takes the WebGPU
bundle from 2.64 MB to 1.69 MB brotli.

Also: label the browser's mixed data source as "Crypto live", tell the
Congress panes the data needs the desktop app, autosave every 2 s in the
browser, and redirect /app to the build on the site.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* docs(readme): state browser timings as ranges across runs

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* docs(readme): use the Retina window run for browser timings

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* docs: browser build screenshots

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* docs(readme): final-build throttled timing

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* docs(readme): rewrap browser timings

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(web): real downloads for exports, one wasm download, keep /app flags

- Layout and theme exports download a file in the browser instead of
  writing a hidden localStorage key. Imports and "open folder" say they
  need the desktop app for now.
- The page starts the WebGPU wasm with an abortable fetch and cancels it
  when there is no WebGPU adapter, so only the WebGL2 build downloads.
- /app keeps its query string when it redirects to /app/index.html.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-29 07:47:02 -04:00

126 KiB