About Bitbasher
v0.1.0Bitbasher is a modular music workstation that runs in a browser and looks like a terminal. It started from a simple annoyance: making a quick electronic sketch usually means launching a DAW, hunting for a plugin, and waiting. A rack of Eurorack-style modules, a step sequencer and a render button are enough for the first ninety percent of an idea — and all three fit comfortably in a web page.
So the whole thing is deliberately small and deliberately text-first. Every control shows its value as a number, every module has a name you would recognise from a hardware rack, and the interface is monospace, keyboard-navigable and dense on purpose. There is no drag-and-drop timeline, no arrangement view and no project format to be locked into: you patch, you sequence, you render, you publish.
The library is the other half of the project. A finished render becomes a page of its own with cover art, a waveform, a streaming URL and a share card, so a track you made in ten minutes has somewhere to live that is not a file in a downloads folder.
bitbasher@shell:~$ boot --verbose [ ok ] audio context ...... 48000 Hz [ ok ] factory samples .... loaded [ ok ] modules ............ 11 types [ ok ] sequencer .......... 16 x 8 [ ok ] renderer ........... wav + mp3 [ ok ] session ............ optional [ ok ] csp ................ strict ready. type music.
- In one line
- A browser Eurorack with a library attached.
- Needs
- A modern browser. No install, no plugins, no account.
- Costs
- Nothing. There are no ads and no third-party trackers.
- Runs on
- One PHP front controller, one MariaDB database, one Redis.
- Version
- v0.1.0 — engine and library grow together.
Signal flow
mono path shown note in
│
▼
┌─────────┐ ┌──────────┐ ┌─────────┐ ┌──────┐ ┌───────┐
│ VCO │─────>│ FILTER │─────>│ VCA │─────>│ FX │─────>│ MIX │───> ▶ out
│ osc/wav │ │ cutoff/Q │ │ gain/pan│ │ dly │ │ bus + │
│ sampler │ │ drive │ │ velocity│ │ rev │ │ limit │
└─────────┘ └──────────┘ └─────────┘ └──────┘ └───────┘
▲ ▲ ▲ │
│ │ │ ▼
┌────┴────┐ ┌────┴────┐ ┌────┴────┐ ┌─────────┐
│ LFO │ │ ENV │ │ ENV │ │ SCOPE │
│ rate/dep│ │ A D S R │ │ A D S R │ │ + meters│
└─────────┘ └─────────┘ └─────────┘ └─────────┘
sequencer ──> 16 steps × 8 lanes ──> drums / note triggers ──> the graph above
Modulation is a normal connection. An envelope or LFO can target any parameter on any module, and the entire graph — modules, connections, sequencer and mixer — serialises to one JSON patch you can save, reload and attach to a submission.
The modules
11 types| Type | Name | Options | Notes |
|---|---|---|---|
| VCO | Oscillator | sine · triangle · saw · square · pulse · noise | Pitch in octaves, semitones and cents, glide, per-oscillator level. |
| FILTER | Tone shaper | lowpass · highpass · bandpass · notch | Cutoff 20 Hz–18 kHz on a log curve, resonance, drive, envelope amount, key tracking. |
| VCA | Volume control | gain · pan · velocity | The amplitude stage. Usually driven by an envelope; also the place to spread a patch out in stereo. |
| ENV | Envelope | attack · decay · sustain · release | Aimed at any parameter, not just amplitude — sweep a filter or bend a pitch with it. |
| LFO | Low-frequency osc | 0.05–40 Hz · sine · triangle · saw · square · random | Free-running or synced to the transport, with a depth and a target parameter. |
| SAMPLER | Sound sampler | start · end · pitch · loop · reverse | Plays anything in the sound library, or a WAV you upload yourself. |
| DRUMS | Drum machine | 8 lanes · level · pan · tune · decay | One sample per lane, sequenced on the step grid under the rack. |
| SYNTH | Digital synth | fm · wavetable · supersaw | A polyphonic voice with up to 8 voices, detune, ratio, FM amount and its own filter. |
| DELAY | Delay | time · sync · feedback · mix | Tempo-syncable send effect. |
| REVERB | Reverb | size · damp · mix | Send effect for space; keep the mix low and the patch stays readable. |
| SCOPE | Oscilloscope | waveform · spectrum | Taps any point in the graph so you can see what you just did. |
The tech
no build step- Frontend
- Hand-written ES modules and one classic script. No framework, no bundler, no CDN — the CSP only allows scripts from this origin.
- Audio
-
The Web Audio API: oscillators, biquad filters, gain nodes, convolution and an
OfflineAudioContextfor renders. MP3 encoding happens in the browser with a vendored LAME build. - Backend
- PHP 8.2 (FPM) with a small hand-rolled core: router, request/response, views, auth, CSRF, validation. One front controller, no Composer packages.
- Database
- MariaDB 10.11 through PDO with real prepared statements and named placeholders. Users are keyed by UUID, e-mail addresses are stored encrypted with a blind index for lookups.
- Cache
- Redis holds sessions and the rate-limit counters. It is treated as optional infrastructure: if it disappears, the site degrades instead of falling over.
- Delivery
- Apache with pretty URLs, a strict nonce-based CSP, HSTS and range-capable audio streaming. TLS terminates upstream.
Accounts & submissions
2 rolesMaking music needs no account. Signing in unlocks the three things that touch the server: exporting a render, downloading someone else's track, and submitting your own to the library.
- Creator — the default role. Can save patches, upload samples, submit tracks, edit and delete their own submissions, and manage their profile.
- Admin — everything a creator can do, plus user management, track and sample moderation, site settings, maintenance mode, the audit log and the overlay IP allowlist.
A submission is a rendered WAV or MP3 plus its metadata: title, artist name,
genre, BPM, key, an optional description, the patch that produced it and a peaks
array for the waveform. Uploads are checked by content, not by file extension,
and every published track is reachable at
/music/<slug> with a short share link on
music.bitbasher.dk.
Security-relevant actions are written to an audit log, and anything an admin changes about someone else's account or track is recorded with it.
API
read-mostly
The same handlers answer on api.bitbasher.dk/v1/* and
bitbasher.dk/api/v1/*, so the creator can talk to them same-origin.
Listing tracks, genres and sounds is public; saving patches, uploading samples and
submitting tracks require a session and an X-CSRF-Token header.
Credits
who and what- Built by
- The Bitbasher project — design, engine, backend and artwork in one tree.
- Inspired by
- Eurorack modular synthesis, the Amiga tracker scene, and the DOS-era look of ANSI art and IBM code page 437.
- Samples
- The factory sound pack is generated synthetically for this site, so it ships without third-party licence strings attached. Community uploads stay the property of whoever uploaded them.
- Your tracks
- Yours. Publishing here grants nothing more than the right to host, stream and show your submission on the site; delete it and it is gone.
- Encoder
- A vendored LAME (lamejs) build, loaded on demand for MP3 export.
Enough reading
The rack is two clicks away and it does not ask who you are.