Flux is a minimal DAW and CLAP host built in Zig. It started as a fork of, and was originally designed around, ZSynth (https://github.com/jrachele/zsynth). It focuses on a session view workflow (Ableton/Bitwig-style clip launching), MIDI sequencing, and a tight embedded instrument workflow.
The UI is DVUI on SDL3 — a single native binary, no ImGui/zgui layer.
Core features:
- Session view clip launcher with MIDI and audio clips
- Arrangement view with clip drag/resize, zoom, and a per-track mixer strip
- Piano roll editor with automation lanes and its own MIDI undo history
- High-performance concurrent audio engine with a job-based graph
- CLAP plugin hosting (external
.clapbundles + in-process built-ins) - Built-in instruments (ZSynth, ZMinimoog, ZPortaFM) and stock FX (EQ, compressor, gate, limiter) with DVUI editors embedded in the device rack
- DAWproject (
.dawproject) as the primary project format for compatibility - Undo/redo history for editing operations
Flux is early-stage and experimental. Expect breaking changes while the session workflow, audio graph, and plugin hosting mature.
Migration notes and remaining parity work: docs/dvui-migration.md.
- Build everything:
zig build - Run Flux:
zig build run-flux(or./zig-out/bin/flux) - macOS app bundle:
zig build bundle-flux-app/zig build run-flux-app - Unit tests:
zig build test - Smoke-load every installed system CLAP:
zig build test-clap-load
There is one root build.zig graph; the DVUI/SDL3 module, XML, audio, CLAP, MIDI, stretch, and native libraries all attach to the flux executable there. zig-pkg/ is package-manager output and must not be edited.
The built-in instruments and FX are compiled into flux and instantiated in-process — there are no ZSynth.clap-style bundles to build or install any more. Only third-party plugins are loaded from disk via DynLib (standard CLAP search paths).
Keyboard basics: Space play · Tab session/arrangement · Shift+Tab device/clip panel · B browser.
| Instrument | Source | CLAP id |
|---|---|---|
| ZSynth | src/builtins/instruments/zsynth/ |
com.juge.zsynth |
| ZMinimoog | src/builtins/instruments/zminimoog/ |
com.fourlex.zminimoog |
| ZPortaFM | src/builtins/instruments/zportafm/ |
com.fourlex.zportafm |
They are registered in src/builtins/instruments/registry.zig and loaded by src/plugin/builtin_load.zig. Their DSP is UI-free; the host draws their editors from src/ui/panels/editors/.
- ZSynth docs:
zsynth/README.md
See docs/code-style.md for the 1000-line source file limit and split conventions.
src/main.zig: app entry (DVUI host)src/ui/: host UI — views, panels, device rack, built-in editorssrc/document/: UI-neutral document store + commands (session, arrangement, clips, MIDI history)src/audio/: audio engine, graph, and DSP supportsrc/plugin/: CLAP hosting primitives (DynLibhandles, built-in load, param flush, floating/parented GUIs)src/builtins/: in-process instruments and stock FXsrc/project/: DAWproject read/writeshared/: CLAP entry/extension scaffolding shared by the built-in pluginsassets/: shared assets (fonts, etc.)