A lightweight, modular DAW https://xw3.org/hanez/xtc
  • C 58.8%
  • C++ 35.6%
  • Python 3.6%
  • CMake 1.9%
Find a file
2026-10-27 00:10:45 +01:00
docs Phase 5: Add project persistence and sequencer foundation 2026-10-27 00:10:45 +01:00
examples Initial commit. 2026-10-26 22:51:25 +01:00
include/xtc Phase 5: Add project persistence and sequencer foundation 2026-10-27 00:10:45 +01:00
src Phase 5: Add project persistence and sequencer foundation 2026-10-27 00:10:45 +01:00
tests Phase 5: Add project persistence and sequencer foundation 2026-10-27 00:10:45 +01:00
.gitignore Initial commit. 2026-10-26 22:51:25 +01:00
AGENT.md Initial commit. 2026-10-26 22:51:25 +01:00
LICENSE Initial commit. 2026-10-26 22:51:25 +01:00
Makefile Phase 5: Add project persistence and sequencer foundation 2026-10-27 00:10:45 +01:00
README.md Phase 5: Add project persistence and sequencer foundation 2026-10-27 00:10:45 +01:00

xtc — a lightweight, modular DAW

xtc is a new, energyXT-inspired digital audio workstation project. It is not a clone and contains no energyXT source code or assets.

Design decisions

  • Modular engine first: sequencer, instruments, effects, mixers and I/O are nodes in one processing graph.
  • C core: project model, graph, DSP and audio engine are implemented in C.
  • FLTK/C++ GUI: C++ is confined to the graphical interface and calls the core through a C API.
  • Linux first: keep backend-specific details behind an interface.
  • Small increments: build and test each milestone before adding features.

Current status

This repository is a starter scaffold, not a production DAW. It currently provides:

  • a small C library/API;
  • a mono graph model with port validation, cycle rejection and topological ordering;
  • compiled offline plans with preallocated buffers, sine oscillator, gain, meter and output nodes;
  • C tests for deterministic rendering, routing, validation and lifecycle;
  • an optional JACK-compatible mono backend with start/stop, routing and status;
  • safe control/audio plan handoff and concurrent replacement tests;
  • an optional FLTK shell with engine controls, view switching and backend status;
  • a modular graph editor with transactional edits and live plan adoption status;
  • versioned project save/load and a timeline for tracks and silent regions;
  • sample-counted transport, selection, move/trim, timeline zoom and scrolling;
  • architecture, format, GUI, roadmap, and decision documents.

The JACK backend has passed software-loopback testing; physical-device playback is unverified. Recording, audio-region playback, MIDI and plugin hosting are not implemented yet.

Build

Requirements: a C compiler, a C++ compiler, GNU Make, and pkg-config. FLTK is optional for the core and tests.

make
make test

make also builds build/xtc-check, a headless core startup/shutdown check. Use make debug for a separate debug build and test run. See docs/BUILD.md for the inspected toolchain and baseline limits.

Build the optional FLTK GUI if FLTK is installed:

make gui

Run the GUI:

./build/xtc

The GUI opens JACK and offers Play/Stop/Reconnect, backend status and view switching. The initial empty graph is silent. Modular Graph supports adding, moving and deleting oscillator/gain/meter/output nodes and connecting ports. Sequencer regions are currently silent; the mixer editor remains a placeholder. Use Add track/Add region, drag regions or their edges, and Zoom +/-; scrollbars pan. Ctrl+N/O/S creates, opens or saves a project; Save As chooses another path. The ruler seeks while stopped. Stop pauses; Reconnect and project load reset position. F5 starts, F8 stops, Space toggles, F6 reconnects, and Ctrl+1/2/3 switches views. Ctrl+Q closes the client and window. No physical ports are connected automatically. In Modular Graph, drag output to input to connect; select a node or wire and press Delete to remove it. Invalid edits leave the active graph intact; queued changes are labeled until the engine adopts them. See GUI documentation. With JACK development files and an existing JACK-compatible server, run the isolated software-loopback test with make test-jack. It connects only test clients. See engine documentation for configuration, routing, ownership and recovery.

Clean generated files:

make clean

Suggested first agent task

Read AGENT.md and docs/ARCHITECTURE.md. Inspect the existing implementation, run make test, and report gaps before adding the next feature. Do not jump directly to plugin hosting or a full sequencer.

License

The project is scaffolded under the MIT License; see LICENSE. Review the licenses of any future dependencies before distribution.