A lightweight in-browser player for the tracker music formats that powered the demoscene, the Amiga, and a generation of PC games (.mod, .s3m, .xm, .it). Open a URL or drop a module on the page and it plays. No install, no upload, no account. Everything runs client-side, every color is CSS, every visualization is real-time.
Under the hood: Chipsound doesn't decode anything itself. libopenmpt (compiled to WebAssembly via Chiptune.js) does the audio, and this project reads the playback state — channel volumes, current order/row, instrument data — to draw the pattern view, the off-thread per-channel visualizations, the mute/solo overlays, and the subsong picker. Add to that the themes, shareable ?load=<url> links, keyboard shortcuts, and the performance work to keep everything running without glitching the audio.
- Demoscene fans revisiting Future Crew, Purple Motion, Skaven, Necros, and the rest of the crew
- Retro gamers who remember when MS-DOS games shipped a
.s3msoundtrack on the install disk - Tracker music collectors with a folder of
.modfiles that just need to play in one tab - Mobile listeners who want a tracker player that doesn't need an app store
- Developers looking for a zero-dependency, themeable, embeddable player they can host themselves
No module handy? Jump straight into a sample track:
▶ UnreaL ][ ·
▶ Insideout ·
▶ Minimum Velocity ·
▶ Crystal Dragon ·
▶ Aquaphobia ·
▶ Catch that goblin!!
| Chipsound | Other Players | |
|---|---|---|
| Install | None — open the URL | Download + install, often Windows-only |
| Formats | MOD, S3M, XM, IT | Often format-specific |
| Mobile | Touch + responsive | Rarely |
| Themes | Fully themeable via CSS | Usually fixed |
| Visualizations | Real-time, per-channel | Limited or none |
| Privacy | All client-side | Varies |
| Cost | Free | Free or paid |
| Open-source | MIT | Mixed |
Other things worth mentioning:
- Plays anything libopenmpt can decode (MOD, S3M, XM, IT and their variants)
- Drag a module onto the page and it auto-plays
- Press
Tto cycle themes,Vto cycle visualizations - Click a channel header to mute it; Ctrl-click to solo
- Subsong picker for modules that ship multiple subsongs
?opens the full keyboard shortcut list
Try it now: chipsound.com/player.html to jump straight to the player.
Drop a .mod, .s3m, .xm, or .it file on the page and it plays. Tens of thousands of free tracker modules are at The Mod Archive.
The app is pure static HTML/CSS/JS in src/. Browsers require AudioWorklets to be served over HTTP from localhost (not file://), so pick any static server:
# Python 3
cd src && python -m http.server 8765
# Node + npx
npx http-server src -p 8765 -c-1
# Docker + Caddy
docker build -t chipsound . && docker run --rm -p 8765:80 chipsoundThen open http://localhost:8765/.
Want to open it from another device (phone, tablet, second computer)? You'll need HTTPS, put the server behind a reverse proxy or a tunnel.
Python's server caches aggressively. Hard-reload with
Ctrl + Shift + R, or usenpx http-server -c-1which setsCache-Control: no-store.
Themes & visualizations are auto-discovered from directory listings. On startup the player fetches
./css/themes/and./js/visualizations/and parses the HTML index to find all*.css/*.jsfiles. The three servers above all enable directory listings by default. If you deploy behind a static host that disables them (some CDNs, GitHub Pages with a hand-rolled config, certain nginx setups), the picker will fall back to a single built-in theme + visualization. Either enable directory listing for those two folders, or fork in a static manifest.
The player accepts a ?load=<url> query parameter pointing to any HTTP(S) URL:
https://chipsound.com/player.html?load=./tracks/awesome.s3m
https://chipsound.com/player.html?load=https://example.com/cool.mod
https://chipsound.com/player.html?load=https%3A%2F%2Fapi.modarchive.org%2Fdownloads.php%3Fmoduleid%3D212083
For The Mod Archive — the most common source for tracker music — there's a shorter form: ?modarchive=N expands internally to the same downloads.php?moduleid=N URL, no percent-encoding needed:
https://chipsound.com/player.html?modarchive=212083
Loading from The Mod Archive. Modarchive's
downloads.phpendpoint sends the right CORS headers and works directly, but the?inside the inner URL must be percent-encoded (%3F), otherwise the outer query parser splits the URL in two:
| Key | Action |
|---|---|
Space / P |
Play / Pause |
S |
Stop |
L |
Open file… |
← / → |
Previous / next order |
E |
Toggle effects (visualizations on/off) |
V / Shift + V |
Cycle visualization forward / backward |
I |
Toggle samples panel |
T / Shift + T |
Cycle theme forward / backward |
? |
Show this help |
Esc |
Close this help |
| Click header | Toggle channel mute |
| Ctrl + Click header | Solo channel (mute others) |
| Click grip icon in header | Toggle ALL channels |
| Drop file | Load and auto-play |
The repository source is telemetry-free. There's no analytics module, no Google Analytics snippet, and no JavaScript anywhere in the source that reads the data-track="..." HTML markers used throughout the codebase (you'll see them on the playbar buttons, the dynamically-rendered channel headers, and on landing-page CTAs). Those are inert HTML attributes — browsers ignore them unless a click listener is explicitly registered to read them, and the source code never registers one.
Google Analytics 4 only runs on the public site at chipsound.com: both the loader script and the single delegated listener that reads data-track are injected at deploy time by .github/workflows/pages.yml, and the injected snippet itself checks location.hostname before firing anything. Self-hosted deployments (Docker, Caddy, python -m http.server, anything you run yourself) fire zero requests to Google — easy to verify in DevTools → Network.
MIT-licensed — free to use, modify, fork, embed, and redistribute. Copyright © 2026 Gamosoft.
The MIT license covers first-party code only. Bundled third-party components keep their own licenses:
- libopenmpt — BSD-3-Clause. See
docs/third-party/libopenmpt-LICENSE.txt. - Chiptune.js — MIT. See
docs/third-party/chiptune-js-LICENSE.txt. - Font Awesome Free 6.5.1 — Icons CC BY 4.0, fonts SIL OFL 1.1, code MIT. See
docs/third-party/font-awesome-LICENSE.txt.
Full notice summary in NOTICE.
Chipsound is a UI shell on top of other open-source work:
- libopenmpt — the OpenMPT team's reference decoder, compiled to WebAssembly.
- Chiptune.js — the WebAudio wrapper around libopenmpt by DrSnuggles (and originally chiptune2.js by deskjet).
- Font Awesome — the icon set used throughout the UI.







