Skip to main content

Introduction

BeatBax is a live coding language and creative toolchain for making chiptune music in the style of classic 8-bit and 16-bit computers and game consoles. Instead of using a Tracker or DAW, you write songs in a simple but powerful text grammar — instruments, melodies, basslines, and beats — and BeatBax plays them back with hardware-faithful chip sound.

One goal of BeatBax is homebrew-friendly export: where possible, songs can be written out to tracker or driver formats games can consume (for example hUGETracker .uge for Game Boy, FamiTracker text for NES, VGM for PSG targets). Common formats such as WAV and MIDI are available across chips; chip-specific formats are listed on the ROADMAP.

Creating chiptunes is rewarding but can be hard and time-consuming. BeatBax Desktop also includes BeatBax Copilot* — an AI assistant (with BYOK model) to help you write and edit songs. It is not a replacement for creativity, but it can help with construction, editing, and typical chiptune techniques in the BeatBax grammar.

Features

  • Simple text-based grammar — author instruments, patterns, sequences, and channel arrangements in .bax files
  • Multi-chip playback — Game Boy, NES, SMS/Game Gear, and Spectrum/CPC AY backends with chip-accurate voices, envelopes, and software macros
  • Instrument macros — pitch, volume, duty/timbre, and arp envelopes (plus chip-specific extras such as Game Boy subpat for hUGETracker)
  • Built-in effects — vibrato, arpeggio, portamento, pitch bend, volume slide, tremolo, pan, note cut, retrigger, echo, and chip-specific effects (e.g. pulse sweep)
  • Reusable instrument libraries — share instruments via .ins files; import locally or from GitHub or the web
  • Export formats — WAV and MIDI for supported chips; chip-specific exports (UGE, FamiTracker, VGM, …) via plugins
  • BeatBax Desktop — full Electron IDE with native file I/O, export, BeatBax Copilot, channel mixer, pattern grid, and Monaco editor
  • BeatBax web-lite client — try-in-browser editor and playback for demos and light edits at app.beatbax.com
  • BeatBax Copilot — AI assistant in BeatBax Desktop (BYOK / local Ollama)
  • BeatBax CLIplay, verify, export, inspect, and convert for scripted workflows
  • Extensible architecture — additional chip backends and exporters as plugins without changing the core song grammar

*BeatBax Copilot (available in BeatBax Desktop only) uses your preferred OpenAI-compatible provider for cloud models (BYOK) or local model via Ollama or LM Studio. Cloud API keys are stored in the OS secure credential store on your machine only. Local providers need no API Key.

Example song

Press Play to hear a short, driving Game Boy track in a minor key — lead, bass, sustained wave pad, and a punchy drum kit, with vibrato and portamento woven in:

Neon Run

Interactive playback loads in the browser.

song name "Neon Run"

chip gameboy
bpm 162

inst lead  type=pulse1 duty=25 env=gb:13,down,1 gm=81
inst bass  type=pulse2 duty=50 env=gb:12,down,2 gm=38
inst pad   type=wave volume=100 wave=[0,4,8,11,13,14,15,15,15,14,13,11,8,4,0,0] gm=89
inst kick  type=noise gb:width=7 uge_note=C-6 length=16 pitch_env=[0,-2,-4,-6] vol_env=[15,12,8,4]
inst snare type=noise gb:width=7 env=gb:13,down,1 length=16 uge_note=C-7 note=C6 pitch_env=[0,7,0] vol_env=[13,10,6,2]
inst hat   type=noise gb:width=15 env=gb:5,down,1 uge_note=C-8 note=C6

effect wobble = vib:7,5
effect slide  = port:14

pat lead_am  = A5 . E5 A5 . G5 E5 . A5 . C6 . B5 . A5 .
pat lead_f   = A5 . F5 A5 . C6 A5 . F5 . A5 . G5 . F5 .
pat lead_g   = B5 . G5 B5 . D6 B5 . G5 . B5 . A5 . G5 .
pat lead_am2 = A5 . E5 A5<wobble>:2 G5 E5 . D5 . E5 . C5 . A4 .

pat bass_am  = A2 . A3 A2 . A3 A2 . A2 . A3 A2 . E2 . E3
pat bass_f   = F2 . F3 F2 . F3 F2 . F2 . F3 F2 . C3 . C3
pat bass_g   = G2 . G3 G2 . G3 G2 . G2 . G3 G2 . D3<slide> . D3
pat bass_am2 = A2 . A3 A2 . A3 A2 . E2 . E3 E2 . A2 . A2

pat pad_am  = A3:4 C4:4 E4:4 A4:4
pat pad_f   = F3:4 A3:4 C4:4 F4:4
pat pad_g   = G3:4 B3:4 D4:4 G4:4
pat pad_am2 = A3:4 E4:4 C4:4 A3:4

pat drums_a = kick . hat . snare . hat . kick . hat kick snare . hat .
pat drums_b = kick . hat kick snare . hat . kick . hat . snare . snare hat

seq lead_seq  = lead_am lead_f lead_g lead_am2 lead_am:oct(-1) lead_f:rot(2) lead_g:oct(+1) lead_am2:rev
seq bass_seq  = bass_am bass_f bass_g bass_am2 bass_am:rot(2) bass_f:rot(2) bass_g:rot(2) bass_am2:rev
seq pad_seq   = pad_am pad_f pad_g pad_am2 pad_am:rev pad_f:rev pad_g:rev pad_am2:rev
seq drums_seq = drums_a drums_b drums_a drums_b drums_a:rot(2) drums_b:rev drums_a:rot(4) drums_b:rev:rot(2)

channel 1 => inst lead seq lead_seq
channel 2 => inst bass seq bass_seq
channel 3 => inst pad seq pad_seq
channel 4 => inst snare seq drums_seq

play

Next steps

Continue with Getting Started:

Then work through the Tutorial to build Tutorial Groove step by step for the Game Boy sound chip.