Repository navigation
Releases: zexk/wstudio
Release list
wstudio 1.0.0-beta.10
wstudio 1.0.0-beta.9
Full Changelog: v1.0.0-beta.4...v1.0.0-beta.9
wstudio 1.0.0-beta.4
Fourth beta of wstudio, a keyboard-centric DAW with a vim-modal terminal interface and a native GUI. The download archives include the curated four-track demo.wsj project.
Linux x86_64
The Linux build requires glibc and ALSA (libasound.so.2). Download and extract wstudio-linux-x86_64.tar.gz, then run:
cd wstudio-linux-x86_64
./wstudio demo.wsj # TUI
./wstudio --gui demo.wsj # GUIPipeWire and JACK are supported natively alongside ALSA; wstudio picks the best available backend automatically (override with wstudio.o.audio_backend in init.lua).
Windows x86_64
Download and extract wstudio-windows-x86_64.zip, open PowerShell in the extracted directory, then run:
.\wstudio.exe demo.wsj
.\wstudio.exe --gui demo.wsjPress space to start or stop playback. Run :help inside wstudio for the full keyboard reference.
macOS
Take wstudio-macos-arm64.tar.gz on Apple Silicon or wstudio-macos-x86_64.tar.gz on an Intel Mac. Extract it, then run:
cd wstudio-macos-arm64 # or wstudio-macos-x86_64
xattr -dr com.apple.quarantine .
./wstudio demo.wsj # TUI
./wstudio --gui demo.wsj # GUIUnsigned builds
None of these archives are code-signed, so every platform's defences will object to them on first run. Check your download against SHA256SUMS before overriding anything.
- Windows: SmartScreen shows "Windows protected your PC". Choose More info, then Run anyway. Defender may also quarantine or delete
wstudio.exeoutright on download, in which case restore it from Protection history or add the extracted directory to the exclusion list. - macOS: Gatekeeper refuses an unsigned, un-notarized binary. The
xattr -dr com.apple.quarantine .above clears the download flag; otherwise right-click the binary and choose Open. - Linux: nothing to do.
Signing needs an Apple Developer ID and a Windows code-signing certificate, neither of which is in place during the beta.
What's new since beta.3
Lua can write music now
notes_get/notes_setandsteps_get/steps_setreach piano-roll and drum-grid patterns,fx_list/fx_add/fx_params/fx_param_setreach FX chains on any track, the master bus, or a group, andclip_add/section_setlay out the arrangement- Enough to script euclidean rhythms, chord generators, humanize passes, and whole song structures; worked examples at the end of
examples/init.lua
Synth
- 32 modulation matrix rows (was 8), per-row unipolar mode, tempo-synced retriggerable slewable LFOs, per-note random modulation, band-limited wavetable playback, and a module-grid editor layout
mpoints the first free matrix row at the param under the cursor and jumps there, instead of steppingdestthrough every automatable param by hand- Instrument presets save their whole FX chain, and rack FX carry stable instance IDs so modulation survives a reorder
Drum grid, Elektron-style
- Per-step tune, trig conditions, rolls, and micro-timing, plus per-pad loop length for polymeter
- A blank
initkit, which a fresh drum machine now starts on
Piano roll and note tools
- FL-style mouse gestures in both frontends, left-edge note resize, velocity-lane dragging, cursor-pitch audition, blockwise visual selection, and chord-stamp inversions
:invert,:double,:fit,:dedupe,:normalize,:glue,:chop-notes,:flam,:arpeggiate,:limit,:discard-lengths,:snap-scale
Sampler, slicer, and browser
- Per-pad tone filter and gated playback,
:chop-random,:spread,:bpm-sync, waveforms tinted by frequency content, and regions drawn on the warped playback timeline aauditions the file under the browser cursor,vbulk-loads a range of samples into consecutive pads, and the browser reopens where the last sample came fromfin the tracks view opens the preset picker directly, picking synth presets, drum kits, or SoundFont presets from the track's own instrument
Arrangement, groups, and navigation
- Holding
enterafter stamping a clip keeps the cursor on it soh/lresize it live, mirroring the piano roll's note stamp - Mute and solo a whole group from its tracks-view row, with badges in the GUI
:recentopens a picker for the 10 most recently loaded or saved projects, and Tab cycling fuzzy-matches command names, sorsbfindsrestore-backup
GUI parity
- Live MIDI input, matching the TUI
- Held navigation keys repeat movement, parameter nudges, and prompt editing while edit and performance keys stay edge-triggered
- Automation drags rebuild arrangement playback once on release instead of once per frame, keeping long arrangements responsive
CLAP
:clap-guiopens plugin-owned floating GUI windows for CLAP instruments and focused effects from either frontend
Configuration
- 18 more
wstudio.ooptions: the:bouncetail length, bit depth, and default output paths; the master limiter's ceiling and release; the step count, pattern length, and swing a newly created instrument starts at; the terminal columns per piano-roll, drum, and arrangement cell; the completion popup height; the spectrum analyser's dB span; the waveform band-tint split points; and the GUI piano-roll row height, which now scales the roll up to a full 88 keys at small heights - Bookmarks, command history, instrument presets, and drum kits moved next to
init.lua($XDG_CONFIG_HOME/wstudio, or%APPDATA%\wstudioon Windows). Files left in the old~/.config/wstudiolocation are still read, and move on the next save
Fixes worth calling out
- Applying a synth preset bound its FX modulation to nothing, so a preset whose macro sweeps a reverb or delay parameter (warm-pad, pluck, and others) applied with that routing dead
:synth-presetapplied stack garbage instead of the saved patch, and a saved kit reloaded as eight silent named pads instead of audio- TUI mouse clicks landed one row above the row that was clicked
- Undo covered GUI synth, sampler, automation, step-painting, and recorded audio edits, all of which previously bypassed it
- Several panics:
/in the synth editor once the mod matrix grew to 32 rows, a long piano-roll loop, the bottom of the GUI keyboard, command history stepped past its newest entry, and a multi-lane undo entry after a track delete gui_panel_border = 'square'now reaches every non-musical GUI element; track rows, badges, chips, FX slots, meters, plots, and canvases were hardcoded to rounded corners- Both frontends title themselves
<project> - wstudio; the GUI window said "wstudio GUI prototype" and the TUI set no title at all - macOS audio capture read the default output device rather than the default input one, and a Mac with no input device started a stream that never delivered audio
Known beta limits
- Project-file backups are recommended while the
.wsjformat continues to evolve. - Surround buses, polyphonic modulation, plugin-requested restarts, and plugin-requested thread pools are not supported yet.
- The minimum terminal size is 80x14.
Verify downloads with SHA256SUMS. Please use the bug form for reproducible problems and Discussions for questions or broader workflow feedback.
Full changelog: v1.0.0-beta.3...v1.0.0-beta.4
wstudio 1.0.0-beta.3
Third beta of wstudio, a keyboard-centric DAW with a vim-modal terminal interface and a native GUI. The download archives include the curated four-track demo.wsj project.
Linux x86_64
The Linux build requires glibc and ALSA (libasound.so.2). Download and extract wstudio-linux-x86_64.tar.gz, then run:
cd wstudio-linux-x86_64
./wstudio demo.wsj # TUI
./wstudio --gui demo.wsj # GUIPipeWire and JACK are supported natively alongside ALSA; wstudio picks the best available backend automatically (override with wstudio.o.audio_backend in init.lua).
Windows x86_64
Download and extract wstudio-windows-x86_64.zip, open PowerShell in the extracted directory, then run:
.\wstudio.exe demo.wsj
.\wstudio.exe --gui demo.wsjPress space to start or stop playback. Run :help inside wstudio for the full keyboard reference.
What's new since beta.2
Recording & time
- Record-arm (
r) plus real audio-input recording (ALSA/WASAPI) for Sampler tracks, count-in gated - WSOLA time-stretch: new
stretch_ratioSampler pad parameter - Master bus phase-correlation meter and BS.1770-style LUFS/dBFS loudness metering
Mouse & GUI
- Real scroll-wheel support in the GUI (previously none anywhere)
- Drag-paint and right-click erase/delete across drum, slicer, piano roll, and arrangement
- Clickable mute/solo/arm badges in the tracks view, plus a contrast-aware layout pass
- GUI FX view fixes: selected-parameter highlighting, predictable control sizing, EQ band improvements
- Fuzzy-match fix in the GUI picker, auto-scrolling file browser, popular built-in color schemes
Instrument & track editing
:track-instrument(andIin the tracks view) swaps a live track's instrument in place, preserving notes when representations match- Soundfont preset picker (
f) with key-range and bank/program display - Track creation, restore, and instrument-kind changes are now undoable
Pattern editing commands
:quantize,:humanize(+ drum velocity jitter),:transpose,:legato,:vel-ramp,:reverse,:euclid/:rotate,:strum,:unmute/:unsolo, named Euclidean rhythm presets- Visual-mode transpose/slide/
o/count-paste,J/Koctave-drag on grabbed/stamped notes - Vim macros (
q{a-z}record,[count]@{a-z}/@@replay), backtick alternate jump,showcmdstatus chip, true hold-to-shape stamp via the kitty keyboard protocol, readline controls in prompts
Song/pattern mode
- Tabbing back to tracks now correctly reverts song mode to pattern mode;
Ttoggles it from the tracks view too, with a SONG/PATTERN badge
Lua API
- Track management, transport, project lifecycle, and metadata-introspection APIs completed
- Themes are now scriptable through Lua highlights; editor-context API added; session options expanded to Nix parity
CLAP & MIDI
- CLAP effect parameters exposed in both frontends; host now services main-thread callbacks, parameter flushes, and dirty-state notifications
- MIDI channel modes completed and documented; controller reset refreshed
Stability
- A broad pass of undo/rollback ownership hardening (track create/restore/duplicate, instrument swap, rack retirement), overflow and capacity guards (MIDI timing, automation, command queue), and allocation-failure leak closures
Known beta limits
- Project-file backups are recommended while the
.wsjformat continues to evolve. - Native CLAP plugin GUI windows, surround buses, polyphonic modulation, plugin-requested restarts, and plugin-requested thread pools are not supported yet.
- The minimum terminal size is 80x14.
Verify downloads with SHA256SUMS. Please use the bug form for reproducible problems and Discussions for questions or broader workflow feedback.
Full changelog: v1.0.0-beta.2...v1.0.0-beta.3
wstudio 1.0.0-beta.2
Second beta of wstudio, a keyboard-centric DAW with a vim-modal terminal interface, now joined by a native GUI. The download archives include the curated four-track demo.wsj project.
Linux x86_64
The Linux build requires glibc and ALSA (libasound.so.2). Download and extract wstudio-linux-x86_64.tar.gz, then run:
cd wstudio-linux-x86_64
./wstudio demo.wsj # TUI
./wstudio --gui demo.wsj # GUIPipeWire and JACK are now supported natively alongside ALSA; wstudio picks the best available backend automatically (override with wstudio.o.audio_backend in init.lua).
Windows x86_64
Download and extract wstudio-windows-x86_64.zip, open PowerShell in the extracted directory, then run:
.\wstudio.exe demo.wsj
.\wstudio.exe --gui demo.wsjPress space to start or stop playback. Run :help inside wstudio for the full keyboard reference.
What's new since beta.1
- Native GUI frontend (
--gui), sharing the same project files and command set as the TUI - CLAP 1.2 plugin hosting: instruments and effects, external plugin discovery/picker, parameter automation, saved in the
.wsjproject - Native PipeWire and JACK playback backends (Linux was ALSA-only before)
- SoundFont (
.sf2) player instrument - Standard MIDI File import/export for piano-roll patterns
- Factory preset library expanded to 100 presets
- Arrangement, slicer, and drum-pattern editing refinements (clip cut/split, boundary hardening, chop/merge validation)
Known beta limits
- Project-file backups are recommended while the
.wsjformat continues to evolve. - Native CLAP plugin GUI windows, surround buses, polyphonic modulation, and plugin-requested thread pools are not supported yet.
- The minimum terminal size is 80x14.
Verify downloads with SHA256SUMS. Please use the bug form for reproducible problems and Discussions for questions or broader workflow feedback.
Full changelog: v1.0.0-beta.1...v1.0.0-beta.2
wstudio 1.0.0-beta.1
First public beta of wstudio, a keyboard-centric DAW with a vim-modal terminal interface. The download archives include the curated four-track demo.wsj project.
Linux x86_64
The Linux build requires glibc and ALSA (libasound.so.2). Download and extract wstudio-linux-x86_64.tar.gz, then run:
cd wstudio-linux-x86_64
./wstudio demo.wsjPipeWire and PulseAudio desktop setups can use their ALSA default device.
Windows x86_64
Download and extract wstudio-windows-x86_64.zip, open PowerShell in the extracted directory, then run:
.\wstudio.exe demo.wsjPress space to start or stop playback. Run :help inside wstudio for the full keyboard reference.
Known beta limits
- Project-file backups are recommended while the format evolves.
- Native PipeWire and JACK backends are not available yet.
- Plugin hosting is not available yet.
- The minimum terminal size is 80x14.
Verify downloads with SHA256SUMS. Please use the bug form for reproducible problems and Discussions for questions or broader workflow feedback.
Full changelog: https://github.com/zexk/wstudio/commits/v1.0.0-beta.1