Back to News
update release windows vst3 clap asio wasapi autosave modulation solaris-ui tomnic polysynth alchemy piano violin scratch-deck bass-synth omni daw build-2d2a75e

Windows VST3/CLAP/ASIO Stability, Solaris UI, Autosave & Modulation Fixes — Omni Update May 6–11

A major Windows stabilisation sprint brings rock-solid VST3 and CLAP plugin windows, ASIO sample-format fixes, WASAPI device-change recovery, and engine auto-restart on stream death. Across all platforms: a full autosave system with crash recovery, per-channel modulation routing fixed, and a sweeping UI refactor that migrates every synth (TOMNIC, PolySynth, Alchemy, Piano, Violin, Scratch Deck) to the compact Solaris-style panel layout.

May 11, 2026 Tomasz Głuc
Windows VST3/CLAP/ASIO Stability, Solaris UI, Autosave & Modulation Fixes — Omni Update May 6–11

Build: 2d2a75e | May 6 – 11, 2026


🔌 Windows — VST3 & CLAP Plugin UI Stability

After extensive testing on Windows with Surge XT, Vital, u-he Hive and LSP Plugins, every known plugin window issue has been resolved:

  • Plugin windows now hide on close instead of being destroyed — re-opening restores the same editor without a full reinitialisation cycle. The toggle button state is synced with IsWindowVisible on every frame
  • Fixed plugin window reopen for both VST3 and CLAP on Win32: window state is no longer out of sync after the user closes and reopens the editor
  • Enforced fixed-size editor windows on Win32: prevents some plugins from collapsing to 0 × 0 px on show
  • VST3 initialisation on persistent GUI thread: IComponent::initialize and IEditController setup now run exclusively on the dedicated GUI thread — eliminates COM apartment violations and race conditions
  • Message pumping while attached() runs: fixes Surge XT GUI hang where the plugin called back into the host during the attach sequence
  • Per-monitor DPI awareness (PROCESS_DPI_UNAWAREPROCESS_DPI_AWARE) set before any window is created; WS_CLIPCHILDREN prevents child overdraw
  • Attach watchdog extended to 180 s; worker thread detaches cleanly on timeout — the UI never freezes waiting for a stuck plugin
  • Step-by-step logging and a panic catcher around IComponent::initialize for easier debugging of misbehaving plugins

🔊 Windows — WASAPI & ASIO Engine Fixes

  • WASAPI DEVICE_INVALIDATED fix: the engine now negotiates the device's native mix format instead of the user-configured format — the leading cause of stream crashes on default-device change
  • Panic catcher in the audio callback: any Rust panic is caught and logged; the stream is not killed, preventing full WASAPI session loss
  • WASAPI buffer size regression fixed: a recent refactor accidentally wrote a hard-coded frame count; now correctly reads the device-reported period
  • Unified settings path: all persisted settings (audio, MIDI, autosave, app prefs) now live under omni_config_dir() — consistent on Windows and Linux
  • ASIO sample format conversion corrected: silence and noise artefacts on 24-bit and 32-bit ASIO devices (ASIO4ALL, RME, Focusrite) are eliminated
  • ASIO4ALL control panel now launches correctly from the Settings → Audio dialog on Windows
  • Windows builds now include ASIO SDK by default — ASIO is no longer an optional compile-time feature; any Windows build can use ASIO devices

⚡ Engine — Auto-Restart on Stream Death

Previously, if the audio device was removed or WASAPI reported a fatal error, the engine would silently stop processing while Omni's UI remained up with no indication. This is fixed:

  • A new stream_died: Arc<AtomicBool> is set by the cpal error callback on any fatal stream error
  • The UI polls this flag once per frame; on detection it tears down and fully rebuilds the engine with the current audio settings
  • Recovery is automatic — plug in a USB audio device, switch the Windows default output, or wake from sleep: Omni reconnects without a restart

💾 Autosave — Complete System

Omni now has a full autosave implementation designed for crash recovery and session continuity:

  • Configurable interval: 1–60 minutes; enabled by default at 5 minutes
  • Snapshots stored in ~/.config/omni/autosave/ with ISO-8601 timestamps
  • Automatic pruning: old autosaves beyond a configurable count are removed; storage stays bounded
  • Extended Load menu: Open…, Recent Projects (last 10), and AutoSave Recovery sub-menus accessible from the top bar
  • One-click recovery: open any autosave snapshot directly from the Recovery list
  • Settings → AutoSave tab: enable/disable toggle, interval slider, Clear Autosaves button
  • Recent projects list persisted in ~/.config/omni/app_settings.json; updated on every save and open

🎛️ Modulation Routing — Engine Fix

A subtle but impactful bug in the modulation engine has been corrected:

  • Add/remove/disable routes now correctly primes and resets the parameter base value for instrument and plugin targets — the value a modulator is added on top of
  • Routing order bug fixed: a newly added route could read a stale base value on the very first audio callback, causing a one-buffer offset artefact
  • Dead code removed; regression tests added for all three cases (add, remove, disable)

🎨 Solaris UI — Universal Synth Panel Refactor

Every remaining synth in Omni has been migrated to the compact Solaris-style panel layout — the design system introduced with Bass Synth that maximises knob density and modulation visibility on a 15.6″ laptop screen.

TOMNIC Drum Synth

  • OSCILLATORS section with OSC 1 / OSC 2 tabs
  • NOISE section with NOISE 1 / NOISE 2 tabs
  • LFOs section with LFO 1 / LFO 2 tabs
  • CLICK as a separate narrow section
  • FILTER uses the hardware filter_display widget, narrowed to 86 px
  • FX split into individual vertical sections: DISTORTION, FREQ SHIFT, RING MOD, DELAY, REVERB, PHASER, CHORUS, EQ, WIDTH
  • Main panel scroll eliminated — all sections fit without scrolling at full resolution

PolySynth

  • Full compact Solaris layout — shared widgets and conventions with Bass Synth
  • Modular code split; legacy polysynth_sections.rs removed

Alchemy — Chemistry Synth

  • Modular code split: solaris_reaction.rs (reactor view) and solaris_visuals.rs (plasma orb, stoichiometry fill) extracted into dedicated files
  • Ampoule panel rearranged to a 3×3 grid placed after the output section — more accessible, less visual clutter
  • Periodic table resized and compacted; ScrollArea wrapper removed in favour of direct layout allocation — no horizontal scroll

Piano & Violin (Physical Models)

  • Both instruments migrated to the shared modeled_synth_solaris panel module
  • Preset combo, section headers and dynamic labels unified with Bass Synth conventions
  • Piano UI reduced from ~760 lines to a compact shared implementation; Violin from ~443

Scratch Deck

  • Compact Solaris layout applied to the sample loader and transport controls
  • Live platter rotation visualiser added — the vinyl graphic rotates in real time at the current playback speed and direction

Bass Synth

  • Modulation animation overlays fully restored for all Solaris widgets: knobs, faders, toggles, combo boxes
  • All modulated parameters show animated rings, sweep dots and highlight lanes as before the Solaris migration
  • Legacy bass_synth_sections.rs removed; imports cleaned up

🐛 Bug Fixes

  • Gate expander mode: soft-expander ratio was applied in the wrong direction at low ratio values — gain reduction is now correctly attenuated
  • Windows debug stack overflow: .cargo/config.toml now sets a larger stack size for debug builds, preventing stack overflows in debug-mode recursive code paths
  • Load toolbar button: now uses the same toolbar_button style as its neighbours — was inconsistently using a plain button style
  • omni_midi_sim Windows build: added a stub main() for non-Unix targets so the crate compiles without virtual MIDI port support on Windows

Omni is actively developed — the next update is coming soon. 🚀

VST3 finally stable on Windows, or the Solaris UI refresh — which one makes the biggest difference for your workflow? Let us know.

Windows VST3/CLAP/ASIO Stability, Solaris UI, Autosave & Modulation Fixes — Omni Update May 6–11 | OMNi DAW