May 6, 2026

v0.10.339
  • Multi-file drag from Finder — drop several audio files at once and they stack on consecutive free lanes; the first lands exactly where you released the cursor, and a live waveform preview follows the cursor as you drag.
  • Right-click → Export on any audio track bounces the clip with track FX, parent groups, and master applied. Works from the browser or the timeline.
  • Windows release pipeline — signed NSIS installer + portable zip via Azure Trusted Signing, with auto-update parity.
  • Complex warp keeps the clip end in sync when you change sample BPM or warp settings.
  • Settings load failures now show a toast instead of silently defaulting to factory values.
  • Browser sample preview now lives inside the right column instead of overlaying the sidebar; the transport pill recenters as you resize the browser or window.
  • Samples browser sort — clickable Name/Modified header; right-click the secondary cell to swap metric (Date / Size / Type); preference persists across restarts. Default panel width widened to 560px.
  • Browser drag preview shows true clip length, fills the waveform progressively while analyzing, fades semi-transparent until drop, and the new clip is auto-selected once placed.
  • Window — double-click the title bar toggles macOS zoom; resize now extends the grid and viewport into the new area instead of leaving a stale region.
  • Layers panel scrolling — chevron, freeze, group/MIDI icons, and Tempo/Time-Sig labels clip cleanly at the search-bar separator instead of disappearing early.

April 22, 2026

v0.9.298
  • Automatic tempo detection for samples. Drop any audio in and Layers detects its BPM, shown in the right panel with ÷2/×2 buttons for octave correction (with undo). No tempo? You get a clear "—" and a hint instead of a wrong guess.
  • In-app update prompts. A new bottom-left "New Version Available" card lets you Update or Skip the current version; skipped versions are remembered so you won't be nagged again.
  • Split macOS builds. Separate Apple Silicon and Intel DMGs/zips — smaller downloads and native performance on each architecture.
  • Browser footer with profile menu. New bottom-left profile button opens a dropdown with Settings and Command Palette.
  • Freeze/Unfreeze button in the right panel now renders its background.
  • Various stability improvements to the DMG installer (Applications icon on macOS 14+) and auto-updater.
  • Unified Warp control. The Warp toggle and mode selector now share a single pill in the right panel; Layers remembers your last-used mode when you re-enable Warp.
  • Inspector layout polish. Solo / Mute / Monitor now tile the inspector width as a neat grid with a full-width Reverse below; consistent gray palette matches the rest of the DAW.
  • Dashed drop area around Add Effect. You can now drop plugins directly onto the inspector to add them.
  • Right panel shows target name. Selected item's name (filename, instrument, group, or "N clips") replaces the old uppercase category bar.
  • Samples browser empty state. "Nothing here yet" + Add Folder button matches the layers/plugins panels.
  • First-launch browser defaults to a 50/50 split and default color intensity is now 100%.

April 22, 2026

v0.7.298

April 17, 2026

v0.7.267
  • New squircle app icon with silver sparkle and cool/warm gradient tails — replaces the text logo for a more native macOS feel.
  • VST3 plugin scanning is now non-blocking at first launch: the UI appears immediately while scans run in a cancellable background overlay. Subsequent launches use the cache as before.
  • VST3 plugin scan runs each module in a subprocess, so iLok dialogs, license prompts, and plugin exit() calls no longer crash the DAW.
  • Signed and notarized .dmg is now shipped alongside .zip for first-install, bringing a familiar drag-to-Applications flow.
  • Auto-updater now refuses to install unless running from a real .app bundle, preventing accidental overwrites when launched from a dev checkout.
  • Progress overlay gains a fading-arc spinner plus title/subtitle rows (e.g. "Scanning VST Plug-Ins" / plugin name) — the same spinner is now shared with the update pill.
  • Default grid for new users is now 1/8 notes; the empty Effects/Instruments browser shows a centered Rescan button so you're never stuck.
  • Transport icons (pointer, play/pause, scissors) now render from the shared SVG pipeline — consistent look and correct sizing.

April 16, 2026

v0.6.259
  • Built-in plugin system with Pro-Q-style parametric EQ, compressor, and text-to-speech generator — all work on native and web
  • Generic plugin panel framework with click-to-front z-ordering, shared UI widgets (knobs, buttons, faders), and standalone harness for plugin development
  • WASM audio parity — drag-and-drop files, stereo playback, recording, offline export, fade envelopes, automation, and metering now work in the browser
  • Stereo fader meters with independent L/R peak-hold in the right panel
  • Background VST3 plugin scanning with progress overlay
  • Fixed WASM rendering appearing too dark due to sRGB color space mismatch
  • Fixed pinch-to-zoom over plugin panels no longer zooming the canvas
  • Fixed palette fader mixing up gain and position domains
  • Subtle macOS window vibrancy effect with darkened tint for a polished look
  • Shared SVG icon pipeline and redesigned transport pill with larger controls
  • New UI sandbox (make ui <widget>) for rapid widget iteration in isolation
  • App is now signed with Developer ID certificate and notarized by Apple

April 10, 2026

v0.5.175
  • Standalone automation clips — fully redesigned automation system with editable breakpoints, VST parameter automation, and collapsible effect slots
  • Freeze tracks with automatic reverb/delay tail detection and non-blocking progress overlay
  • Web embeddable player configurable via postMessage and URL parameters
  • Bar ruler and timeline ruler with click-to-seek navigation
  • Welcome window with recent projects on startup
  • AIFF audio file support
  • Piano keyboard sidebar on MIDI clips with note highlighting and click-to-play
  • Audio clips now use beat-derived timing for sample-accurate playback
  • Fixed stereo WAV and frozen group playback
  • Various bug fixes and stability improvements
  • Rotary knob controls and inline RMS level meters on layer rows
  • Time signature control with drag-to-change and grid integration
  • UI zoom (Cmd+=/Cmd+-/Cmd+0)
  • Pointer/scissors tool switcher with keyboard shortcuts
  • Theme tone presets (Cool/Neutral/Warm) for gray temperature
  • Progress overlays for exports, project loading, and freeze operations
  • Draggable sidebar separator in browser panel

April 10, 2026

v0.4.174
  • bar ruler at top of grid with adaptive bar numbers, tick marks, playhead indicator, and click-to-seek
  • timeline ruler at bottom of grid with adaptive M:SS labels, tick marks, playhead indicator, and click-to-seek
  • VS Code-style UI zoom with Cmd+=/Cmd+-/Cmd+0, scales entire UI
  • add search icon to browser search bar
  • welcome window on startup — shows recent projects, New Project & Open buttons, scroll, Escape to dismiss
  • VST param rows with drag-to-change, label+value layout, stable ordering, fix click closing right window
  • input monitoring "I" button on Main layer — direct-to-master monitoring with mutual exclusion
  • MIDI clip right window with instrument dropdown selector and "Open Instrument" button
  • add reusable "Project" section header in sidebar before Layers, matching "Places" style
  • VST instrument parameter automation — touch knobs to see params, right-click to create automation lanes
  • time signature control in Layers panel with drag-to-change, metronome & grid integration
  • VST plugin param automation — collapsible effect slots with last-touched param display, right-click to create automation, playback support
  • move tempo from browser header to Layers panel label/value row, add ProjectParams struct
  • move metronome icon and BPM tempo from transport bar to browser header row, shrink transport bar
  • add SVG sound-file icon for audio files in browser panel
  • metronome button active state with accent background highlight, matching tool button style
  • add SVG icon rendering pipeline via resvg + tiny-skia; replace metronome timer font icon with custom SVG metronome icon
  • Ableton-style automation lane hover — ghost dot on line, value label, brighter line color when editing
  • Escape resets scissors tool back to pointer
  • add pointer/scissors tool switcher to transport panel with V/C keyboard shortcuts
  • groups movable by clicking any point inside (not just border/badge) when not in group editing mode
  • browser category labels use exact #B3B4BD color (text_secondary L=0.722), full opacity; add matching theme color test
  • piano keyboard sidebar on MIDI clips with sticky positioning, active note highlighting, and click-to-play
  • Ableton-style Tone presets (Cool/Neutral/Warm) for theme gray temperature, color intensity defaults to 0
  • automation clip point X snapping to grid when enabled
  • right-click context menu on Volume/Pan controls to create automation
  • thicker automation lines
  • automation clip edge resize — drag left/right edges to resize, with point remapping and multi-select support
  • automation dots now bigger with inner white dot; click-without-drag deletes point
  • automation dot gain value labels shown on hover/drag
  • show parameter label on automation clips — "Volume", "Pan", or "Param N"
  • wire audio engine to read from AutomationClip entities (Phase 5 of automation refactor)
  • full clip operations for AutomationClip — move, delete, copy/paste, split, create commands (Phase 4 of automation refactor)
  • hit testing + point editing for AutomationClip — select, create/drag/delete breakpoints, undo/redo (Phase 3 of automation refactor)
  • render AutomationClip on canvas — background rect, border, line triangles, dots (Phase 2 of automation refactor)
  • add AutomationClip as first-class canvas entity — struct, operations, storage, layer tree, all match arms wired up (Phase 1 of automation refactor)
  • apply middle-ellipsis truncation to layer names in browser Layers tab
  • draggable sidebar separator in browser — resize left sidebar by dragging the vertical divider, persisted in app settings
  • Ableton-style middle-ellipsis truncation for long filenames in browser
  • dim non-audio files in browser samples, disable hover/selection/drag/keyboard nav
  • add margin and border-radius to Places rows in browser sidebar
  • add margin and border-radius to browser category tabs
  • add Figma-style rounded bordered boxes around sidebar category and Places sections
  • add border-radius to active sidebar category highlight, remove left accent bar
  • reorder layer controls to RMS | knobs | label | S/M/I, S/M/I buttons hidden until hover or active
  • replace inline faders with rotary knob controls on layer rows, single-row layout
  • inline RMS level meters on layer rows with dB text label below meter, shown only when signal is active
  • inline volume and pan faders on each layer row in browser panel with horizontal drag support
  • add empty state messages for Instruments ("No instruments found") and Effects ("No effects found") browser tabs
  • join session input now auto-pastes clipboard when it contains a session URL or bare ID
  • join session from CLI by passing share URL as positional argument, e.g. layers https://layers.audio/projects/...
  • widen default browser width (320→340) so Time Signature label fits without ellipsis
  • Time Signature label uses ellipsis instead of wrapping text
  • add MidiClip arms to all non-exhaustive pattern matches after RightWindowTarget::MidiClip variant addition
  • automation dots always take priority over edge resize, even without editing mode
  • remove border/fill from tempo & time signature value boxes, smaller value text
  • automation dots at clip edges now take priority over resize drag
  • align Tempo/Time Sig left padding and text color to match Main entry
  • move tempo & time signature above Main in browser layers list
  • right window instrument params now appear in touch order (append to end, not front)
  • "Create Automation" focuses existing automation clip instead of creating duplicate
  • creating automation from FX param context menu no longer closes right window
  • clicking expanded VST param no longer triggers "Add Effect" button — selects matching automation clips instead
  • automation lane for MIDI clip now targets parent instrument so FX automation actually applies
  • revert instrument FX automation to original MIDI-based normalization that was working
  • 20px chevron, always-visible automation values in layers, automation name includes plugin name e.g. "Blend Dry/Wet (Rev Plate 140)"
  • instrument FX automation — extend bbox to include automation clips, fix layers panel live updates via text_dirty, bigger 16px chevron
  • plugin param automation playback — add syncaudioclips after creation, GroupBus automation support, bigger chevron, continuous redraw during playback
  • effect slot layout bypass|chevron|name order, live param values in right panel & layers value box during playback
  • VST automation — show real param names, fix bypass index mismatch, accumulate multiple params in right panel
  • right-click effect slot header shows "Create Automation" context menu, ensure target entity in selected for groups
  • restore click-to-open-GUI on effect slots, add separate chevron for expand/collapse; fix create automation for groups
  • Cmd+L toggles loop — pressing again on overlapping range deletes loop instead of stacking
  • tempo row indented as child of Main, integer-only drag snapping, bordered value box
  • automation lane ghost dot click now creates point on the line instead of at mouse Y position
  • right window left border now uses same divider color as browser right border
  • SVG icon blinking — write instance data at distinct buffer offsets per icon group
  • automation points now created on the line (at interpolated value), not at mouse Y — drag to adjust
  • audio clip drop now snaps to track rows instead of free Y positioning
  • group volume=0 and pan=0 silently overwritten on project load — remove broken zero-check in deserialization
  • beatsx/sizebeats sync bugs — MIDI note creation, overlap trim, text note/component instance moves, automation splitat, group sizebeats field added
  • audio clips now start at exact beat-derived times — store canonical beatsx:f64 on all entities, audio engine uses beats*60/bpm instead of px/PIXELSPER_SECOND, export and project load updated accordingly
  • first MIDI note at clip start not playing when instrument has latency — restore correct cursor boundary
  • browser category tab highlight now resets correctly after navigating a Places folder
  • suppress audio clip fade hover effect while dragging any selection
  • first MIDI note and note-off on stop now reliable — lastinsttime moved inside inst lock, note-off flag retries on gui lock failure
  • dragging automation point no longer retriggers VST notes — soft instrument update skips MIDI cursor reset
  • MIDI notes keep ringing after stopping playback — note-offs now reliably delivered via persistent flag
  • split Cool tone into dark(229/0.22→#333540) and light(222/0.084→#A1A5AE) params; add exact-match tests
  • volume fader mousewheel direction inverted — scroll up now increases volume
  • clicking inside automation clip to create point no longer deletes it on mouse up
  • automation clip labels in layers tab now show param name (Volume/Pan) instead of generic "Automation"
  • keep default cursor when hovering over clips instead of showing grab cursor
  • automation clip rendering now applies color_intensity setting to match waveform visual appearance
  • automation clip color syncs with parent waveform/MIDI clip on color change; layer panel shows actual clip color
  • automation inner white dots now render on top of lines, not behind them
  • arrow keys no longer move canvas clips when command palette is open
  • automation point changes now apply in real-time during playback instead of only on restart
  • automation clips overlap-resolve across params/targets — same-param: X-only, different-param: X+Y overlap required
  • automation clip creation finds free row below target instead of overlapping existing clips
  • automation clips now included in rectangular select area (multiselect)
  • automation clip overlap resolution — same-param clips now slice/crop/delete when overlapping, live preview during drag
  • automation clip now selectable and movable — removed zoom-threshold auto-edit that blocked selection
  • remove vertical gap when creating automation clip — now flush below the source clip
  • playback seeks to start of selected automation or MIDI clip
  • automation clip inherits color from its source audio/MIDI clip
  • automation clip requires edit mode to place points — zoom in or double-click to enter, click outside or Escape to exit
  • automation clip height now matches target audio clip height exactly
  • code review fixes — add div-by-zero guards in hit testing/rendering/audio, fix partialcmp unwrap panics, add updatecursor on automation drag, add serialization roundtrip test, remove dead autolaneclose_rects field
  • selection area stays grid-aligned when BPM changes
  • shift-click in browser Layers tab now selects range instead of toggling individual items
  • layer text not rendered on project load until scroll/click
  • show drop indicator line when reordering items within a group
  • Layers tab browser entries now scroll correctly
  • prevent canvas zoom/scroll/pinch when mouse is over browser or right window panel
  • context menu hover and click no longer trigger outside dropdown bounds
  • clicking "Join Session" / "Share Session" in command palette now works — mouse click path was closing palette before executing the command
  • increase "Project" and "Places" sidebar section header font size from 9 to 10
  • replace tempo/time-sig tooltips with button-style value box backgrounds
  • decompose large files — split handlemouseinput into 10 methods, introduce RenderParams struct for gpu.rs, group App fields into sub-structs
  • unify all UI text to use native macOS system font (SF Pro) via platform-aware defaultuifamily() helper
  • extract shared button component (togglecolor, actioncolor, text_color) and unify settings + right window buttons to Warp-style colors
  • extract shared test helpers into helpers.rs, remove 3 duplicate undo/redo tests
  • move metronome icon back to transport bar, keep BPM in browser header
  • move Share button from top-right corner to Settings > Developer tab
  • keep beatsx/sizebeats/startbeats/durationbeats in sync on all resize, move, overlap-resolution, and MIDI recording mutations across cursor.rs, main.rs, overlap.rs
  • add beatsx/sizebeats/startbeats/durationbeats fields to all entity structs; fix struct initializers in main.rs, clipboard.rs, and all test files; fix component_defs → components field ref
Features
Bug Fixes
Performance
Design & UI
Refactoring