Skip to content

wstudio 1.0.0-beta.4

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Jul 07:54
· 1250 commits to master since this release

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    # GUI

PipeWire 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.wsj

Press 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    # GUI

Unsigned 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.exe outright 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_set and steps_get/steps_set reach piano-roll and drum-grid patterns, fx_list/fx_add/fx_params/fx_param_set reach FX chains on any track, the master bus, or a group, and clip_add/section_set lay 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
  • m points the first free matrix row at the param under the cursor and jumps there, instead of stepping dest through 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 init kit, 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
  • a auditions the file under the browser cursor, v bulk-loads a range of samples into consecutive pads, and the browser reopens where the last sample came from
  • f in 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 enter after stamping a clip keeps the cursor on it so h/l resize 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
  • :recent opens a picker for the 10 most recently loaded or saved projects, and Tab cycling fuzzy-matches command names, so rsb finds restore-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-gui opens plugin-owned floating GUI windows for CLAP instruments and focused effects from either frontend

Configuration

  • 18 more wstudio.o options: the :bounce tail 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%\wstudio on Windows). Files left in the old ~/.config/wstudio location 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-preset applied 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 .wsj format 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