tracker music · webassembly · demoscene
The music of the demoscene, back in your browser.
modbox plays classic MOD, S3M, XM, and IT modules with a FastTracker-style visualizer — scrolling patterns, per-channel oscilloscopes, VU meters. Written entirely in Go, compiled to WebAssembly. Drag a module in and press play.
ORD 03/48 ROW 12 BPM 120 SPD 2 ▶ PLAYING 10 ... .. ... E-4 01 ... ... .. ... 11 A-3 02 ... ... .. ... D-5 07 v40 12 C-4 01 ... G-4 03 ... ... .. ... 13 ... .. ... ... .. ... A-5 07 ... 14 E-3 02 ... C-5 01 vFF ... .. ... CH1 ▁▂▅▇▅▂▁ CH2 ▂▄▆▄▂▁▁ CH3 ▅▃▁▁▃▅▇
what you get
A tracker player that shows its work.
Four classic formats
ProTracker MOD, Scream Tracker S3M, FastTracker XM, and Impulse Tracker IT — auto-detected. Drag any module onto the page.
Live oscilloscopes
One scope per channel, drawn from the mixer's own per-channel buffers — aligned to what's audible, not what's rendered.
Pattern scroller
The full pattern grid scrolls under a highlight bar that flips exactly when you hear the row — FastTracker style.
VU meters
Per-channel level bars with fast attack, slow decay, and amber peak-hold ticks — the way hardware did it.
100% Go → WASM
Playback engine, mixer, UI, and audio bridge are one Go codebase (Ebitengine + gotracker/playback). No JavaScript frameworks.
Demo songs included
Starts with public-domain chiptunes by Drozerix, credited in the app. Deep-link one with ?demo=0.
under the hood
How it works.
The gotracker/playback engine renders the module about 20 ms at a time. Each chunk carries per-channel amplitude buffers and the machine's exact order/row position — so the scopes, VU meters, and pattern scroller come straight from the mixer, keyed by sample position. A backpressured ring buffer feeds Ebitengine's browser audio (an AudioWorklet under the hood), and the UI reads state at the audible playhead, so picture never leads sound.
# play it now open https://richardwooding.github.io/modbox/play/ # keys space pause / resume ← → seek one order + - volume d debug overlay
# hack on it git clone https://github.com/richardwooding/modbox go run . # native window go test ./... # headless engine tests GOOS=js GOARCH=wasm go build .