Skip to content

Where things live

ARCHITECTURE.md › Module map lists every file. In short:

You want to change Look in
What is saved crates/engine/src/model/ (Project, Track, Region…), src/api.ts mirrors it
What an edit does crates/engine/src/session/: one module per feature, all impl Session
What the UI can call src-tauri/src/commands/, one module per area; shared wrappers in commands.rs; registered in main.rs
What plays, on the audio thread crates/engine/src/dsp/: process.rs (the block), strip.rs (a strip), apply.rs (commands)
How state reaches the audio thread session/engine_sync.rs and session/undo.rs send, dsp/cmd.rs defines, dsp/apply.rs receives
A built-in effect crates/engine/src/fx/; contract in fx/mod.rs
A built-in instrument crates/engine/src/instrument/; contract in instrument/mod.rs; parts in synth_dsp/
Hosting VST3s crates/vst3-host/src/; plugin/processor.rs and plugin/controller.rs are the two halves
Pure logic with its own tests Single files at the root of crates/engine/src (takes.rs, tempo.rs, fades.rs…), listed by theme in lib.rs

A file that grows past about 1000 lines is a hint to split it by responsibility: types stay in the parent module (dsp.rs, session.rs) where children can reach their private fields, and the code moves into children that start with use super::*. Tests move to a tests.rs of their own.