Skip to main content

Songbird

Songbird is a collaborative DAW (Digital Audio Workstation) for electronic music production. It combines a Rust audio engine with a React-based UI, git-based collaboration, an LLM copilot, vibe-codable MIDI-editors/plugins/interfaces, and generative audio via Lyria/Magenta models. screenshot

DAW Features

  • Arrangement View — Timeline with track lanes, section markers, scroll/zoom, and click-to-seek. Sections are defined in .bird files and rendered as colored regions.
  • Piano Roll — Full MIDI editor with note draw/move/resize/delete, velocity lane, grid snapping, and round-trip serialization back to .bird format.
  • Mixer — Per-track channel strips with volume faders, pan knobs, mute/solo, 4 send controls, and plugin slot management (instrument, FX, channel strip). Optimistic real-time sync for collaborative mixing.
  • Audio Metering — Real-time level meters, 16-band spectrum analyzer, stereo width, phase correlation, and balance — all at 60Hz with GPU-composited rendering.
  • VST3/AU Plugin Hosting — Load any VST3 or Audio Unit plugin. Plugin editor windows, parameter scanning, and macro mapping for programmatic control. Redesigned stock plugin UIs with premium look-and-feel (4OSC, Bass303, DrumMachine, STKSynth, Sampler, ChannelStrip).
  • Sheet Music & Guitar Tabs — Export and view sheet music and guitar tablature rendered from .bird notation. Supports standard notation, chord diagrams, and tab fingerings.
  • MIDI Recording — Record from hardware MIDI controllers with grid quantization. Recorded MIDI is serialized back to .bird notation.
  • Audio Recording — Record audio input to tracks with beat-aligned quantization.
  • Easy Stem Export — Fast workflow to render individual stems (per-track WAV), master bounce (stereo WAV), and sheet music. Options to auto-name files with bpm/key for reuse.
  • AI Copilot — Gemini-powered assistant with specialized agents (composer, mix engineer, sound designer, audio creator) that can create tracks, write patterns, set plugin parameters, adjust the mix, and generate audio via Lyria — all through chat or function calls. Supports inline AI generation via Option+click-drag on any track.
  • Inline AI Generation — Option+click-drag on the arrangement timeline to generate audio (Lyria) or MIDI directly at any position. Visual drag-to-select region with real-time generation feedback.
  • Vibe-Codable MIDI Editors — Build your own MIDI editor alongside the built-in piano roll. The copilot generates a React view on top of .bird notation and the clip IPC — step sequencer, isomorphic keyboard, probability matrix, whatever fits your workflow — reading and writing the same notes as the stock editors.
  • Vibe-Codable Plugins — Build your own plugins with FAUST for DSP and a React-based UI.
  • Full Vibes Mode — Vibe-code the rest of the interface. Songbird exposes transport, tracks, clips, mixer, plugins, and .bird notation as a stable command surface, and the copilot generates React views on top of it — wired to the same IPC the built-in UI uses. The engine and commands stay fixed; only the interface is user-rewritable.
  • Groove System — Per-step timing and velocity offsets defined in .bird files. Apply swing, humanization, and rhythmic feel to any pattern without altering the underlying notes.
  • Git-Based Undo/Redo — Every change is committed to an in-process git repo (libgit2). Full history panel with human-readable commit messages.
  • Git-Based Collaboration — Projects include .bird files, state files, and samples — all tracked in git (with LFS for audio). Multiple people can work on the same project concurrently — branch, merge, and resolve conflicts like code, not like bouncing stems over email. Figma-style multiplayer cursors show collaborator positions in real time.
  • .bird Notation — A text-based music format (“Markdown for music”) that defines tracks, instruments, patterns, notes, chords, swing, groove, and automation in a human-readable syntax. Supports multi-line automation curves for detailed parameter control.

Architecture

┌─────────────────────────────────────────────────────────────┐
│  React UI (Tauri WebView)                                    │
│  Vite + React 19 + Tailwind v4 + Zustand                    │
│  ├─ ArrangementView  — timeline, track lanes, playhead      │
│  ├─ MidiEditor       — piano roll, velocity editing         │
│  ├─ MixerPanel       — faders, meters, plugin slots         │
│  ├─ SheetMusicView   — notation & guitar tab rendering      │
│  ├─ ChatPanel        — AI copilot (Gemini function calling) │
│  ├─ CollabCursors    — Figma-style multiplayer cursors      │
│  └─ SettingsPanel    — audio device, MIDI, theme config     │
└─────────────────┬───────────────────────────────────────────┘
                  │ React ↔ Rust via Tauri IPC
┌─────────────────▼───────────────────────────────────────────┐
│  Rust Backend (rust/crates/)                                 │
│  ├─ songbird-engine   — audio graph, transport, scheduling  │
│  ├─ songbird-plugins  — 16 stock DSP plugins (synths, FX)  │
│  ├─ songbird-clips    — .bird parser, serializer            │
│  ├─ songbird-state    — sync engine, undo/redo, collab      │
│  ├─ songbird-export   — offline render, stem export         │
│  ├─ songbird-record   — audio/MIDI recording                │
│  ├─ songbird-host-ffi — VST3/AU plugin hosting via FFI      │
│  ├─ songbird-app      — Tauri v2 shell (202+ IPC commands)  │
│  ├─ songbird-cli      — CLI for batch render & validation   │
│  └─ songbird-headless — WebSocket server for headless mode  │
└─────────────────────────────────────────────────────────────┘

Key Concepts

  • .bird files — A text-based music notation format. Defines tracks, instruments, patterns, notes, groove, and arrangement. Supports multi-line automation curves and per-step groove offsets. See bird notation.
  • Sync engine — Central state router: React (Zustand) ↔ Rust (SyncEngineCore) ↔ Git (libgit2). Nine channel domains (mixer, transport, bird, AI, chat, plugins, etc.) with guards, echo suppression, and per-channel persistence strategy. See sync engine.
  • Tauri IPC — React communicates with the Rust backend via 202+ typed IPC commands. Each returns IpcResult<T>. A DirectEngineTransport provides a real-time bypass path for slider drags.
  • Real-time audio — Lock-free, zero-allocation audio callback. Pre-allocated AudioBuffer and ScratchPool, SpscRingBuffer for UI communication, rayon-parallel graph processing with topological sort.
  • Macro mapping — Semantic parameter names (brightness, drive, comp_thresh) map to actual plugin parameters, enabling both .bird automation and AI copilot control.
  • Collaboration — Built-in tunnel support for zero-config remote collaboration. Figma-style cursors, optimistic mixer sync, and structured merge for .bird and state files. See server/.

Project Structure

songbird-chirp/
├── rust/             — Rust backend (Cargo workspace, 10 crates)
├── app/              — Legacy C++ backend (deprecated, pending removal)
├── react_ui/         — React frontend (Vite + TypeScript)
├── server/           — Collaboration WebSocket server (Node.js)
├── deploy/           — Deployment configs (Gitea on Fly.io and GCP)
├── tests/            — Headless C++ integration tests
├── libraries/        — Git submodules (JUCE, Tracktion, etc.) + MCP server
├── docs/             — Architecture docs (Mintlify, bird notation, state management)
├── tools/            — Developer utilities (plugin param scanning)
├── utils/            — Build scripts and shell utilities
├── eval/             — LLM evaluation framework for AI copilot
├── files/            — Sample .bird projects, MIDI files, plugin configs
└── install.md        — LLM-executable setup instructions
Each subdirectory contains a README.md with architecture details, design principles, and extension guidelines.

Getting Started

See install.md for full setup instructions (works with LLM coding agents out of the box).
# Build for local testing
./utils/build-rs

# Run all validation — Rust tests + clippy, TypeScript, ESLint, Vitest
./utils/validate.sh

# Release build with compiled frontend
./utils/release-rs