Nebula 0.3.0-alpha.279: the plug-in browser, the NOTES view, and a jitter bound
2026-11-03Three units landed together in 0.3.0-alpha.279 (3 November 2026). No new engine this time: the release finishes the plug-in story and wires up something that had been sitting unbuilt in the source.
The plug-in browser: hosting is now usable end to end
Discovery, scanning and hosting CLAP plug-ins were built and tested in 0.3.0-alpha.278 — and nothing in the window could reach them. The browser's fifth tab (PLUG-INS) closes that.
- The scan runs on its own thread. Opening a foreign shared library is slow and a broken one can wedge, so the button waits, not the window. (A documentation run takes a synchronous branch; both branches call one implementation, so they cannot drift.)
- The list is the plug-in's own description of itself — name, vendor, version, description and its CLAP feature strings.
- Every file the scan could not use is listed first, in full, with the scanner's reason. A plug-in file that cannot be loaded is exactly the thing that must not be invisible.
- ADD builds the plug-in before the device exists. A file that cannot be hosted (missing, the wrong id, four channels, no audio ports, a fault while it was asked), or a target that cannot host one (a group, a return, the master), is refused in the plug-in's own sentence and nothing is added — rather than a chain entry that plays silence and fails the whole render later.
- One undo step each way. ADD and REMOVE each execute a single command, and undoing an ADD brings the plug-in back with its knobs.
- The card's knobs are the plug-in's own parameters, keyed by its own parameter id. Their values are read back from the loaded instance rather than trusted from memory, with the project's stored values laid over them — so a hand-turned knob still wins and still travels in the
.nebproj.
Fixed in the same pass: the sidebar could no longer fit five tabs and drew them in a row, so the fifth was present, laid out and impossible to click. A wrapping row replaces it.
VST3 is still not supported, and cannot be. Its SDK is dual-licensed GPLv3-or-Steinberg-proprietary and Nebula ships under the Functional Source License; CLAP (MIT) is the supported format. The plug-in browser says so in the panel itself.
The piano roll is the instrument screen's NOTES view
app/PianoRoll.qml had been in the build since the full-screen PIANO tab was removed: compiled, shipped, and instantiated by nothing. It is a complete note editor — add and remove by click, drag to move, drag the right edge to stretch, right-click for velocity, Shift+right-click for probability, audition through the instrument, Quantize, Fold, a grid picker, a length picker — calling methods that already existed, so it was wired in rather than deleted. It now sits beside the step grid on the instrument screen as the NOTES view, and both surfaces edit the same clip.
Wiring it up found a real defect: a one-pixel rule inside a layout is undefined behaviour in Qt and logs a layout error the packaging sweep treats as a failure. It had never fired, because the file had never been built at run time. The sweep now covers the view.
A test bound that was measuring the machine
Housekeeping, said plainly: the MIDI drain-interval test asserted a maximum bound that a system which is not a real-time OS cannot honour — one stalled tick out of about 600 waited 9.674 ms while the mean stayed 0.570 ms. The bound is now split into the quantities that can be defended: the mean tightly (below one drain period), the 90th percentile as well, and the maximum only as an outlier guard. It was fault-planted before it was trusted — the first version of the bound survived a deliberately broken setting, so it was tightened — and 26 further runs were green.
Also in this release
Six files are published on the project page: a Windows installer (18.9 MB) and portable .zip (24.7 MB), and for Linux a .deb (34.8 MB), .rpm (31.4 MB), .AppImage (43.8 MB) and portable .tar.gz (47.8 MB). Each one is a real build of this release and the page shows its SHA-256.
Honest limits, unchanged
A plug-in's own editor window is never shown — its parameters appear as ordinary knobs in Nebula's own interface. There is no persistent plug-in blacklist: a file that cannot be loaded is reported on every scan and nothing is remembered between runs. Plug-in loading is in-process, with the fault guard covering the setup calls only. No real MIDI hardware was attached while this release was built, and macOS remains unverified.