Onboarding
Welcome to Songbird! This guide will help you get up and running as a new contributor.Migration Notice
Songbird is mid-migration from a C++ backend (JUCE + Tracktion Engine) to a pure Rust backend (Tauri v2). Theapp/ directory contains the legacy C++ code, which will be deprecated once we confirm the Rust side (rust/) is at full feature parity. All new development should target the Rust codebase.
Setup
Follow the instructions ininstall.md at the repo root. It covers prerequisites, submodule init, patching, building, and verification — and works with LLM coding agents out of the box.
Project Structure Overview
| Directory | Description |
|---|---|
rust/ | Rust backend (Cargo workspace with 11 crates) |
app/ | Legacy C++ backend (deprecated, pending removal) |
react_ui/ | React frontend (Vite + TypeScript + Tailwind) |
server/ | Collaboration WebSocket server (Node.js) |
docs/ | Architecture docs (Mintlify) |
files/ | Sample .bird projects, MIDI files, plugin configs |
utils/ | Build scripts and shell utilities |
eval/ | LLM evaluation framework for the AI copilot |
Rust Crate Map
Therust/crates/ directory contains:
| Crate | Description |
|---|---|
songbird-engine | Core audio engine — graph, transport, scheduling, mixer |
songbird-plugins | 16 stock DSP plugins (synths, effects) |
songbird-clips | .bird format tokenizer, parser, and serializer |
songbird-export | Offline rendering (master mixdown, stem export) |
songbird-record | Audio and MIDI recording |
songbird-state | State management, command dispatch, undo/redo, collaboration |
songbird-sync | Sync engine — channels, routing, transports, guards |
songbird-host-ffi | FFI bridge for hosting VST3/AU plugins |
songbird-app | Tauri v2 desktop app with IPC commands |
songbird-cli | CLI tool for batch rendering and validation |
songbird-headless | WebSocket server for headless deployments |
Key Concepts to Learn
.birdnotation — The text-based music format at the heart of Songbird. Understand this first.- Sync Engine — How React, Rust, and Git stay in sync.
- Collaboration — Git-based collaboration with real-time multiplayer cursors (WIP).
- Tauri IPC — The React UI communicates with the Rust backend via Tauri’s typed IPC commands. Each command returns
IpcResult<T>. - Real-time audio — The engine uses a lock-free, zero-allocation audio callback with pre-allocated buffers and
SpscRingBufferfor UI communication.
Branches
| Branch | Purpose |
|---|---|
rust | Active development. 10x faster builds than C++. May have bugs. |
main | Stable, demo-ready. Currently C++. Rust will merge in once at parity. |
sync-engine | Refactored C++ IPC into centralized engine. Will deprecate if Rust migration succeeds. |
rust.
The Tree of Code
Not all code carries the same risk. Think of the codebase as a tree — the closer to the roots, the more caution is required. Roots — Core foundation. Breaking these breaks everything.- Examples: App shell, install scripts, base of the audio engine, sync engine.
- Discuss changes in advance, overcommunicate, heavy test coverage, code review, QA thoroughly.
- Examples: Tracks, plugin hosting, playback, frequently used components, UI theme.
- Overcommunicate, heavy test coverage, code review, QA thoroughly.
- Examples: Export options, CLI tool, niche plugin UIs.
- Test coverage, use best judgement about code review, QA.
- Examples: Tooltips, cosmetic tweaks, docs, one-off scripts.
- Let the LLMs go wild and have fun :)
Development Workflow
- Branch off
rustin Conductor/Devin/Antigravity/Claude Code. - Write tests first — define success conditions before implementation.
- Implement against those tests.
- QA features and core functionality (e.g., don’t break playback while moving fast).
- Commit and submit a PR targeting
rust. - Request human review (reviewers may use agents).
Useful Commands
| Command | Description |
|---|---|
./utils/build-rs | Standard build for local testing |
./utils/release-rs | Compiled frontend for packaged builds |
./utils/validate.sh | Run all validation (Rust + TS + lint + vitest) |
Next Steps
- Read the Introduction for an architecture overview.
- Explore the React UI docs for frontend details.
- Check the Roadmap to see what’s in progress.
- Look at the Keyboard Shortcuts to navigate the app efficiently.
- Read
rust/ARCHITECTURE.mdfor a detailed reference of the Rust engine internals.