Releases: ludovic111/ryolune
Release list
ryolune 0.11.0
ryolune 0.11.0
Follows Ondera 0.10.0 (tempo changes, bus tracks) a day later, under a new name.
Ondera is now ryolune
The project is renamed ryolune, written in lowercase: the app, ryolune-cli, ryolune-mcp,
the plugin SDK (ryolune-plugin), the site and the repository (github.com/ludovic111/ryolune;
the old address redirects). Nothing you made is left behind:
- Songs. New sessions are saved as
.ryolune..onderafiles open unchanged, keep their
name when you save them again, and show up in the Open dialog next to new ones. - Settings, presets, recovery snapshots and the plugin cache move from the old data folder
(~/Library/Application Support/Onderaon macOS,%APPDATA%\Onderaon Windows,
~/.config/onderaon Linux) to theryoluneone the first time the app starts. If the
move is not possible, the old folder is used where it is. - Native plugins built with the Ondera SDK load as before: hosts look for the
ryolune_plugin_entrysymbols first and the formerondera_plugin_entryones after, and
plugins built withryolune-pluginexport both names so older hosts load them too. Plugin
folders under the old name (Plug-Ins/Ondera,Ondera/Plugins,lib/ondera/plugins) are
still scanned. - Scripts and MCP clients: the executables are
ryolune,ryolune-cliandryolune-mcp,
the environment variablesRYOLUNE_*(RYOLUNE_DATA_DIR,RYOLUNE_CONTROL,
RYOLUNE_NO_UPDATE, ...) and the MCP server nameryolune. Re-add the server:
claude mcp add ryolune -- /Applications/ryolune.app/Contents/MacOS/ryolune-mcp --live. - Updating from Ondera 0.10 or older: those versions look for releases under the old
name and cannot install this one themselves. Download ryolune once from the site or the
release page; it updates itself from then on.
Opens on a Mac without a warning
- macOS builds are signed with a Developer ID, run under the hardened runtime and are notarized
by Apple, with the ticket stapled. Gatekeeper opens them like any other app: no more System
Settings > Privacy & Security > Open Anyway. Microphone recording and third-party CLAP, VST3
and Audio Unit plugins keep working (the entitlements are indesktop/ryolune.entitlements). - Updating from 0.10.0 or older through Help > Check for updates… installs the notarized app;
the updater's checks (Ed25519 checksums, download host,codesign --verify, binary versions)
are unchanged.
Pay what you want, once
- ryolune stays free and MIT licensed, with nothing locked. Help > Support ryolune… and Settings >
About > Support ryolune… open the page where you can pay what you want for it, one time: no
subscription, no account. - The window asks once, after your third export, and never again. It counts exports in
settings.jsononly (general.exportsCompleted,general.supportAsked); nothing is sent. app.openGuide guide=supportopens the same page from the CLI, MCP clients and the agent.
Project
CLA.md,CONTRIBUTING.mdand a pull request template for contributors.- The README now leads with AI control and its limits are up to date.
Ondera 0.10.0
Ondera 0.10.0
Tempo changes inside a song
- A song can change tempo anywhere after its start, at once or by a ramp (a ritardando or an
accelerando that glides from the tempo before, linear in beats). - The tempo track (View > Tempo Track,
⇧T) sits under the ruler: click to add a change,
drag a point to move it or change its tempo (⇧for tenths of a BPM,⌥off the grid),
double-click to type one, right-click to make it ramp or delete it. - The transport display shows the tempo at the playhead, and dragging or typing it edits the
tempo in force there. The SMPTE clock follows the changes. - Notes, regions, markers and automation keep their bars and beats: only the speed changes.
Audio regions keep their bars too and play their audio at its own speed through every change,
their fades included. - Playback, the metronome, the count-in, exports, bounces, stems and plugins' transport follow
the tempo map; audio regions placed from the browser or recorded cover the bars their seconds
take at that point of the song. - MIDI files carry tempo changes both ways: export writes every change (a ramp as a step each
sixteenth note, each as long as that stretch of the ramp) and import with the file's tempo
follows the file's changes. - New commands:
tempo.list,tempo.set,tempo.move,tempo.remove,tempo.clear;
transport.locatereports the tempo and the time in seconds at the playhead;
session.overviewlists the changes. - Songs that keep one tempo read and write exactly as before.
Buses: groups and aux returns
- Track > Add bus makes a bus track. It holds no regions and sums what reaches it through
its own inserts, fader, pan, mute and solo, then goes to the Stereo Out. - Groups: the inspector's Output menu routes a track to a bus; right-click a track and
choose Route Track to a New Bus to make one in a click. - Aux returns: click a send's name to point it at a bus, or add one with + Send. A track
has up to four sends; the first two feed A · Reverb and B · Delay until pointed elsewhere. - Buses feed the Stereo Out, A and B, never another bus, so the mix cannot loop. Removing a bus
sends its tracks back to the Stereo Out, in one undo step with the removal. - Solo on a bus keeps the tracks that feed it audible; solo on a track keeps its bus.
- Plugin delay compensation works in stages (tracks, buses, A and B, master), so a latent plugin
on a bus stays on the same sample as everything else. - Stems follow the routing: a track's stem goes through its bus when effects are included, and
a bus's stem is everything routed to it. - New commands:
track.add kind=bus,track.setOutput,strip.setSend,track.group;
track.list,strip.getandsession.overviewshow outputs, inputs and send targets, and
the overview flags a track whose bus is muted.
Plugins and MIDI
strip.programsreports the Audio Unit factory preset in use, including after the song is
reopened.- Reading an Audio Unit's factory presets no longer leaks the list each time (Apple's
documentation makes the host its owner); loading one keeps the preset's name alive while it is
set. Tried on Apple's units, Serum 2, Auto-Tune Access and Omnivox. - The browser's row menu loads a plugin installed in several formats as any of them (Load as
VST3, Insert as Audio Unit); the row itself still loads CLAP, then VST3, then AU. session.importMidi keepChannels=truekeeps one track per track of the file, every note and
controller on its own channel, for a multitimbral instrument.- Polyphonic pressure is sent again to notes a locate starts, keys without a note let go of it,
and stop returns every pressed key to zero. It reaches the instrument after the note it
presses on.
Known limits
- Time signature changes inside a song, time stretching and comping are not built yet. Buses do
not feed other buses. - The tempo track, buses and the new plugin commands were checked in the real window and by
tests; playback through speakers, a real interface and a MIDI keyboard was not tried. - Monitoring and the count-in have still not been tried with an audio interface.
Ondera 0.9.0
Ondera 0.9.0
AI control of everything
- Everything a person can do in the window is a command the built-in agent,
ondera-cliand MCP
clients can call: an audit of 213 window interactions found 184 already covered, closed 17
gaps and left 12 deliberately with the person (signing in, agent permissions, pure layout).
docs/AGENT_PARITY.mdlists them, and a test fails when a new window action has no command. session.overview: the whole song in one bounded answer, including what keeps a track silent,
the parameters changed on every plugin and, in the app, what the window shows. The built-in
agent reads a compact one at every turn; MCP offers it asondera://session/overview.ui.state: open panels and dialogs, plugin windows, the editor, zoom, tool, selection, theme.- Names work wherever ids do (
--trackId Bass), and a wrong name lists what exists and the
closest match. - External plugins, fully: load any CLAP, VST3 or Audio Unit by name into the first free slot;
list every parameter with its display text, range, 0–1 position and automation lane, search
them by name, set them as a number, a position or display text ("-4.5 dB", "Hall"); load the
plugin's own factory programs (strip.programs,strip.setProgram: VST3 program lists and
Audio Unit factory presets); remove an insert (strip.removeInsert); automate a parameter by
name. plugin.listfinds plugins by what they do ("reverb", "compressor", "saturation") as well as
by name and vendor, best match first.- A number given as text (
value="-6 dB") is refused with a pointer totext. - Automation lanes are named after what they drive ("Drums · Pro-Q 3 · Band 1 Gain").
- Screenshots show the window settled: a panel opened in a window behind others was captured
transparent, with button labels half faded. - A command issued right after a program change, an undo or a new song no longer reads the
plugin's previous state (or another song's plugin under a reused key). - 182 commands.
Six themes
- Three new themes, each in dark and light: Console (a warm analogue desk: walnut, brass
keys, amber meters), Ink (paper and ink, flat and square, one red accent, selection shown
reversed) and Neon (violet glass lit from inside, magenta and cyan). Every one of the twelve
variants passes the contrast checks.
Sound
- Stock instruments leave 6 dB of headroom. At unity gain the Four Floor loop used to peak at
+3 dBFS on its own and a five-note chord clipped on every stock instrument; the loops now sit
between −26 and −3 dBFS. Songs made with earlier versions play 6 dB quieter on stock
instruments, with the balance between them unchanged: raise the master or the faders if you
mixed hot. - Stock effects glide to a new parameter value in about 10 ms, so moving a dial and fast
automation no longer click or step every 32 samples. A freshly loaded effect starts on its
values instead of gliding from its defaults. - Changing a region's gain or fade while it plays glides instead of clicking.
- A new song plays at once: Drums on the Drum Machine, Bass on Analog Bass, and an audio track,
Vocals, to record into (it used to open with a silent audio Drums track).
MIDI
- Controllers, pitch bend and pressure also reach insert effects that accept events (native
ABI 2 effects, CLAP effects with a note port, VST3 effects with an event bus, AU music effects). - Notes and controllers keep their MIDI channel, live, in takes, in regions and in MIDI files.
- Polyphonic aftertouch is recorded and played back.
- A VST3 plugin's window follows parameters moved by mapped controllers.
Plugins and files
- One browser row per plugin across formats: a plugin installed as CLAP, VST3 and AU is one row
(a 2,244-plugin library now shows 875 rows). The row loads CLAP, then VST3, then AU. - Undone audio imports no longer count toward the 1 GiB import budget.
session.importMidi importTempo=truekeeps automation on its bars when it changes the meter.- Short Ogg Vorbis files import at their exact length (they ran a few milliseconds long).
Interface
- At the 1120 px minimum width with the agent panel open, the side panels give way so the
arrangement keeps its lanes (it was about 60 px wide). The agent tabs shorten, the inspector
stacks its sends, the browser tabs no longer run into each other and the transport no longer
clips the Agent button. - The playhead's position bubble sits above the marker flags, so it never hides a section name.
- The agent conversation keeps each message's state when older ones are trimmed.
- Rhythm Lab's Preview works again, the Stop Agent menu item enables while the agent runs, the
Mix menu's device items open Settings at Audio, and note tools are disabled on audio regions.
Documentation
- A new README, a user guide (
docs/USER_GUIDE.md), a guide to AI control
(docs/AI_CONTROL.md) and a developer guide (docs/DEVELOPMENT.md). - A keyboard shortcut list generated from the app's action table (
docs/SHORTCUTS.md) and a
command reference generated from the registry (docs/COMMANDS.md); tests fail when either is
out of date.
Site
- One look instead of a theme switcher, redesigned: numbered sections, a spec-sheet feature
grid, a release timeline, scroll reveals, a scroll-progress line and a gallery of the six app
themes in dark and light from real screenshots. All motion respects reduced motion, and the
page still makes no third-party requests.
Known limits
- The Audio Unit factory presets and plugin search were tried on the Mac's real library;
VST3 program lists, controller routing to inserts, MIDI channels and poly aftertouch are
covered by tests only, not yet by a real keyboard and third-party plugins. - CLAP preset discovery and presets a plugin only shows inside its own window are not reachable
from commands. - Monitoring and the count-in have still not been tried with an audio interface.
Ondera 0.8.0
Ondera 0.8.0
Recording
- Input monitoring: hear the microphone through the track's inserts, sends and fader. The button
beside Arm cycles Off, Auto (while armed, until the track plays its own clip, and again while
recording) and On; also in the mixer, the inspector, the Track menu and onI. - One input stream serves the meter, monitoring and the take, so what you hear no longer drops out
when a take starts, and the meter keeps moving through the count-in. - The built-in microphone into the built-in speakers would howl, so that pairing stays muted
until you choose Monitor Anyway. Headphones are not affected. - Settings > Audio > Buffer Frames sets the device buffer (64 to 2048).
audio.statusreports the
measured input and output buffers, the frames waiting between them and the resulting latency. - The status line shows "Count-in…" during the count and lets go of a finished MIDI take.
MIDI controllers
- Your keyboard's mod wheel, pitch bend, sustain pedal, expression and other controllers play the
instrument live and are recorded into MIDI takes. - MIDI regions keep them: they play back on the exact sample, pick up the right values when you
start in the middle of a region, and never leave a note bent or held after Stop or at the end of
a region. - Controller lane under the piano roll (View > Controller Lane,
L): pick Mod Wheel, Expression,
Sustain, Pitch Bend, Pressure, Volume, Pan, Breath or any CC, then click to add a point, drag to
move it, draw a curve, and Option-click or right-click to delete. - Built-in instruments answer pitch bend (±2 semitones), the mod wheel and pressure (vibrato) and
the sustain pedal. CLAP, VST3 and Audio Unit instruments receive controllers too. - Split, trim, duplicate, paste and reverse keep controllers in step; MIDI files import and export
them.
Arrangement
- Audio regions fade in and out: drag the handles at a region's top corners, or type the lengths
in the inspector. Equal power, linear or exponential curves. - Region gain from −60 to +24 dB in the inspector; the waveform shows what you will hear.
- Splitting, trimming and copying a region keep its fades sensible. Exports and stems play them
exactly as the window does. - Markers name the song's sections on the ruler. ⇧M adds one at the playhead, ⇧B and ⇧N jump
between them, ⇧C loops the section you are in. Drag a marker to move it, double-click it to
rename it, right-click it for more. - Plugin automation lands on its sample: a breakpoint in the middle of a buffer takes effect on
that sample, and ramps are sent every 32 samples, for CLAP, VST3, native and stock plugins.
Audio Units and older native plugins are processed in short slices so they follow too. - Changing the time signature keeps automation on its bars.
Files
- Ogg Vorbis export for mixes and stems, with a quality setting from Small (about 96 kbit/s) to
Maximum (about 500 kbit/s), High (about 192 kbit/s) by default. The file carries the song's
title, and the report shows the bitrate. - FLAC export, 16 and 24-bit, for mixes and stems. It streams: a twenty-minute song grows the
heap by about 2 MiB. Stems take the chosen file type instead of always being WAV. - A mix path with an extension Ondera does not write (
.mp3) is refused instead of quietly
holding WAV. There is still no MP3 export: no MP3 encoder fits the licence and the build. - Audio import skips damaged frames instead of refusing the file, trims the MP3/AAC lead-in,
reads the sound of video files and names the file in its errors. - File > Import MIDI and Export MIDI work in the window. Saved songs and exports keep normal file
permissions and write through symlinks.
Plugins
- Native plugin ABI 2: controllers, pitch bend and pressure, parameter changes on their sample,
state of the plugin's own, a tail length and latency-change notices. ABI 1 plugins keep loading
and new plugins still load in older Ondera versions. ThePlugintrait is source-compatible. - One browser row per plugin instead of one per channel layout ("(m)", "(s)", "(m->s)", and the
VST3 "Mono" / "Stereo"); the row loads the layout a stereo track wants. - Plugins land in the folder their name describes, and every format of one plugin shares a folder:
Other Effects is empty on a library of about 2,250 plugins.
CLI, MCP and agent
- 177 commands. New:
controller.list,controller.add,controller.update,
controller.remove,controller.setPoints,marker.list,marker.add,marker.rename,
marker.move,marker.setColor,marker.remove,marker.goto,marker.next,
marker.previous,marker.cycleSection,clip.setFades,clip.setGain,track.setMonitor,
audio.allowSpeakerMonitoring,view.fit,clip.copy,clip.cut,clip.paste,
agent.models,agent.connection,rhythm.preview,app.openGuide.transport.locatetakes
amarkerId;session.exportAudioandsession.exportStemstakequalityfor Ogg;
ui.showPanelcovers the command palette and the controller lane. - The clipboard is shared: copy in the window, paste from the CLI, or the other way round.
- The agent's Changes list shows only edits from the agent, the CLI or MCP, and
session.batch
is one entry there, as it is one undo step.
Fixes
- Musical typing works on any keyboard layout; ⌥ shortcuts work on macOS.
- Relaunch works without an update; update checks give up after a minute and clean up abandoned
downloads. - A broken
settings.jsonis kept assettings.json.invalidinstead of being replaced, so API
keys are not lost. - Bypassing an insert from a script no longer empties the slot; a failed batch no longer empties
Redo; two tracks loaded from one file no longer share a plugin; names count characters, not
bytes; presets whose names map to one file no longer overwrite each other. - A tiny region no longer stops the arrangement painting; the grid follows 3/4 and other meters;
3-, 5- and 7-channel files keep their centre in both ears. - About thirty smaller fixes to undo steps, menus, context menus, error messages, the plugin
window, forms, renames with an input method and quick double presses of Space.
Site
- A "What's new" section and a changelog of every release, markers, fades and monitoring in the
interactive preview, readable text in every theme, a section menu on phones, and fonts served
by the site itself so the page makes no third-party requests.
Known limits
- Monitoring, the shared input stream and the count-in are covered by tests that drive the input
callback directly; they have not yet been tried with an audio interface. - Two interfaces on different clocks drift: expect an occasional tick (counted in
audio.status). - Controllers reach a track's instrument, not its insert effects, on MIDI channel 1; polyphonic
aftertouch is not recorded. CLAP instruments that only speak CLAP notes get no controllers. - Stock effects do not smooth their parameters, so a fast automation ramp moves in 32-sample steps.
Ondera 0.7.0
Ondera 0.7.0
Recording
- Count-in before a take (Settings > Audio > Count In Bars, default one bar). The song stays parked
while the click runs and starts on the sample; the microphone opens during the count, so the
start of a take is no longer lost. - Microphone level meter on armed audio tracks, before and during a take.
Plugins
- The browser files every plugin (stock, native, CLAP, VST3, AU) in colour-coded sound folders, with
Favourites, Recent, a star on each row and right-click re-filing, including folders of your own. - Ten new stock plugins: Tonewheel Organ, String Ensemble, Analog Bass, Flanger, Auto Pan,
Auto Filter, De-Esser, Lo-Fi, Pitch Shift and Pump. Stock front panels wear their family colour. - Native Rust plugins: panics are contained instead of aborting the app,
ondera_plugin::testing::Bench
tests a plugin through the real ABI,plugin.scaffoldstarts a new plugin crate and
plugin.installinstalls a built one. ABI stays at 1.
Files
- Imports AIFC, CAF, MP2, M4B/MP4, OGA, MKA/MKV/WebM as well; surround files are downmixed to
stereo; a MIDI file can be dropped on the window. Exports AIFF (16/24-bit) as well as WAV.
CLI, MCP and agent
- 150 commands. New:
session.batch(many commands, one request, one undo step, atomic),
clip.trim,clip.deselect,source.peaks,transport.punch,note.hold,note.releaseAll,
app.confirm,app.relaunch,session.saveRecoveredTake,ui.closePluginWindow,
ui.dismissError,agent.changes,agent.revert,plugin.folders,plugin.setFavorite,
plugin.setFolder,plugin.scaffold,plugin.install.ui.statusreports pending prompts. - Control requests are answered between window ticks: about 0.75 ms each instead of up to 33 ms.
- Agent panel: what the agent did in plain words, the selection sent as context, and Ask Agent
About Selection (Shift-Cmd-J and the region, lane and track menus).
Interface and performance
- Per-theme motion for menus, dialogs, panels and controls; respects reduced motion.
- Fader and dial drags send only their newest value and fetch one snapshot; waveforms draw from a
max-pyramid; meters re-render only when a segment changes; the idle window no longer
re-serialises the agent transcript ten times a second.
Known limits
- No input monitoring yet: you cannot hear the microphone through Ondera while recording.
- The count-in and input meter were verified in the live window with MIDI; record one real
microphone take after installing to confirm them on your interface. - Export is WAV and AIFF. FLAC and MP3 are not built.
- Native Rust plugins still persist parameters only, and receive note on/off only (ABI 1).
- A few window actions have no command yet: see
docs/NEXT_SESSION.md.
Ondera 0.6.0
Ondera 0.6.0
Three themes, each in dark and light
Settings > Interface now shows three themes as live miniatures, with a Dark / Light / Auto
switch beside them (Auto follows the system while the window is open):
- Modern. Flat and quiet. Depth comes from a five-step lightness ladder and one-pixel lines;
one cool neutral, one accent; only things that float above the window cast a shadow. - Skeuomorphic. The milled hardware of the design sheet. Dark is the graphite unit, value for
value; light is the same unit in champagne aluminium, with displays and meters kept as smoked
glass the way real gear does it. The material recipes are re-lit, not redrawn: on a pale face
highlights start high and rise slowly, and shade uses well under half the dark-theme alpha. - Frutiger Aero. Glass, water and sky. Every raised control is a lens with a bright upper
reflection, a hard waist and a luminous lower rim; the frame is daylight by day and an aurora
by night, while lanes, lists and the conversation stay opaque so content never competes with
the chrome.
The two earlier appearances were produced by rewriting colour strings at run time. They are
replaced by a theme layer (frontend/src/theme): a theme is a function of the mode that returns
every colour, gradient, shadow, line, radius and canvas shadow, and the canvases read the live
groups at paint time. Each theme is computed from one neutral ramp in OKLCH plus one accent, and
tests check, for all six variants, that text holds 7:1 on every reading surface (4.5:1 for
secondary text, 3.6:1 for caps labels), that the accent and its label stay legible, that clip
names read on the lightest and darkest track colours, and that the surface ladder keeps its order.
interface.appearance is now modern, skeuo or aero, and interface.mode is dark, light
or auto. Older settings files are migrated on load: graphite becomes Skeuomorphic dark, and
aero without a mode stays the light glass it was.
Stock plugin front panels
The 24 stock plugins no longer open as a list of sliders. Each has a front panel: a nameplate
with its category and presets, a display, one dial per continuous parameter with a value ring
(filling from the centre when the range straddles zero, logarithmic where the plugin says so)
and a selector or switch per choice. Hover a dial for its automation button; double-click resets,
Shift drags finely.
The display draws what the plugin is doing, from the same maths as the audio: the Channel EQ uses
the engine's RBJ shelves and peak, the Filter the state-variable filter's damping, the compressor,
gate and limiter their transfer curves, the saturators their waveshaper, the bitcrusher a crushed
sine, the modulators their LFO (with the stereo offset), Echo its taps, Space its decay, Width and
Utility the stereo field, Transient the reshaped hit, and the instruments their envelope. External
plugins keep the parameter list and their own window.
Site
The site wears the app's tokens, generated from the same theme layer, so it offers the same three
themes in dark and light: a switcher in the navigation, a Themes section whose cards each render
in their own theme, and an interactive preview and hardware rack that follow the choice. The
captures of the real window were retaken, and the server now gzips text.
Fixes
- Caps labels on raised menus fell under 3.6:1 in the graphite theme; the label ink is a few steps
lighter. - A flat theme has no canvas shadow layers, and the playhead and position bubble were painted only
once per layer; they are painted once when there are none. - Buttons inside dialogs overrode the material of toggles and segmented controls.
- Dialog borders, the command palette, mixer strips and a few inspector details used fixed colours.
Development
npm --prefix frontend run dev now works in a plain browser: without the Tauri bridge a
development-only host serves a fixed song, so layouts and themes can be checked with
?theme=modern|skeuo|aero&mode=dark|light&panel=mixer|settings|plugin:<name>. It is not part of
production builds.
Validation and limits
Local macOS validation: frontend type check and 91 frontend tests (theme contrast and round trip,
plugin display maths), cargo fmt, Clippy with warnings denied, the workspace tests, and a debug
build driven through the CLI: all six variants, the mixer, the Settings theme picker and a stock
plugin panel were captured from the real window with ui.screenshot after switching through
settings.set. Windows and Linux were not checked by hand; Frutiger Aero falls back from Segoe UI
to Lucida Grande, Trebuchet MS and Manrope depending on the platform.
Still not built: clip fades and gain, time stretching, comping, tempo changes inside a song and
user-defined buses. The egui reference interface in desktop/ does not follow the themes. Packages
remain ad-hoc signed without notarization; Windows binaries remain unsigned.
Ondera 0.5.0
Ondera 0.5.0
Mixer
Press X, choose View > Mixer, or call ui.showPanel --panel mixer to swap the region editor
for a mixer: one strip per track with pan, fader, mute, solo, record arm, insert count and a
live post-fader meter, plus the master. The engine now publishes a peak for each of the first
32 channels from the audio callback (fixed-size atomics, no allocation); later tracks still play
but read as silent in the mixer. The strips dispatch the same commands as the inspector and the
track headers, so every move is undoable.
Faster editing
- Command palette (
⌘P/Ctrl P): every menu command and every action, searchable by name,
with its shortcut, enabled state and tick. It is built from the menus and the action table,
so it cannot list something the menus would not do. - Copy, cut and paste regions (
⌘C,⌘X,⌘V). Paste lands at the snapped playhead on the
selected track when its kind matches, otherwise on the region's own track, in one undo step. - Duplicate a track with its strip and regions (
⇧⌘D, Track menu, track context menu). - Transpose the selected note or region with
⌥↑/⌥↓, and by octaves with⇧⌥↑/⇧⌥↓. - Drop WAV, AIFF, FLAC, MP3, Ogg or AAC files from the file manager onto the window to import
them. Double-clicking a file in the browser's Files tab places it at the playhead. - The Track menu gains mute, solo, arm and delete; the snap grid goes down to 1/64.
- Help > Shortcuts and Help (
⌘/) is generated from the action table instead of hand-written.
Fixes
- The Files tab promised "double-click: open or import" and did nothing.
- The grid tool was advertised on key
4but is not a host tool; it is removed. - The Agent menu's "Stop" is now "Stop agent", so it no longer reads like the transport's Stop.
Site
The site leads with what a musician can do, shows captures of the real window, lists what comes
with you when switching and what is not built yet, answers common questions, and offers a direct
download for the visitor's platform (/download, /download/<platform> redirect to the latest
release asset). The server adds a content security policy and the usual security headers.
Validation and limits
Local macOS validation: frontend type check and 54 frontend tests, cargo fmt, Clippy with
warnings denied, the workspace tests, and a debug build driven through the CLI: the mixer was
opened with ui.showPanel, the demo played, and a capture of the real window showed per-track
meters moving. The command palette, clipboard, transposition and file drop are covered by unit
tests and type checks; they were not driven by hand in the packaged app on Windows or Linux.
Still not built: clip fades and gain, time stretching, comping, tempo changes inside a song and
user-defined buses. Packages remain ad-hoc signed without notarization; Windows binaries remain
unsigned.
Ondera 0.4.0
Ondera 0.4.0
Tauri desktop interface
Ondera now opens in a Tauri 2 window with a React/TypeScript renderer, using the existing
interface as its visual reference: transport, browser, arrangement, MIDI editor, inspector,
plugin controls and agent panel. This release changes the rendering technology; audio
processing, project state, undo history, recording, export and plugin hosting remain in Rust.
The interface uses the same command registry as the CLI, MCP and built-in agents. It displays
real decoded waveform peaks and receives bounded transport updates. Project snapshots omit
plugin state blobs, and stale snapshots are ignored. Packaged applications embed the frontend
and do not need Node.js or a development server.
Desktop behavior
- Native file dialogs and unsaved-change confirmation, including quitting from the macOS menu.
- Connected track and region editing, piano roll, instrument and effect controls, sends,
automation, settings, recovery, audio export and agent history. - Musical typing releases held notes when the window loses focus; pointer gestures share one
undo step. Space controls transport after interacting with toolbar buttons. - macOS screenshots use the WebView's native snapshot API, including canvas content.
- Existing
.onderaprojects and Rust CLI/MCP workflows remain supported.
Installation and requirements
Use the macOS archive matching your processor, or the Windows/Linux portable archive.
The portable archives include ondera, ondera-cli and ondera-mcp.
- macOS uses the system WebKit runtime.
- Windows requires Microsoft Edge WebView2 Runtime.
- Linux requires WebKitGTK 4.1 and the native audio/window libraries documented in the README.
Download checksums are signed with the existing release key and verified by the updater.
macOS bundles remain ad-hoc signed without notarization; Windows binaries remain unsigned.
Validation and limits
Local macOS validation covered 193 Rust tests, 10 frontend tests, Clippy, the optimized build
and packaging. The complete composition/save/reopen/MIDI/WAV/stems workflow also passed
through CLI and MCP against a running Tauri window with the development server stopped.
The release workflow requires the platform checks, tests, optimized build and song workflow
on macOS ARM64, macOS Intel, Linux and Windows before publishing.
A complete manual comparison of every interface gesture and dialog is still pending.
Windows/Linux graphical behavior and the non-macOS screenshot fallback have not been
manually verified. No numerical performance gain or loss is claimed. The former egui painting
code remains as migration reference but is not used to render the Tauri window.
Ondera 0.3.1
Ondera 0.3.1
Follows 0.3.0 (the Claude Design window frame) a few hours later with everything below.
The fourth way to control Ondera
- Built-in agent. The Agent panel is now a conversation, drawn like a coding agent's
harness without the code: your prompts, the assistant's replies as they stream, one card per
tool call with its arguments and result, and a Revert button on every edit. Choose the brain
in Settings > Agent: the Codex CLI or Claude Code CLI with their own sign-in, the Anthropic or
OpenAI API with a key, or any OpenAI-compatible endpoint (local models included). Every
provider uses the same command registry asondera-cli, so nothing an agent does is special. - Agent permissions. File operations, transport, replacing the session, changing settings
and application control are switches; they apply to the panel, MCP clients and--agent.
Settings
- A Settings window (⌘,) with General, Audio & MIDI, Interface, Agent, Plugins, Control, Updates
and About. Changes apply at once and are stored insettings.json, readable only by you.
settings.get/settings.setexpose the same document to the CLI, MCP and agents. - Audio devices and the MIDI port persist across launches; interface scale, recovery interval,
reopen-last-session, plugin folders, the local bridge and update behaviour are all settings.
Ondera native plugins
ondera-plugin, a Rust SDK with aPlugintrait, DSP primitives and a frozen C ABI generated
byexport_plugins!. Build acdylib, drop it in a plugin folder, rescan. See
docs/NATIVE_PLUGINS.md.- All 24 stock plugins are rewritten on the SDK and loaded through the same vtables as
third-party libraries, so the plugin path is exercised on every run. Sessions load unchanged. - Factory presets for the stock library, user presets for any plugin, from the plugin window or
preset.*commands.
Full parity for the CLI and MCP
- New commands:
view.get/set,clip.quantize,clip.transpose,track.duplicate,
strip.moveInsert,plugin.describe,preset.*,settings.*,audio.*,note.preview,
ui.screenshot(agents can see the window),ui.showPanel,ui.openPluginWindow,
ui.musicalTyping,ui.setTool,ui.status,app.info/checkUpdates/installUpdate/quit,
session.snapshots/restoreSnapshotandagent.*.history.undotakessteps. ondera-cli batchruns JSON lines from stdin;ondera-cli doctorchecks the bridge,
versions, companions, settings and plugin cache;commands --jsonprints the schema.ondera-mcpserves prompts (compose,mix-review,see-the-window) and resources for
settings, plugins, presets and the app, with honest destructive hints.
Hardening
- Releases are signed:
SHA256SUMS.sig(Ed25519) is verified against the key built into the
app before anything is downloaded. Downloads must come from this repository's releases, and
the fresh macOS bundle must report the expected version before it replaces the installed copy. - Agent CLIs run in their own process group with a read-only sandbox and only this window's
tools; API keys never appear in argv or logs; settings redact secrets.
Interface
- Faceplates with screws behind plugin, settings, automation, export and recovery windows;
brushed bars; LED buttons; knob tick rings; glossy clips; ivory and lacquered piano keys;
frosted dialogs.
Limits carried over from 0.2.0 and 0.3.0 still apply. macOS packages remain ad-hoc signed
without notarization; Windows packages are unsigned.
See 0.3.0 notes,
the agent,
native plugins and
verification.
Ondera 0.3.0
Ondera 0.3.0
The window now matches the Claude Design arrangement frame (design/Ondera Arrangement.dc.html),
and the agent tab is the design's simple right-hand panel.
- Agent panel: a 380 px panel at the right edge (32 px rail when closed) with a header, the
current-action card while Codex works, the log of changes this session and one prompt with
⌘↵ to send. Every command from Codex, an MCP client orondera-clilands in the log with its
CLI spelling and a Revert or Redo button that walks the undo stack; reverted entries show
struck through. Sending a prompt starts the local bridge if it is off. - Agent menu: the title bar gains an Agent menu holding show/hide, Stop task, the local
bridge toggle, Copy MCP config, Copy CLI check and the Codex CLI executable and model. The
former command workbench is gone; the CLI and MCP tools cover it. - Window chrome: menus follow the design (File Edit Track Mix Agent View Help). On macOS the
native title bar is hidden so the traffic lights sit in Ondera's own bar, which drags the window
and zooms on double-click. The transport gains the Agent button; the browser drops the
Library/Agents switch and names its third tab Plugins. - Piano roll: the header matches the design; the grid scrolls octaves with the wheel and zooms
time with pinch or ⌘-wheel, replacing the Low and Zoom sliders.
Everything else is unchanged from 0.2.0, including its documented limits. macOS packages remain
ad-hoc signed without notarization; Windows packages are unsigned.
See 0.2.0 notes,
plugin details and
verification.