- Freeze MIDI clips in place, then move, delete or flatten their frozen tails; freezing and bouncing now run in the background with a progress bar.
- Logic-style automation curves, and a double-click on an automation lane opens its rack.
- Clips have a new look: solid color blocks that read the same in light and dark themes, with color intensity now applied to MIDI clips too.
- A new Warp / Fades section in audio settings can auto-warp new imports.
- The channel strip has a console-style fader.
- Auto-updates no longer leave the app damaged, and stopping the transport no longer clicks.
- Various bug fixes and stability improvements, including pasting onto clips, dragging clips while zoomed out, and readability of faded and disabled clips.
- Piano roll polish: the grid follows the grid line intensity setting, black-key rows are easier to read on the dark theme, and note edits play back while you drag.
- The window adapts live when moved to a display with a different scale, circles stay round at any UI zoom, and the playhead moves smoothly on large audio buffers.
- The bottom dock collapses to its tab bar, a new Reduce Transparency setting turns vibrancy off, and the chat composer edits like a normal text box.
- A wavetable synth, Layers' own flagship instrument: a full modulation engine, oscillators that warp from sync through FM, sample and granular oscillator modes, and a bank of factory presets. Drop any audio onto an oscillator to turn it into a wavetable, and every new MIDI clip now arrives with a synth ready to play.
- A drum rack of 128 sampler pads. Drag sounds straight onto pads, see pad names in the piano roll instead of note numbers, and hold ⌥ while dropping a loop to slice it across the whole rack.
- Song generation from your own lyrics, with a new Models tab for managing the local models that power it.
- Crash recovery: unsaved work is offered back to you the next time you launch.
- The extension catalogue no longer stops refreshing after thirty days.
- Stereo m4a files import at their original pitch, ⌘D duplicates every selected clip rather than just one, and undo brings instruments back together with their patches. Further stability fixes across group freezing, clip trimming, the arpeggiator, and web playback.
- The sampler plays up to eight velocity layers per sound.
- Live MIDI controllers now reach the armed instrument, and recording a take captures them straight into automation lanes that behave like any other performance data.
- Bounce a selection through its effects onto a new row, or flatten a frozen group into clips. Effect tails now ring out past the end of a render instead of being cut off.
- Whatever you select gets its own channel strip in the dock, laid out like a real mixer channel, and the dock's tab bar has moved to its foot. New projects start with their send buses already stocked.
- Five new built-in devices: Glue Compressor, Overdrive, Chorus-Ensemble, Convolution Reverb and a tempo-synced Delay, with their factory presets folded neatly in the browser
- Audio Effect Rack: run chains of devices in parallel, side by side in the dock — select devices and press ⌘G to wrap them in a rack
- Tempo automation: the song's tempo can now follow an automation lane
- Record several inputs at once, each onto its own row
- Make songs from the chat with the new Audio Generation extension, and drop MIDI files straight onto the timeline
- Loop recording no longer plays back the take it is recording over
- Various bug fixes and stability improvements across dragging, saving, switching projects, presets and knobs
- One click selects a clip and a double click opens its dock; several rack devices can be moved together onto a clip or a row
- Extensions show what they are doing in the chat with a live status, and the extension store now shows extensions that need a newer Layers instead of hiding them
- Plugin windows no longer float over other apps, and plugin editors no longer stall the interface or drop out of playback
- Sampler: drop a sample onto the sampler and play it across the keyboard. Its rack card is titled with the sample and draws its waveform just like the browser preview.
- Transpose complex-warp clips: a pitch knob shifts a clip up to four octaves either way, and a transpose lane automates it.
- Utility device: a gain, balance, width and mono tool now ships with Layers. Its editor lives in its rack card and every knob can be automated.
- Chat writes MIDI: the assistant can edit the notes of a selected MIDI clip, and Whisper transcription now runs from chat.
- Monitoring through a reverb or delay no longer glitches, and an open plugin window no longer disrupts audio playback.
- Various bug fixes and stability improvements, including mono recording, complex-warp timing and window sizing.
- Device editors open inside their rack card and stay open, and Layers' own devices got a visual polish pass.
- The browser groups plugins into manufacturer folders. The sidebar icon now hides the browser as well as showing it, and a card next to the window buttons reopens it.
- New light theme palette with many readability fixes, redesigned dropdown menus, and a cleaner settings window with its own Models tab. The local model downloads its engine on a fresh machine.
- Recording takes the input channel you pick in settings, and Option+Backspace deletes a word in every text field.
- Every project now opens on a chat with the built-in assistant.
- The assistant can read and set any plugin's parameters in that plugin's own units, and reach for your sample library.
- Extensions put real controls in the chat — sliders, forms, and live progress bars for long jobs.
- The renderer draws true arcs on the GPU.
- Long conversations stay inside the model's context window.
- The accent you pick on first launch is the one every later launch paints, alongside various stability fixes.
- Chat text selects with the mouse and copies, in the transcript and the composer alike.
- Click a waveform in a chat card to hear it from that point.
- The local model engine warms up while you type, and a silent turn wears a shimmering thinking label instead of an empty bubble.
- AI chat, built into the browser panel. Ask for changes in plain language and it makes them — adding effects, editing clips and running commands rather than describing them. It answers from your own cloud model or from a local model that runs entirely offline.
- Extensions. A signed catalogue you install and update from, with each extension running in its own window beside the project. Whisper transcription, stem separation, Paulstretch and collaboration all ship this way now.
- Projects are a folder of plain files instead of a single opaque document — easier to back up, sync and inspect. Projects saved before 0.13 will not open in this version.
- Slash commands in the chat composer, each one describing itself in a card beside the menu.
- Settings, export and the install prompt are real windows you can move and keep open.
- Undo takes back typing in the focused text field.
- A project's waveforms draw as soon as they decode instead of after a delay.
- Various bug fixes and stability improvements across the chat, the timeline and the extension host.
- The view follows the playhead while the transport rolls.
- Drop a sample onto the rack's source box to replace a clip's audio.
- Chats are saved with the project and listed in the browser sidebar; a new chat opens on the model you used last.
- Model downloads show their speed and can be cancelled mid-flight.
- Transcripts sit under the clip they describe.
- Send channels. Aux buses beside Main with their own effect chain and fader, a sends band on every channel strip, pre/post-fader routing, and a collapsible Sends folder in the layers panel. New projects open with a Reverb and a Delay ready to send to.
- Sidechain for VST3 plugins. Point a compressor's key input at a group, instrument, clip or the master from its device box, with a trim knob for how hard the key drives it.
- Instruments in exports and freezes. Bouncing a project or group now renders its instruments and MIDI parts instead of refusing, and asks plugins for offline mode while it does.
- More control over plugins and automation. Plugin parameters expand into an Ableton-style grid of sliders, "Show Automation" starts a lane at the parameter's current value, the mod wheel is a canvas automation lane like any other, and automation clips can be muted.
- Transport and instruments. A stop button in the transport pill, every stop silences self-running arpeggiators and sequencers, and dropping a new instrument onto the rack replaces the old one while keeping its clips, effects and settings.
- Playback and export agree. Sidechain and send taps, the master fader, aux bus returns, frozen group bounces, plugin delay compensation and automation lanes all reach an export or freeze the way they play.
- Warped clips, collaboration and recording. Complex-warped clips loop and pitch correctly across sample rates and extreme stretches, sharing a project no longer wipes it and a peer's delete no longer silences it, a mic at a different rate no longer plays sharp, plus various other stability fixes.
- Smoother and lighter playback. Every fader and bus gain ramps instead of stepping, mute and solo fade in and out, muting an instrument no longer cuts it mid-note, the app stopped burning a core at idle, and zooming the arrangement no longer stutters.
- UI polish. The device rack and piano roll span the whole window, the transport pill is smaller, every knob and slider answers the mouse wheel the same way, sample search shows the folders its hits live in, the light theme works, and quitting with unsaved changes asks in Layers' own window.
- Plugin windows. Meters and analysers in VST3 windows move again, and opening, closing, tweaking or saving a large plugin such as Kontakt no longer drops out the audio.
- Device rack. Every track now has an Ableton-style chain in the bottom dock: a source box at the head, built-in plugins drawing their real editors inline, a level meter after each device, a MIDI meter at the chain's input, and an output strip with gain, pan, solo and mute pinned at the right edge. Devices can be dragged between tracks, copied, pasted, duplicated and deleted, and a click on the grid brings that track's rack forward.
- Rebuilt piano roll. It lives in the bottom dock now, works clip-relative like Ableton, and edits notes across several clips at once. It has a playable keyboard that lights up with what's sounding, a resizable velocity lane with lollipop handles, live overlap resolution while you drag, alt-drag to duplicate, ruler-drag zoom, note-name labels, and a playhead that follows the transport.
- Loop sections. Named, clip-styled section bars sit in a pinned lane under the bar ruler — create them from empty lane space, rename with ⌘R, and toggle looping from the transport.
- Looping audio clips. A Loop switch in the source box unbinds both clip edges, so dragging one out repeats the sample instead of stopping at the end of the file.
- Audio output is far more reliable: device switching actually takes effect, a Bluetooth headset used as both input and output no longer wedges CoreAudio at launch, pressing play with no working output reports the problem, and MP3 export really encodes MP3.
- Opening a project no longer freezes the interface while VST3 plugins load, saving during playback no longer glitches audio, and a save that hits an error is reported as a failure instead of a success.
- Various bug fixes and stability improvements across the grid, piano roll, popups and rendering.
- Clips read as one consistent object across the grid: Logic-style bodies with rounded selection, header strips with editable titles on text notes, standard chrome on automation clips, default titles on MIDI clips, ghosting when something is dropped on top, and ⌘J to consolidate.
- Selection and keyboard work the way you'd expect — shift-click for ranges, cmd-click to toggle, arrow keys to move and extend the selection line, and the same clipboard shortcuts on the grid, in the piano roll and in the layers panel.
- Interface polish throughout: the UI now ships its own typeface so text renders identically on every machine, plus draggable scrollbars with wheel inertia, numeric value boxes with carets, and a reworked welcome and recent-projects screen.
- 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.
- 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%.
- 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
.dmgis now shipped alongside.zipfor first-install, bringing a familiar drag-to-Applications flow.
- Auto-updater now refuses to install unless running from a real
.appbundle, 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.
- 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
- 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
- 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