A DAW built from scratch in Rust as a deliberate learning project. No frameworks — raw wgpu, CPAL, and winit.
Glacier is a working DAW with real rough edges — expect some UI/interaction bugs as active development continues. Core sequencing, playlist arrangement, and playback all work end-to-end; the project is being actively refactored and hardened rather than considered finished. Issues and PRs pointing out bugs are genuinely useful right now.
Glacier is a Cargo workspace with two crates: glacier-app (the application) and glacier-dsp (DSP utilities).
git clone https://github.com/remysedlak/glacier.git
cd glacier
cargo run --releaseRequires a working audio output device (via CPAL) and a Vulkan/Metal/DX12-capable GPU (via wgpu). No other setup needed — fonts and icons are bundled in assets/.
To open an existing project, use File → Open and pick a .toml project file (see assets/projects/ for an example). A blank default project loads on first run.
- step sequencer with per-pattern sequences, MIDI velocity, and velocity bar view per track
- piano roll — place and edit notes per track per pattern, scrollable note grid and fixed key column
- load .wav tracks at runtime, add/delete tracks dynamically
- variable step counts per track
- multiple patterns, switchable from the UI, with duplicate support
- playlist view — arrange patterns across a timeline with x/y scroll and scissor clipping per region
- mixer window with master volume slider
- per-track volume knobs and mute controls
- draggable, z-ordered mini-windows with correct click and hover ownership across overlapping windows
- track detail windows per track
- right-click context menus on patterns and tracks
- SVG icon pipeline — toolbar icons rasterized via resvg, tooltip system on hover
- custom text rendering via fontdue — glyph cache, textured quads, painter's algorithm interleaving
- multiple font support (variable + monospace)
- play/pause, stop, BPM control, keyboard shortcuts (space, ctrl+s)
- cursor icon feedback on all interactive elements
- project save/load via TOML
- footer status bar showing project path and FPS
audio— CPAL stream, sequencer callback, event-driven trigger resolution by track IDapp— winit event loop, input handling, ring buffer dispatch, file dialog threadsproject— serialization structs, WAV loadinggraphics/mod— wgpu pipeline, draw loop, painter's algorithm, click owner and hover blockinggraphics/font— fontdue glyph cache, texture upload, NDC quad generationgraphics/widgets— Rectangle, Square, draw_slider, window_title_bar, layout constantsgraphics/primitives— ScreenConfig, Vertex, draw_rectangle, draw_knob, padding constantsgraphics/icons— SVG rasterization via resvg, icon cache, Tooltipgraphics/color— named color constantsgraphics/context_menu— ephemeral right-click menusgraphics/components/toolbar— toolbar draw, icon positions, BPM controlsgraphics/components/pattern_tray— pattern list and selectiongraphics/components/footer— status bargraphics/mini_window/sequencer— step sequencer windowgraphics/mini_window/mixer— mixer windowgraphics/mini_window/playlist— playlist arrangementgraphics/mini_window/piano_roll— piano roll windowgraphics/mini_window/track— track detail window
wgpu · winit · CPAL · fontdue · ringbuf · hound · serde/toml · rfd · resvg · dirs · showfile · log/env_logger