bitbasher

About Bitbasher

v0.1.0

Bitbasher 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
Module types available in the creator
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 OfflineAudioContext for 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 roles

Making 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.

API index Health check Sitemap

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.

Open the creator Browse the library