tuidaw

Digital Audio Workstation for Terminal & Browser

A full-featured DAW with a TUI and a Web UI, built with OpenTUI, Vue 3.6 Vapor, and miniaudio. Practice guitar at half speed without pitch shift. Record multi-track audio. Export mixdowns. From your terminal or browser.

Try the Web UI

TUI

Web UI

Features

  • Two UIs -- terminal (TUI) and browser (Web), sharing the same audio engine
  • Braille waveform display -- 2x4 dot grid rendering in TUI, Canvas 2D in Web
  • Native audio engine -- miniaudio C library via Bun FFI (TUI) or WebAssembly (Web)
  • WSOLA time-stretch -- pitch-preserving speed control (0.25x - 2.0x)
  • Multi-track recording -- simultaneous capture with per-track input device selection
  • Metronome click -- sample-accurate, configurable volume and pan
  • Loop regions -- sample-accurate looping
  • Beat-based timeline -- navigate by beats/bars, auto BPM detection on import
  • WAV import -- 16/24/32-bit, stereo downmix, automatic 48kHz resampling
  • Project save/open -- .tuidaw project files (interoperable between TUI and Web)
  • Export mixdown -- WAV export via ffmpeg (TUI) or offline WASM render (Web)
  • Mouse & touch controls -- scroll, volume, pan via mouse wheel or touch

Quick Start

git clone https://github.com/crossatko/tuidaw.git
cd tuidaw
./setup.sh
bun run start

The setup script will check for required system dependencies, download the Zig 0.14.0 toolchain, install JS dependencies, and build the native audio library.

# Pre-built binary (x86_64 Linux)

If you're on x86_64 Linux, the repo ships a pre-built native library. You can skip the native build:

git clone https://github.com/crossatko/tuidaw.git
cd tuidaw
bun install
bun run start

# TUI Requirements

  • Bun (JavaScript runtime)
  • Linux (x86_64 or aarch64) or macOS (x86_64 or aarch64)
  • A terminal with Unicode support (Ghostty, Kitty, Alacritty, WezTerm, etc.)
  • ffmpeg -- for export mixdown
  • zenity -- for file dialogs (Linux only)

Web UI

The Web UI runs entirely in the browser -- no server-side audio processing. The same C audio engine is compiled to WebAssembly via Emscripten, and miniaudio uses the Web Audio backend automatically.

  • Works on desktop and mobile browsers (Chrome, Firefox, Safari)
  • Uses your device's microphone for recording (permission requested on first use)
  • Projects saved in the browser are fully compatible with the TUI and vice versa
  • PWA installable -- works offline after first load

# Self-hosting

# Development (Vite dev server on port 3666)
bun run dev

# Production build
bun run build:web
# Serve web/dist/ with any static file server
# COOP/COEP headers required for SharedArrayBuffer

Keyboard Shortcuts

Press F1 in the TUI for the full reference.

KeyAction
SpacePlay / Stop (record if tracks armed)
AAdd track
DDelete track (two-step: clear, then delete)
RArm/disarm track for recording
MMute/unmute track
SSolo/unsolo track
CToggle metronome click
+ / -Adjust BPM (changes speed via WSOLA)
< / >Pan left / right
VCycle volume (25/50/75/100%)
Up / DownSelect track
Left / RightScroll timeline (Shift: by bar)
[ / ]Scrub playhead by 1 bar
Home / 0Jump to beginning
EndJump to end
F1Help overlay
F2Select input device
F3Select output device
F5Save project
F6Open project
IImport WAV
EExport mixdown
QQuit

Mouse Controls

AreaActionEffect
Main waveformScroll wheelScroll timeline by beats
Main timelineClickSet playhead position
Sidebar trackScroll wheelAdjust volume
Sidebar pan zoneScroll wheelAdjust pan
Sidebar click rowScroll wheelAdjust click volume / pan

Try the Web UI