Appearance
Changelog
Release history for MNodes installers, auto-generated from the releases admin panel.
v1.0.1 (2026-08-03) · macOS + Windows
MNodes 1.0.1
NEW
New node: Flanger -> the jet-plane whoosh, the one classic modulation effect MNodes did not have: a very short delay swept by an LFO and fed back into itself, stereo, with every control on a CV input. Manual sets where the sweep starts and decides the character, Depth how far it travels, Rate how fast. Feedback goes both ways, positive sharpens the peaks and negative gives the hollow drainpipe version, soft-clipped so the extremes never run away. Stereo Spread offsets the LFO between the two sides. It is not built on the Chorus engine: a flanger lives below a millisecond of delay, so it has its own delay line read with a 4-point interpolator, which is what keeps a fast sweep from dulling the top end. Forum request!
New node: Pitch Detector -> follows the pitch of a monophonic input and reports it four ways at once, all of them CV: Hz, Note as a MIDI note number with decimals so a slide stays smooth, Gate while a note is tracked, and Confidence. Min Freq and Max Freq bound the search, Threshold sets how loud the input has to be, Glide smooths the movement between notes, and Hold Last Note keeps the last reading through silences instead of dropping to zero. Mode trades latency for range. The body is a tuner and drops onto the Front Panel like any other display. Forum request!
IMPROVED
Clear on the delays -> Delay Line Mono, CV Delay Line, Delay Mono and Delay Stereo all get a Clear control, a button in the Inspector and a pin next to it. It empties whatever the node is still holding, so a runaway feedback stops dead and a minute-long tail is gone now, without touching a single setting. On the audio nodes a short fade runs first so clearing something that is sounding does not click. Forum request!
Size on the Front Panel -> every node that can be dropped on the panel now carries Size Width and Size Height in the Inspector next to Pos X and Pos Y, including the bodies that are not widgets at all and the panel nodes that had no geometry fields whatsoever. The Appearance input takes them too, so a size can be modulated like any other value. Size is locked by default, so randomising a look never resizes anything.
Copy Size / Paste Size -> right-click a widget, Copy Size, then right-click another and Paste Size to give it the same dimensions. With several widgets selected the paste applies to all of them at once, in one undo step, and a size fits any widget, so unlike Paste Appearance it is not restricted to the type it came from. Forum request!
Node search understands what things are called elsewhere -> until now a search only matched a node's own name, so "VCA" found nothing, "echo" found nothing, "ADSR" found nothing. Every node now carries a set of synonyms (the classic hardware name, what other software calls it, the plain English word), so vca reaches Volume and Sig Multiply, echo the Delays, adsr the envelopes, metro the Clock. An exact name match always stays on top.
The Additive goes from eight partials to a hundred -> a new Partials control sets how many the node stacks, and each one you add brings its own level row, its own CV input, its own level output and its own bar in the display. It opens at 8 exactly as before and the first eight keep their pin ids, so saved patches keep their partials and their cables. A partial at zero is skipped by the DSP, so the count costs screen space rather than CPU.
The Karplus-Strong can hold a note, and its Decay reaches a minute -> Decay went from a 12 second ceiling to 60, and a new Sustain control holds the string closer and closer to ringing forever, so the node plays as a drone or works as a resonator. It takes CV like everything else, so a string can ring while a pad is held. Damping now starts at 0 instead of 0.55, so a fresh string rings out with its own tone rather than arriving pre-muted.
Ctrl / Cmd + Up and Down move layers -> with the Layers palette focused, the selected layers step one slot up or down the list, the keyboard version of dragging them. It works on a multi-selection, a locked layer stays put, and a layer inside a group moves within that group rather than jumping out of it. Forum request!
Settings is one click away in the graph -> a Settings button now sits at the bottom of the left icon rail, separated by a hairline from the section icons because it opens a window rather than changing what the panel shows.
Dropping a picture on the graph can make a Film Strip -> the image-drop menu now offers Load As Widget Filmstrip, and it does not stop at creating the node: it reads the strip's layout off the image. Frames are square in almost every film strip, so the long side divided by the short one is the frame count and the long side says whether the strip runs down or across. When that does not come out to a whole number it leaves Frame Count for you to type, with the node already selected. Forum request!
Font Weight on the Button and the Toggle -> their label was drawn in SemiBold and only SemiBold, so a panel built around a lighter or heavier face had one control that refused to match. Light, Regular, Medium, SemiBold and Bold, with SemiBold as the default so nothing you already made moves. Forum request!
Handle Corner Radius on the thumb faders and the Range Slider -> the Corner Radius those widgets already had belongs to the rail and is clamped to half its thickness, so the handle itself was stuck at a fixed roundness. The new control is the handle's own, as a percentage of its short side: 0 is a square, 30 is what it always was, 50 and up is a pill. Forum request!
Label Size on the Crossover -> every readout on its body was locked to 10 pixels of the app font, which is unreadable once the node is scaled up on a front panel. Size is a control now, and the readouts follow the node's own font like every other body. Forum request!
The Transport node puts out the time signature -> two new CV outputs, Time Sig Num and Time Sig Den, alongside BPM, Position, Bar and Beat. They follow the same transport everything else does, host or internal, so a patch can react to a 3/4 or a 7/8 instead of having the numbers typed into every node by hand.
EQ Band Types joins the ComboBox Items Presets -> picking it fills the list with the Parametric EQ's band types, taken from the EQ itself rather than copied, so the labels and their order always match what the EQ expects and the ComboBox can be wired straight into a band's Type.
The File Drop's caption can be changed from an Appearance Changer -> its Label joins the list of appearance properties, so the wording on the drop target can be rewritten live from a patch, the same way the Text widget's text already could. Like the other captions it is locked by default. Forum request!
The Button and the Toggle keep their wording in Appearance -> Label Off, Label On, Tooltip and Font Weight sat in a Text section of their own, out of reach of the Appearance input, so an Appearance Changer could recolour the button but not relabel it. They are Appearance rows now, like every other look on those widgets. Forum request!
The Map node opens at 0..1 in -> In Min was -1, so the most common thing you reach for a Map to do, take a normalised 0..1 and put it somewhere else, needed a value typed in first. Saved patches carry their own values and are untouched. Forum request!
The LFO's Min and Max reach real units -> they were clamped to -10..10, so an LFO could not be pointed straight at anything measured in its own numbers: a filter sweep in Hz, a delay in milliseconds, a detune in cents all needed a Map node to get there. The limits are -20000 to 20000 now, and while dragging, Ctrl (Cmd on Mac) gives you hundredths and Shift tenths so the small end is still reachable by hand. Forum request!
Gain and Gain Stereo are now called Volume and Volume Stereo -> only the name changes: same node, same parameters, same sound. Patches already saved keep working and are renamed on load, searching for "gain" still finds them, and the Gain parameter inside keeps its name since that is what the number is.
The Wavetable's Morph is now called Position Glide -> it never morphed anything by itself, which is exactly what the old name promised: it is the time Position takes to slide to a new value, so turning it with Position sitting still does nothing at all. Only the name changes, and saved patches keep their value and their cables. The reference now documents it, along with Frame Size and Reset, which were missing. Forum request!
FIXED
Beat and Bar triggers land on the sample, not on the buffer -> the Transport node decided whether a beat had gone by once per audio block and fired the pulse at the first sample of that block, so its timing was pegged to the buffer: a few milliseconds of wobble at a small buffer, several times that at the sizes a DAW hands a plugin, which is enough to hear a steady pulse limp. That is also why one person heard it and another could not reproduce it: it is the buffer size, not the platform. Beat and Bar are now found sample by sample, and Bar, Beat and Bar Phase step with them. Forum request!
Internal transport is actually internal inside a DAW -> reading the host's playhead happens on every block whatever the transport is set to, and the last thing that read did was overwrite the internal timeline's own cursor with the host's position. So on Internal, in a plugin, the clock was pinned to the DAW's: frozen whenever the DAW transport was parked. The host position is now only borrowed while the host is the one driving. Forum request!
The Text node shows the number you send it -> wiring a knob into a Text node to read its value worked below 0.5 and then printed an unrelated string instead. MNodes keeps a table of strings that have been given a number, and the Text node was reading any incoming number as an entry in that table before treating it as a number. Numbers are now spelled out as numbers, always. The File and Pattern File nodes had the same lookup and lost it too. Forum request!
A parameter driven by CV now shows its signal instead of controls that do nothing -> while a stream feeds a hybrid input the parameter's own value is not read at all, so its slider, reset, dice and padlock were along for the ride, greyed out but still on screen next to a second line with the little scope. The row is now the name and the scope, on one line, the same height as every other row. Unplug the CV and the controls come straight back. Forum request!
A widget on the Front Panel no longer freezes when the change comes from the graph -> turning a knob in the graph moved the sound but not its copy on the panel, and the copy only caught up if you zoomed the panel in and out. For a widget inside a Subgraph or a Module the panel slot went on mirroring an object that a rebuild had already replaced. The panel now checks a few times a second and re-binds the moment it finds a mismatch. Forum request!
Pos X / Pos Y and Size Width / Size Height now work on every node -> the fields were in the Inspector but on a lot of nodes they read zero and typing into them did nothing: the Compressor, the Oscilloscope, the Meter, the Vocoder, the XY Pad, the sequencers and a couple of dozen more. Position and size live in the front panel layout, and each node had to remember to pass them down. They no longer have to: MNodes resolves those four fields before the node ever sees them, so a node added later cannot get it wrong.
Typing in MNodes no longer loses keys to the host's own shortcuts (Windows) -> naming a preset from Cubase, only a handful of keys made it into the name field and the rest triggered the host's Key Commands. A field focused from code could end up with a blinking caret while the host window still owned the keys. Every field MNodes focuses for you now claims the real keyboard focus first, and clicking a field that already has the caret claims it again.
Dragging a layer in the Layers palette now always drops where you aim -> sometimes a layer would not go beneath another one, or went missing from the list: the middle half of a row meant "put this inside that row", so the layer was filed as a child of the widget under the pointer and folded out of sight with it. Only groups take a drop inside them now; on a widget row the whole height reorders. Forum request!
A very fine Increment no longer turns into a broken zero -> typing something like 0.00001 into a widget's Increment came back as "0", because the field only showed four decimals and then wrote its own text back, so the number you typed silently became a real zero. The field now shows the value with the precision it holds. The mouse wheel also moves at least 1% of the range per notch, so a fine increment no longer makes the widget look unresponsive, and the value still lands on the increment's grid. Forum request!
A Sub In (Data/CV) now follows the cable you plug into it from outside -> sending CV into a Subgraph's Data/CV input did nothing inside, and after pulling the cable out the chain stayed dead. A Subgraph keeps its compiled interior across rebuilds so an oscillator does not restart, and the port change never reached the one place that decides how the interior runs. The interior is now checked against its own ports on every rebuild and recompiled the moment they disagree, in both directions.
Duplicating a Subgraph whose interior runs on CV no longer leaves it asleep -> the copy sat there doing nothing until you dropped a node inside it. Half of this was fixed in 0.9.992 for the audio side; the data and CV side was never rebuilt by the duplicate path. Both halves are rebuilt now, so a duplicate works the moment it appears.
The little CV displays on a node's pins no longer freeze -> each node kept sixteen capture slots handed out first come first served, so on a wide node (the Additive with its partials, or anything past sixteen pins) the rest of the mini displays never moved even though the value was arriving. The capture is now sized to the node, so a small node reserves less memory than before and a wide one gets a slot for every pin.
"Show in Graph" from a Module's front panel now travels to the node -> on a Module Front Panel the widgets live inside the module's own graph, and MNodes had no reliable route to it, so it selected the node without moving the view. It now enters the module, centres on the node and zooms in on it, and the node pulses for a moment when it arrives.
Perform mode gives the divider back where it was -> the height of the bottom area was not remembered, so a divider dragged down to give the graph room came back somewhere else on every round trip. And on a maximised or full-screen window the mode change forced a size, re-centred and nudged the window by a pixel, all of which fight the window manager. When the OS owns the window size, only the layout runs. Forum request!
Tooltips off means off, front panel widgets included -> widget tooltips were exempt from the global setting, so whoever was building the panel had tips popping up over every widget with no way to stop them, with the setting saying off. One switch, everything obeys it. Forum request!
Copy Appearance carries the label's position, and leaves its text alone -> copying a look and not getting the label in the same place gave you a copy that was visibly not the original, so the label's size and offsets travel with the look now. The label's text no longer travels: that is what the control is called, not how it looks, and pasting a look across a panel used to rename everything it touched. Forum request!
The Range Slider draws its name label, its handle image, and lines that land on the value -> the label was neither given room nor painted, the Handle Image parameters existed but the renderer never read them, and with the Line handle shape both markers were pushed out sideways by half a handle width. The hit zones moved with it, so grabbing a line handle now grabs where it looks. Forum request!
The thumb faders reach both ends of their travel -> the rail was drawn edge to edge but the handle can never get closer to either end than its own radius, so the fill stopped short at the top and bottom and the fader looked like it never quite arrived. The rail now spans exactly the distance the handle travels. Forum request!
The Crossover's curve follows CV -> its display read the stored crossover points, so with a CV stream sweeping them the sound moved and the picture sat still. It now reads what the DSP is actually using, curve, dividers and readouts alike. Forum request!
The Crossover's top readouts stop landing on each other -> the slope and the two crossover frequencies each printed where they wanted, so two crossovers close together overlapped, either of them near the slope overlapped that, and at the edges the rounded corner ate half the text. The three are placed together now, anything that will not fit drops to a second line, and the strip is inset from the corner. Forum request!
The Crossover keeps its font and its host exposure through a save -> its save and load only covered its own parameters and never chained to the widget base, so the chosen typeface and the exposed-parameter state were dropped on the way out. Forum request!
Closing MNodes no longer depends on a background scan finishing in time -> one user reported a close that left the process alive and refusing to be killed. It was never reproduced, so this is not a fix presented as one: it is the removal of the mechanism that could produce it. The library scan now walks entry by entry and can be interrupted, the audio device is shut before the rest of the teardown, and the data thread is waited for rather than killed.
MNodes now leaves a trail when a shutdown does not finish -> each phase of the close is written to a file as it happens, and the file is deleted the moment the shutdown completes, so finding one on disk means a shutdown that never ended, with its last line naming the phase it stopped at. The next launch picks it up and files it next to the crash reports. Nothing is written in normal use and there is nothing to enable.
The Save Preset panel no longer builds its form twice -> opening Save As populated the whole dialog two times over, rebuilding the category pills and re-reading the thumbnail from disk. It now populates once, after the panel is on top, and focuses the name field last.
v1.0.0 (2026-07-29) · macOS + Windows
MNodes 1.0.0
IMPROVED
- Adjustable text size on the Stereo Image -> the goniometer gains two new controls: Value Size for the correlation number and Label Size for the L / R / M axis letters. Both were fixed at a small size, which read as an afterthought once the widget was made big on a front panel. The phase bar and the space reserved for the readout now grow with the value, so a large number is never clipped or squeezed against the meter.
FIXED
The Stereo Image, Oscilloscope and Envelope Follower now redraw the moment you restyle them -> changing a colour, a size or a toggle (from the inspector, from the Appearance input, or with the randomize dice) appeared to do nothing until the display moved again. These three only repaint when fresh audio comes in, and they deliberately idle when there is none, so with the input silent (or the scope frozen) they could sit on the old look indefinitely. They now redraw as soon as a setting changes, whether or not signal is going through them.
The Stereo Image's M label no longer goes missing -> the M (mono) letter is drawn just above the scope circle, and on a body wider than it is tall the circle took the full height and pushed the label right out of the widget. The scope now keeps a band free for it at any size, so the letter is always there. The node also opens wider by default: the vectorscope is square, so the old narrow default left it small with empty space above and below it.
Front-panel tooltips now follow the widget's own colours -> a tooltip over a Button (or any other widget) was always drawn in the MNodes accent, which looked like a stray piece of the app on a panel styled any other way. It now takes the widget's own background, text and border colours, its corner radius and its font family, so it reads as part of the panel. Widgets with no solid face colour of their own keep the app default, and tooltips everywhere else in MNodes are unchanged.
The States dropdown now fills its slot exactly -> the box was drawn half a pixel inside its own bounds, leaving a thin gap all around it that read as a second border and made the widget impossible to line up with a Button widget sitting next to it. It now fills the slot edge to edge, like the buttons do. Same fix for the ComboBox widget, which is drawn the same way.
The Text Input's Send button now follows the widget's look -> the button ignored the widget's own appearance and fell back to the app's default button style, so it stayed MNodes blue no matter what Button Colour was set, kept a fixed corner and a fixed font. It is now drawn from the widget's settings: Button Colour, Corner Radius, border and Font Family / Style / Size all apply, and the text size is capped to the button height so a large Text Size still fits. Hover and pressed feedback is derived from the chosen colour, so it works on any face.
v0.9.997 (2026-07-24) · macOS + Windows
MNodes 0.9.997 (Early Access)
IMPROVED
Cleaner high notes from the basic oscillators -> the Saw, Square and Pulse oscillators are now band-limited, so they stay smooth and clean in the top octaves instead of picking up that gritty, metallic edge on high notes. The Supersaw / Unison already worked this way; Sine and Triangle are naturally clean and are unchanged. Forum request!
Node type shown under a renamed title -> in a node's inspector, renaming it now shows the original type name just below the title, smaller and dimmer, so you can always tell what kind of node it is even after you rename it.
Lock the State Morpher's state points -> the State Morpher gets a Lock Positions toggle. Turn it on and the state points on the pad can no longer be dragged, so you can't nudge them out of place by accident while performing; the puck still moves freely. It's a pure-data control with its own pin, so you can wire or automate it too.
Smoother State Morpher puck dragging -> dragging the morph puck with the mouse could feel heavy in larger patches, because it re-applied the blend on every mouse event (well over a hundred times a second). It now applies at frame rate, the same way CV-driven morphing already did, so dragging stays fluid while still morphing continuously in real time.
More styling on the Stereo Image -> the goniometer body gains a separate Line Colour for the phase-meter centre line (independent of the text), an adjustable Corner Radius, and the correlation value now sits in its own space on the right, so it is never hidden under the fill or crossed by the centre line.
Scan just your new plugins, or rescan everything -> the Plugin Folders settings now has two buttons. Scan New Plugins only checks plugins that aren't in your list yet, so adding a single new plugin no longer re-scans your whole library. Rescan All clears the list and checks everything again, which is what you want after replacing or updating a plugin in place. Forum request!
Preset Browser visual refresh -> the browser now reads as one clean, unified surface: the rail, grid and padding all share a single lifted tone, so there are no seams at the edges. The featured banner is redesigned too, with its artwork shown at full height and fitted to its frame (instead of a square crop), a soft branded glow behind it, and a thin edge in place of the old heavy triple frame; the scrollbars and card outlines are tuned to match. Purely cosmetic.
Instant state recall with hosted plugins -> recalling a States snapshot used to fully reload any plugin sitting in a Plugin Host: a brief audio gap, a "Loading..." flash, and the plugin's editor window closing. When the snapshot belongs to the plugin that is already loaded, MNodes now hands the saved settings straight to the running plugin, so switching states is instant, seamless, and the editor stays open.
The State Morpher now morphs hosted plugins -> every parameter of a plugin sitting in a Plugin Host now blends between states in real time, right alongside your native MNodes controls; you can watch them glide in the plugin's own editor. Switch-style parameters (filter types, waveform selectors) are never blended halfway: they snap cleanly to the nearest state. A plugin's full internal state can't be blended (it's an opaque block only the plugin understands), so the morph covers the parameters; a plain state recall still restores everything.
Lock plugin parameters against States -> every row in the Plugin Host's parameter list gets a padlock, just like native node parameters. Lock one and the States system leaves it alone: it isn't captured into new states, the State Morpher never moves it, and recalling a state keeps it right where you left it. The control itself stays fully usable.
FIXED
State Morpher stops fighting its own control -> when a Slider (or any widget) is wired to the State Morpher's X / Y to drive the puck, morphing no longer writes that control back to its saved value, which used to make the slider and puck jump and fight each other. The controller is now left alone. Forum request!
States prompt buttons follow the widget colour -> the OK / Yes / No buttons in the States save / rename / delete prompts were stuck on the MNodes accent instead of the widget's own colour; they now match the rest of the box.
Pitch bend in the Poly Module -> two pitch-bend glitches in polyphonic patches are fixed. Notes could stay stuck transposed up after a voice was reused, and a freshly loaded patch could play an octave flat until you touched the pitch wheel. The Poly Module now starts every voice from a correct, centred pitch bend and resets it properly when voices are reused. Forum request!
Toggle button top-edge line -> an active (ON) toggle could show a faint light line along its top edge, very visible on all-black faces, caused by a subtle gradient. The ON face is now flat like the OFF face; the gradient is kept for the hover state only.
Plugin Host no longer crashes with some GPU-based plugin editors on macOS -> a few plugins whose editors are drawn on the GPU (Metal), such as some Arturia titles, could raise a system error as their editor window opened or closed and take the external plugin-host process down with it. That error is now contained, so the plugin and its editor keep working. Forum request!
Scan and download popups now show over the Settings window -> the plugin-scan and factory-content progress popups (and any warning raised from Settings) were drawing behind the always-on-top Settings window, so they were easy to miss. They now appear on top of Settings while it is open.
Frozen values inside a Subgraph or Module -> connecting an audio cable inside a container could freeze the data and CV readouts on the nodes in there (the numbers stopped changing) even though the audio itself kept working. They keep updating live now, with no need to unplug and replug a cable to wake them back up. Forum request!
A node's CV mini-scope could lock up the app -> the small live CV scope shown on a node could freeze the whole interface if a non-finite value (a NaN or an infinity) reached it. It now guards its input, so a bad reading shows as "--" instead of wedging the display.
The app could refuse to close with unsaved changes -> closing the standalone with unsaved edits could leave the "save changes?" prompt hidden (it had been parked on the Settings window), so clicking the close button did nothing and the app never quit. The prompt is now always brought onto the main window, so closing works every time.
v0.9.996 (2026-07-21) · macOS + Windows
MNodes 0.9.996 (Early Access)
NEW
- New node: Soft Clipper -> a new distortion that rounds off peaks instead of flat-topping them like the hard Clip, for warm, musical saturation. Threshold sets the ceiling the signal eases up to, Knee morphs the shape from a hard corner (same as Clip) all the way to a smooth curve, and Mix blends dry and clipped. It draws its own transfer curve live and drops onto the Front Panel like the Waveshaper, fully themeable; Threshold, Knee and Mix all take CV. Ships in mono and stereo. Forum request!
IMPROVED
Wires renamed to Send / Receive -> the virtual-wire nodes were called "Wire In" and "Wire Out", which read backwards (the "In" was actually the sender you feed a cable into). They now use the familiar send / receive naming across Audio, CV and Data, with matching Sub versions for subgraphs. Only the names changed, so every existing patch keeps working and wires connect exactly as before.
Text widget corner radius -> the Text widget now exposes Corner Radius (plus a Corner Mode: pixels, % width or % height) in the inspector and to the Appearance Changer, like the other widgets; it defaults to the same look as before. Forum request!
States hover state -> the States widget now tints its face when you hover it, like the buttons and toggles, with a new Hover Colour appearance option to set that tint.
Lighter plugin hosting on older macOS -> on macOS 13 and earlier the out-of-process plugin worker used to busy-wait and inflate the reported CPU (around 10% on a 512-sample block); it now sleeps at zero CPU between blocks and wakes the instant one is ready. macOS 14.4 and newer already ran this way.
FIXED
States no longer wipe loaded samples -> recalling a State, or loading a preset, captured while an Audio Player was empty could clear a sample you had since loaded into it. States now leave a loaded sample alone (they can still switch it to a different one), never emptying it. Also fixes the Convolver's IR and the MIDI File Player, and repairs affected patches on load, no re-saving needed.
Panel node "Visible" toggle -> the Waveshaper and Soft Clipper are shown on the Front Panel by default, but their inspector Visible checkbox read as off. It now matches what you see, and still shows or hides the widget when you toggle it.
Big presets load without freezing -> opening a large preset used to show an empty dark box and lock the interface, as if the app had hung. The loading popup now shows a title and a live progress bar, and the heavy reading and parsing runs in the background so the interface stays responsive.
CV connections survive copy and grouping -> copying, duplicating or grouping a selection (or undoing a delete) could drop CV wires, such as those into a CV Pass. They are now rebuilt exactly as they were.
Wiring works deep inside huge patches -> in very large patches, especially several levels down inside Subgraphs and Modules, a new cable could silently refuse to connect, even between two fresh nodes. The internal pin identifier ran out of room once a patch held enough nodes; it is now wide enough for any size, so wiring and re-pointing cables work no matter how large or nested the patch is.
Grab a selected wire bundle at its pin -> re-pointing a whole fan-out at another node could not even start, because the pin's reserved "pull a new cable" zone swallowed the grab. Selected wires now win that zone, so you can grab them anywhere including right at the pin; pulling fresh cables out of an unselected pin is unchanged.
Curve and Waveshaper tooltips -> clearing the Tooltip field on these two widgets now really means no tooltip, instead of falling back to a built-in help string like they used to.
States widget double border -> its dropdown sat a few pixels inside the panel frame, showing two outlines; it now fills its slot cleanly with a single border.
States save / rename box -> the little name box that appears when you save or rename a state now takes the dropdown's own background, text and border colours, so it looks like you are editing the dropdown itself.
Deleting a State asks first -> Delete used to remove the current state the instant it fired; it now shows an inline "Delete?" warning with a Yes / No choice, so a mis-click or a stray trigger can't wipe a state by accident. Both the inspector button and a wired Delete pin go through it.
State Morpher puck -> when the puck sat exactly on a state point you could not drag it back out, because the point stole the click. The puck now draws on top and is always the first thing you grab.
Knob label fade -> the Knob's label and outside value text were drawn twice and stayed more opaque than their set alpha, so fading the widget from a Colour node darkened them out of step with the knob. They now fade in step.
Meter Visible in the inspector -> the Meter offered a Visible option to the Appearance Changer but not in its own inspector list; the toggle now appears in both.
No clicks or startup buzz -> loading a project, switching the audio device or reactivating the plugin could let a click, a DC pop or a burst of noise through before the graph had settled. The output now eases up from silence every time audio (re)starts, and a rebuild path that used to swap the running graph without a fade now fades too.
macOS crash reports include a stack trace -> the crash handler only captured a stack on Windows; macOS (and Linux) crashes now capture a backtrace too, so a report points at where it happened.
GPU plugin editors no longer crash the host (macOS) -> grabbing the thumbnail of a hosted plugin with a Metal/GPU-backed editor (some Arturia plugins) could throw deep inside macOS and take the plugin worker down; that capture is now contained, so a thumbnail it can't grab simply comes back blank.
v0.9.995 (2026-07-20) · macOS + Windows
MNodes 0.9.995 (Early Access)
NEW
- New node: Level Splitter -> splits a signal into three streams by how LOUD it is at each moment, not by frequency: Low gets the quiet parts, Mid the body, High the peaks. The three always add back up to the exact input, so you can treat each level range on its own (saturate only the peaks, gate the quiet floor, reverb just the body) and mix them back with no phase artefacts. Low and High set the thresholds in dB, Width softens the hand-offs, Response sets how fast it reacts, and the body draws the input level with both threshold lines. Forum request!
IMPROVED
The preset browser opens inside the window now -> instead of a floating popup that closed itself on every little change and hid under alert dialogs, the browser opens as a panel in the main window, filling the work area while the header and the left explorers stay visible and usable. Pick a preset, click the X, or press Escape to close. On a small window it goes compact (drops the side rail and the size slider, shrinks the Hub banner) so the list itself keeps the room.
The preset name is now a wider toggle -> the Previous/Next arrows are gone and the name fills the whole chip, so long preset names finally have room. Click it to open the browser, click again to close, and it lights up while the browser is open so you can see it is active.
FIXED
Crash when generating instruments from the LAB -> generating an instrument could crash right at the very end. Containers now clean up after themselves the instant they are destroyed, which closes the window for the LAB and for any delete or undo involving subgraphs, modules and poly modules.
States can no longer wipe your samples through the selector -> a state saved before your samples went in could empty an Audio Player, every pad of a Sample Map, a Convolver or a MIDI File Player the moment you picked it in the States dropdown. An empty state now leaves whatever is loaded alone; states that deliberately switch samples still work. "This Level" states also stop rebuilding a module's insides on recall. Thanks for the follow-up report!
Grouping named wires no longer renames them -> selecting Audio/CV/Data Wire nodes and grouping them into a subgraph or module turned every wire name into a number ("test 2" became "3"). They keep the names you typed now.
Big whole numbers no longer turn into "1e+08" -> typing 99999999 into an Int node showed scientific notation instead of the number. Every whole-number display prints the exact value now, and typing past the integer limit lands on the nearest valid value instead of flipping negative.
Renaming a Subgraph or Module to a name already in use -> the block used to pop "replace it?" with Yes/No and then ignore both answers. It now simply tells you the name is taken (subgraph and module names must be unique, because module presets find their module by name). Forum question!
v0.9.994 (2026-07-19) · macOS + Windows
MNodes 0.9.994 (Early Access)
NEW
MIDI Arpeggiator Enable-> switch the arp off and it stops sending notes (ending the sounding one cleanly) while still tracking the keys you hold; switch it back on and the pattern resumes right where your hands are. It has its own input pin, so a Toggle or any gate can punch the arp in and out. Forum request!
Your States survive patch updates-> states you save on a Hub patch used to vanish when the patch was updated or reinstalled. They are now kept separately per patch and come back on their own after an update, keeping their names and morph pad spots. Shared patches still carry everything in one file.
IMPROVED
Middle C is written C3 everywhere-> one convention across the whole app: MIDI note 60 is C3. A few displays (keyboard, MIDI monitor, sample map, Note-mode labels) were off by an octave against the rest; they all agree now.
Crash reports that survive anything-> memory-corruption crashes could take the crash reporter down with them and leave a useless log. There is now a fallback path that always gets the real stack written, and reports name unrecognised hosts ("Unknown (BespokeSynth)").
Welcome Darc Sector and OctaFuzz-> both join the beta testers credits, well earned this very version: the freeze fix below comes straight from Darc Sector's repro patch. Thank you!
FIXED
Moving many wires at once no longer freezes the app-> reconnecting a whole selection of wires inside a big module could lock the interface for minutes, because every wire paid the full rebuild cost on its own. The gesture is now one grouped edit and the view only rebuilds what changed. (Thanks Darc Sector!)
Crash when editing while data was flowing-> rewiring or regrouping at the exact moment the data engine was mid-cycle could crash the plugin. The rebuild now waits its turn; editing during playback is safe.
Plugin Host passes the DAW's transport-> plugins loaded inside Plugin Host now see the DAW's own playhead (tempo, position, play/stop), so host-synced guests finally follow your session. In standalone they follow MNodes' internal clock.
Automating an exposed Toggle or XY Pad drives the patch-> host automation used to move the control on screen without reaching its pins. It now acts exactly like clicking or dragging the widget.
States can no longer unload your samples-> a state saved while an Audio Player was empty could silently empty every player it covered on recall or morph. A state with no file in it now leaves whatever is loaded alone, for every file-based node.
v0.9.993 (2026-07-17) · macOS + Windows
MNodes 0.9.993 (Early Access)
NEW
Signal level toolkit-> four new Sig nodes for working with levels: Sig To RMS reads a signal's loudness over an adjustable window, Sig To dB and Sig From dB convert between linear level and decibels, and Sig Subtract gives the difference of two signals in one node. Chain them to compare the level before and after any processing and drive a Gain from the result - an automatic gain compensator, a ducker or the detection side of a dynamic EQ, all patchable in a few nodes.
Typed-input checks-> Is Number, Is Hex and Is Note validate what a user types before it reaches your controls: each outputs a Valid flag plus the parsed value - the number (negatives and decimals welcome), the cleaned hex colour ready for the Colour node, or the MIDI note from a name like C3 or A#4. The value only fires when the input really is valid, so a control keeps its last good value on a typo. Perfect after a Text Input widget.
To Number-> numeric text becomes an actual number: "3.14" comes out as 3.14, "-5" as -5, and "1,5" with a decimal comma works too. Numbers pass straight through and non-numeric text simply emits nothing, so the control it feeds keeps its last good value. Drop it after a Text Input widget and typed values drive knobs and sliders directly - without it, a numeric string landing on a numeric input reads as 0.
IMPROVED
MIDI Looper-> Stop now rewinds to the top like a classic looper and a new Pause holds the position instead; arming Record starts the clock, so a take no longer piles into the first step when the looper was stopped; and a new Auto Length switch lets your first recording define the loop's length - keep playing and it keeps growing, then Stop, Pause or disarming Record locks it in. The captured length is saved with the take.
Data Wires without limits-> Data Wire In / Out (and the Sub Data Wires) match purely by the name you type, and there is no longer any cap on how many different wire names a project can have - use as many wireless connections as your patch wants.
FIXED
Data/CV subgraph ports-> a Sub Out (Data/CV) could get stamped as CV when grouping plain data cables into a subgraph, and once stuck it stayed CV forever - it accepted data in but would not send it on, and only deleting the port and making a new one helped. Ports now follow what their source actually sends, in both directions and immediately: connect a CV source and the port turns CV on the spot, disconnect it and it falls back to data - and the pins repaint right away (before, a pin could keep its CV colour until you left and re-entered the subgraph). Patches saved with a stuck port repair themselves on load.
DAW automation override-> playing an automation clip on an exposed MNodes parameter could make the plugin echo the host's own values back at it, which some DAWs (Bitwig's green arrow) read as you grabbing the control and suspended the lane at random moments. Parameter reporting is now settled and checked against the host's stream, so automation lanes play clean - and recording automation by moving MNodes' own controls still works as before.
Expose to DAW on presets-> a widget with Expose to DAW ticked lost its DAW parameter when the patch was reloaded as a preset: the checkbox stayed ticked but the host kept showing a dead "Param N" - which is how a LAB synth's Cutoff went missing. Loading a preset now re-derives the DAW parameters from the widgets, and re-ticking the checkbox is reliable on every session.
State Morpher-> driving the pad's X or Y from a dense stream of values (a touchscreen XY pad over MIDI, for example) made the on-screen faders flicker and could crash the app; incoming values are now applied safely, so a busy stream morphs smoothly. And morphing now drives everything the moved widgets feed - a knob wired through to a MIDI CC keeps emitting while you morph, exactly as it does when you turn it by hand.
Data Wires across subgraphs-> a message travelling a long chain of Data Wires through several subgraphs (or around a feedback loop) could silently stop partway - with ten identical wires, eight passed and two never did. An internal safety limit was set far too low; the whole chain now gets through.
Preset browser-> you can drag a preset card onto a collection in the left rail; before, that only worked in the List view.
v0.9.992 (2026-07-14) · macOS + Windows
MNodes 0.9.992 (Early Access)
NEW
New State Morpher node-> an XY pad that blends a States node's saved states instead of only jumping between them; wire it to the States node's Morph output and each state becomes a point on the pad, drag the puck and the nearest states win. Move each state's point, right-click to leave one out of the blend, automate the puck's X/Y from your DAW or drive it with CV, theme it fully, and drop it on the Front Panel.
Compact mode-> collapse any node (or a whole selection) to a small cube with just its name and the pins packed down the sides, to tidy a busy patch; right-click Compact Node, press Ctrl/Cmd+K, or use View > Compact All / Expand All. Cables follow the pins, it saves with the project and is undoable.
Sticky fan-out wiring-> hold Alt while you drop a wire and the cable stays hooked to the source pin, so you can click input after input to send one output to many destinations without grabbing the source again. Release Alt to finish.
IMPROVED
Oscilloscope and CV Scope-> overlay up to four signals at once, each trace in its own colour, with a new Wave Alpha for transparency and per-trace, background, grid and frame colours; the Oscilloscope's Time/div now reaches 1000 ms and its traces fill the full width.
Plugin Host on the Front Panel-> add it to the panel and pick or replace its plugin, or open the plugin's own window, straight from Perform mode; fully themeable, with a Visible toggle like the other widgets.
Preset browser and Hub as cards-> browse everything as a grid of cover-art cards with a Cards / List toggle and a size slider; Hub cards show price or FREE, star rating and downloads next to a Get or Open button, plus info, rate and re-download icons. Your view and card size are remembered.
Perform is now truly full screen-> the front panel fills the whole window edge to edge; the menu bar hides and slides in over the panel when you hover the top-left MNodes logo, taking on your panel's own background colour, and now carries Home and Open too.
Auto Layout rebuilt-> packs nodes into tight columns along the signal flow, threads long cables through routing lanes, reduces crossings and straightens them toward horizontal; Frames are packed and wrapped as a block. Far cleaner on big patches, and undoable.
AllPass Filter-> Delay now modulates smoothly and click-free (fractional interpolation, great for phasers and lush chorused all-pass tails), and its range reaches 999.99 ms.
Much faster editing on huge patches-> connecting or disconnecting a cable and duplicating a big selection no longer freeze for seconds, or crash, in large projects with many nested subgraphs; small and medium patches behave exactly as before.
Preset loading feedback-> loading a preset now shows a "Loading..." overlay right inside the browser instead of the panel appearing to freeze.
FIXED
States remember which controls are shown-> a snapshot now captures each widget's visibility by default, so a Radio Group tabs layout comes back exactly as you saved it; close a widget's Visible padlock to leave it out.
Duplicated Subgraphs come up live-> duplicating or pasting a Subgraph with CV and audio wired inside no longer leaves its interior asleep until you drop a node in to wake it.
CV Scale: Root and Scale inputs are hybrid again-> drive them from a Data value, a CV stream or the inline picker, just like the pitch nodes.
Multi Envelope-> with grid snap on, clicking to add a point no longer stacks a duplicate or shifts its neighbours.
Route Sequencer-> an input's on-screen slider now updates as a value arrives on its pin, instead of showing the old number until you dragged it.
States save widget values again-> Knob, Slider, Film Strip and other widget positions travel inside a snapshot again (re-save any States you made in 0.9.991 to capture them).
MIDI Looper-> the active Slot stays correct when you rewire the patch, so recording, playback and the piano-roll all follow the slot you selected.
v0.9.991 (2026-07-08) · macOS + Windows
MNodes 0.9.991 (Early Access)
NEW
New Convolver node-> convolution / IR loader for guitar cabs, amp sims and reverb impulses; Dry/Wet, Output Gain and Normalize, plus Reverse, IR Size, Predelay and Tone, with a Zero-Latency or Low-CPU engine and a customizable waveform body for the Front Panel.
New Transient Splitter node-> splits a signal into Transient and Body streams that sum back to the exact input; process punch and sustain separately with Sensitivity, Recovery and Contrast, then recombine with no phase loss.
New MIDI Looper node-> polyphonic step recorder that loops your playing in sync with the DAW; 8 slots, chords, off-grid notes and Overdub, shown as a live piano-roll, resizable and Front Panel ready.
New MIDI Convert node-> turns one MIDI message type into another (note, CC, pitch bend, pressure, program) carrying the value across, with Keep Original and Pass Through.
New BPM To Hz and Hz To BPM nodes-> convert a tempo into a frequency at any rate and back, to tempo-sync anything that only takes Hz; hybrid pins, CV output.
IMPROVED
Multi Envelope-> sync to tempo and lock to the DAW: a new Transport with Free (Hz), Internal (BPM x Cycle) and Host time sources, each with an input pin.
Multi Envelope-> paint patterns onto the grid: a brush palette (Ramp, Exp, Log, Step, Saw, inverted Saw, Tri) draws one cell at a time, mouse height sets each cell.
Multi Envelope-> Random fills the grid per cell: the Random button paints each cell with a random-height version of the selected brush.
Multi Envelope-> gradient fill under the curve: a Fill Mode (Solid, Linear, Radial) with Fill From and Fill To colours.
Multi Envelope-> hide the preset bar so the curve fills the whole body.
LFO-> full transport: Play, Pause, Stop and Retrigger, as buttons and pins, in the internally-clocked modes.
Envelope-> a Retrigger input: re-fires the attack on every new note while the Gate keeps holding, for clean legato.
Widget Button and Toggle-> fuller styling: Active Hover Colour, Font Family and Import Font, and larger scalable Text Size.
FIXED
Big patches use far less memory-> inspector scopes allocate only for inspected pin, and widget images are shared by file.
The Lab flags the project as modified after generating, so Save is enabled straight away.
Locking a parameter reliably keeps it out of a State, including inspector-only settings and Visible.
Beat Repeat keeps capturing when the DAW loops back, mono and stereo.
CV modulation shows its live scope on controls inside Subgraphs and Modules.
Exposed Module controls keep their real name in the DAW.
Crossfade and Morph-> the position marker follows CV.
Multi Envelope-> dragging a point behaves when its neighbours are very close.
Envelope bodies stay truly transparent on a panel, alpha included.
v0.9.99 (2026-07-06) · macOS + Windows
MNodes 0.9.99 (Early Access)
NEW
New Dynamic Shaper node (mono and stereo)-> a compressor, expander and gate in one, driven by a transfer curve you draw; bend it to compress, limit, expand, gate or lift quiet parts, with Peak/RMS detection and a sidechain.
New Beat Repeat node (mono and stereo)-> a slice repeater (Interval, Chance, Grid, Gate) with per-repeat Pitch, Reverse, Ratchet and a repeats-only filter; Mix/Insert/Gate modes and Active/Step outputs.
New Frequency Shifter node (mono and stereo)-> shift every partial by a fixed number of Hz for phasing, rotary detune or clangorous, robotic tones; adds Spread on the stereo version.
New Crossfade node (mono and stereo)-> a DJ-style fader between two inputs with Equal Power / Constant Power / Linear laws and a Contour shape.
New Morph node (mono and stereo)-> scan smoothly across 2 to 16 inputs, equal-power blending the neighbours so loudness stays constant.
New Crossover Stereo node-> a stereo 3-band split (six outputs).
New Stepper node-> a manual up/down counter; wire a button to Up and another to Down for a +/- control, with Min, Max and optional Wrap.
New Instrument generator in The Lab-> Generate now builds a complete playable synth (voice, filter, envelopes, effects and keyboard) with six voice types and Voicing/Voices/Glide options; optional full front panel.
New per-widget fonts-> every text widget plus Comment and Frame get a Font Family picker with five built-in typefaces, and you can add your own .ttf/.otf (drop it in the Fonts folder or use Import Font, browse or drag and drop). Custom fonts travel inside preset bundles.
New Global scope for States-> a state can snapshot every node's values across all subgraphs, not just the current level.
New parameter lock-> the inspector padlock freezes a value so it is skipped by both randomize and State recall.
New Lock Loop Start on the step sequencers-> keep the loop start fixed and cap the length instead of sliding the start back.
New off-grid drag-> hold Ctrl+Shift (Cmd+Shift on Mac) while dragging to place a node freely with snap on, in the graph and the front panel.
New Handle Image on the Slider Handle-> replace the drawn handle with a PNG, JPG or SVG, with a size control.
New Stereo Image options-> Connect Dots draws one continuous XY trace, and Show Phase Bar hides the correlation meter for a bigger scope.
New Highlight wires of the selected node-> a Settings option that fades unrelated cables so a node's wiring stands out, with an opacity slider.
New Window Scale menu (View)-> size the window to 50/70/80/90/100 percent of the screen in one click.
New Latency readout in Graph Stats-> shows the patch's input-to-output latency in samples and ms, exactly what MNodes reports to the DAW.
CHANGED
Branch now works with CV-> feed its In a CV stream and it fires a trigger on True at the rising edge and False at the falling edge.
Counter now has a Wrap toggle and a simpler Up / Down / UpDown mode-> its config inputs take data messages instead of CV.
States now also capture front-panel widget visibility-> a single state can reconfigure which controls are on the panel.
Cleaner preset library-> flat rows, quiet separators and the preset name first, so a large library reads better.
Loading and importing now show progress-> a Loading popup for heavy presets, and bundles import on a background thread with a real progress bar instead of freezing.
Inspector Appearance section regrouped-> the font and text controls now sit together at the top.
FIXED
Knob "Double Click = Edit Value" now works-> it pops an inline editor to type an exact value.
Plugin delay compensation is now reported to the host-> latency-inducing plugins, oversampled subgraphs and parallel paths stay in time with your other tracks.
States edits made in Perform mode now persist-> save/update/delete/rename no longer get lost on reload.
CV into the Clock and All-Pass Filter now lands on the right input-> Play/Stop/Reset and the filter's CV inputs were off by a channel.
Fixed a Data Delay crash under load, and a rare crash when clearing a patch that contains a Module or Poly Module.
Toggle and Button hover and fill polish-> an ON toggle now responds to hover.
Long preset descriptions no longer overflow the card-> trimmed to a snippet, with the full text in the tooltip.
Right-clicking a value slider no longer nudges its value.
v0.9.98 (2026-06-30) · macOS + Windows
MNodes 0.9.98 (Early Access)
NEW
New States node-> save and recall snapshots of your whole patch as named presets that live inside it.
New Position to Time node-> turn the transport's musical position plus tempo into a HH:MM:SS.mmm clock (and numeric Hours/Minutes/Seconds/Millis).
New Note Name node-> turn a MIDI note number into its name (60 -> C3), with a Sharps switch (C# / Db).
New Logic node-> AND / OR / XOR / NOT / NAND / NOR / XNOR to combine two conditions (wire in two If outputs and pick the gate).
New Frame Selection (Ctrl+Shift+F)-> wrap the nodes you picked in a Frame in one step, as a single undo.
New rescan button in the preset browser-> refresh your library from disk without restarting.
CHANGED
Wires now match by name-> Audio, CV and Data Wire In/Out use a text name instead of a number (same name = connected). Sub wires stay private to their own subgraph.
Every Attack can now reach 0 ms-> instant attack on all envelopes, dynamics, followers and the Sampler, with no clicks.
The Crossover is now a full visual splitter-> draggable crossover points on the response graph, an adjustable Slope (12 / 24 / 36 / 48 dB per octave) and true Linkwitz-Riley bands.
Delay compensation-> MNodes now lines up signal paths that take different amounts of time, inside the patch and with your DAW. Always on, no setup.
The Text Input widget-> opens at a usable size, the Send button spans the field, single-line text is centred, plus a full appearance set.
Position Cycle Musical-> its Cycle input now accepts both a plain value and a CV stream.
Re-saving a preset-> now refreshes its thumbnail from what you are looking at.
The Curve node's Corner Radius-> now adjusts in finer 0.1 px steps.
FIXED
Sampler "Link (Edit All)" now saves with the preset-> it no longer resets to off on load, so toggling Reverse (and other zone controls) applies to all zones as expected.
The Add Node search-> now puts exact name matches first.
The MIDI File Player-> no longer leaves notes droning when you stop it, and a Toggle can now drive its Play input.
Copy / Paste Appearance-> now works on every styleable node and copies the whole look.
Double-clicking a Text widget on the front panel-> now edits it in place.
Renaming a preset-> keeps it in Recent, Favorites and Collections.
A preset thumbnail that opens in Perform-> now shows the whole front panel.
Node values keep updating on the body-> even when the node is driving audio.
Copying or importing a Module-> no longer scrambles its front-panel layers.
Re-downloading an updated Hub item-> now replaces the copy you already have.
v0.9.97 (2026-06-25) · macOS + Windows
MNodes 0.9.97 (Early Access)
NEW
New Waveshaper and Waveshaper Stereo nodes-> draw-your-own distortion curve, with CV-able Drive and Mix.
New Widget Range Slider-> pick a Min and a Max with two thumbs.
New Phase Sine node-> turns a 0 to 1 phase (phasor / ramp LFO) into a full sine cycle.
New MIDI Pass node-> a simple pass-through junction for MIDI.
Search box in the Layers palette-> filter widgets and groups by name.
Ungroup a Subgraph or Module-> dissolve its inner nodes back into the graph (the opposite of Group Into Subgraph).
CHANGED
Lower CPU on nested modules and subgraphs that use no feedback wires.
Less stutter when adding or editing nodes in deep or polyphonic patches.
Idle Poly Module voices sleep when nothing inside needs visualising (less CPU).
New Edge Line option on the bar sliders (Vertical / Horizontal).
New Ignore Clicks toggle on all four sliders (a locked panel passes clicks straight through).
Grouping layers creates the folder where the selection is, and scrolls to it.
FIXED
Audio fed only into an Audio Wire In is no longer dropped.
Copy/Paste Appearance on the Knob now keeps the tick count.
Vertical / Horizontal Slider Thumb no longer collapses or oversizes its handle.
v0.9.96 (2026-06-24) · macOS + Windows
MNodes 0.9.96 (Early Access)
NEW
New MNodes MIDI FX plugin (Logic MIDI-effect slot).
New Reactor Core node-> audio-reactive lightning (GPU).
New Mandelbulb node-> modulatable 3D fractal (GPU).
Reset input on every oscillator and instrument (phase lock / hard sync).
New Text Input node.
Two new draggable-handle sliders: Vertical Thumb and Horizontal Thumb.
Library Collections ->group your presets your own way.
New microtonal node: Scala Keyboard.
Curve node: new Custom draw-your-own type.
CHANGED
Lower CPU across the engine and many DSP nodes.
Wavetable generative banks use far less CPU.
Lighter, smoother interface (especially macOS).
Sampler per-zone envelope curves (Attack / Decay / Release).
Overlapping sample zones now all sound at once.
ComboBox can load the Filter types as a ready-made list.
Two-way envelope sync with the Sampler (Set pins).
Bipolar mode on the slider widgets.
Sampler Voice Gate output + a readback pin for every input.
Browser tooltips only show over the thumbnail.
Panner outputs aligned with its inputs.
Curve node resizable in the graph.
FIXED
Slider Sequencer keeps the exact Value Range you type.
Additive partials and Wavetable Morph take modulation again.
Shapes refresh on a module's front panel.
Copy-pasting modules no longer leaves them silent.
Sample Map keeps its zoom when switching to Perform.
Hosted plugins no longer spike CPU on reverb/delay tails.
Plugin Host no longer drives CPU up on macOS.
Logic Pro editor resize is smooth again.
Fixed a crash that could make the host drop MNodes.
Already-downloaded free Hub projects no longer show GET.
Create Bundle window always fits on screen.
Rubber-band inside a Frame no longer grabs the Frame.
Front panel grid size restored on reopen.
Front panel editable right after leaving Performance.
Deleting a module no longer crashes.
Shapes no longer clip their Appearance pin.
Fewer rare crashes when reopening a project.
Hosted plugin window stays in front on macOS.
Plugin Host thumbnail shows GPU-drawn editors (macOS).
v0.9.95 (2026-06-19) · macOS + Windows
MNodes 0.9.95 (Early Access)
NEW
New MIDI File Player node. Drag in a .mid and play it out as MIDI, free-running or synced to the host, with loop, musical-division speed and a live playhead.
New Open URL node. Opens a web link in your default browser, with an editable address, a Data input to set it and a trigger pin to fire it.
Detachable Front Panel. A new toolbar button pops the Front Panel out into its own window while you keep editing the graph.
CHANGED
Module Front Panels now split the view instead of covering it. The panel docks below the graph with a draggable divider and remembers open/closed per module. Module panels can also shrink down to 80 px wide.
Filter and Parametric EQ now smooth parameter moves. Sweeping a knob from the body, slider or inspector is click-free; presets, reset and CV still snap instantly.
Wavetable: hi-res custom import and morphing. Import detailed tables (2048 samples per frame) and glide between frames with the new Morph position and Frame Size controls, both CV-modulatable.
Pitch Shift reads CV on Semitones, Fine and Grain. It also re-pitches cleanly, with no clicks at the grain boundary.
Slider Sequencer gains a Value Range. Set Min/Max/Increment/Default to rescale every step and snap to your grid (defaults keep the classic 0..1).
Route Sequencer inputs are now editable sliders. Each input holds a value you can dial by hand, overridden the moment you wire a CV or Data cable in.
Data To CV is now a clean converter. A number is held as steady CV; a bare event clears to 0 and fires a short trigger pulse.
Filter Freq/Res/Gain outputs promote to a CV stream when wired into a CV input.
Pendulum stop winds down like a real pendulum, decaying to rest at the centre while still firing the points it reaches.
Lighter audio engine. The runtime skips inactive nodes each block and frees faded Poly Module voices sooner, trimming CPU with no audible change.
FIXED
Editing a value on an infinite slider (Slider Sequencer / Route Sequencer) no longer crashes.
A freshly grouped Module accepts wires on its Appearance pin right away, with no enter/leave needed.
Child modules stay visible inside nested module panels.
Dragging the Position knob on a Custom Wavetable no longer clicks.
v0.9.94 (2026-06-15) · macOS + Windows
MNodes 0.9.94 (Early Access)
NEW
FM Operator and PM Operator nodes. Build FM/PM synthesis from your own oscillators: feed a carrier and a modulator (both audio) and dial Amount. PM is the cleaner, DX-style sound.
Resizable plugin in Perform. Drag the plugin window bigger or smaller and the whole front panel scales to fit, keeping its aspect ratio. The size is remembered per project.
Granular: fully parametric grain shape. New Shape, Skew and Flat controls morph the grain window continuously (all CV-modulatable), with wider Grain Size (up to 2000 ms) and Density (up to 200/s).
New Pendulum node, a swinging sequencer you can see. Free-running or host-synced, with trigger points on the arc that fire a CV pulse plus an index, wind-down inertia on stop, and a Phase in/out. Themable and panel-ready.
New CV Pass node. A clean pass-through for CV streams, the CV counterpart to Sig Pass and Pass.
New Mid/Side Decoder node. Recombines a Mid/Side pair back into Left/Right; the partner to the Mid/Side Router.
New Stereo Image node. A stereo vectorscope plus phase-correlation meter you can drop inline on any bus and place on the panel. Themable.
New Data Wire and Sub Data Wire nodes. Wireless, named send/receive for data messages (project-wide or per-subgraph), the data counterpart to the Audio and CV Wires.
Recent presets. A "Recent" list in the preset browser shows your last 20 opened presets, newest first, saved across restarts.
CHANGED
Collapsible preset-browser sections. Fold the rail sections (Library, Type, Category, Author, Bundles); the state is remembered.
Copy / Paste Appearance now works on front-panel widgets too, and across the graph and panel, including several widgets at once.
Master volume and limiter are now global, not per-preset. Loading a preset no longer changes your master level, and the master no longer marks the preset as modified. It still saves with the host project.
The Frame body is now click-through. Right-click inside a frame for the add-node menu and left-drag to rubber-band-select; only the title bar moves the block.
The Text widget can re-send its current value on a trigger (a Bang re-fires its text).
The Vocoder and Stereo Vocoder gained a Mod Depth control (hybrid input) that sets how strongly the voice shapes the carrier.
The Trigger node's input is now hybrid: a data event/value or a CV edge.
The Colour node can re-send a single channel on a trigger.
The Wavetable node now starts as a clean, pure sine. Default unity Drive with no saturation; existing presets sound identical.
FIXED
A nested Poly Module now receives MIDI from the first build (no more silent voices inside a Module or Subgraph).
CV Wire and Sub CV Wire carry their signal now (the whole family was dead).
CV wires no longer clamp control values to the audio range: frequencies, note numbers and positions pass at their real value.
The Map node keeps its other inputs hybrid when you wire a CV into one of them.
The Parametric EQ's curve and band handles follow CV modulation live.
The loaded preset and Edit/Perform mode survive a session reload. MNodes reopens exactly where you left it, with no Home screen.
Switching presets no longer clicks, pops or spikes the CPU.
Edits inside a module-of-a-module take effect right away, at any nesting depth.
Rewiring inside a Module no longer leaves a node stuck on a stale value.
Locking a widget in the Layers palette no longer jumps the list scroll.
"Show Info..." no longer opens behind the preset list.
Renaming a node is now undoable and no longer crashes.
Case-only node renames now stick (for example "COmpressor" to "Compressor").
Renaming a Frame now shows the editable title.
Animated node bodies no longer crash when a project reloads.
The editable Text widget now confirms with Enter.
Dragging a cable from a Module's Appearance pin no longer jumps to the corner.
The "Wires on top of nodes" setting now sticks across restarts.
Node Help now shows each parameter's real range.
Reinstalling factory content from Settings actually reinstalls it, restoring missing factory content.
CV Octave now follows a CV-modulated octave.
Oscillators now phase-modulate at audio rate: wire any signal into an oscillator's Phase input for PM (the Pulse Width input is audio-rate too).
A Combo Box widget keeps its text size in Perform and after reload.
v0.9.93 (2026-06-12) · macOS + Windows
0.9.93 (Early Access)
New
- ASIO support on Windows. The standalone app now ships with Steinberg's ASIO® driver support built in: pick your interface's ASIO driver in Settings > Audio / MIDI for the lowest latency path to your hardware. The native Windows drivers (WASAPI, DirectSound) are still there and stay selected by default, so nothing changes unless you switch. ASIO is a registered trademark of Steinberg Media Technologies GmbH.
- Bundles: package and share collections. A new File > Create Bundle... window builds a
.mnbundlecollection out of your presets and projects: give it a name, an artist, a description and a cover image, then add the content straight from your library with a searchable picker (Add from Library...) or from files on disk, and Export it as a single bundle file to share. When packing, every preset is collected and exported with everything it needs: its thumbnail and every external asset it references (samples, images, tuning files...) travel inside the bundle, so nothing is ever left behind. There is also an Add to Library button that simply tags the items already in your library with the bundle name, with no copies made, so the collection shows up grouped in the Bundles section right away, organised and ready. File > Install Bundle... (or just dropping a.mnbundleonto the window) installs it, putting everything in its place; installing replaces, so presets you already had from that pack are overwritten and a bundle can never end up duplicated in your library. The preset browser's rail gains a Bundles section with one entry per installed bundle, so finding, say, "MNodes Tutorial - The Basics" and all of its projects takes one click. Submitting bundles to the Hub happens on the website (the window links straight to it), and bundles published on the Hub show a BUNDLE badge in the embedded Hub and install straight from their GET button. - New Parametric EQ. A six-band stereo parametric equaliser. Each band can be set to any shape: bell, low shelf, high shelf, high-pass, low-pass or notch, with its own Frequency, Gain and Q. The body draws the combined response curve over a live spectrum analyser, with one handle per band: drag left and right for frequency, up and down for gain, and use the mouse wheel over a handle to change its Q. Double-click a handle to switch its band on or off. Every band parameter also has its own input and output pin, and Frequency, Gain and Q are stream-capable, so you can modulate any band at sample rate with an LFO, an envelope or any CV source. Like the Filter, it can also be dropped into the front panel as a widget.
- New Frame node. An Unreal-style background box for grouping a region of the patch, found under Utility. A Frame always sits behind every node AND behind the wires, so nothing ever hides under it: by default it has a very transparent fill and an opaque border, both following the theme and overridable from the inspector. Drop nodes inside and dragging the frame moves everything in its box along with it (Move Contents, on by default). It has a title bar on top: double-click the bar to rename it in place, and set the title's size and colour from the inspector. The Comment node stays as it was, for plain text notes.
- The Sampler shares its selected zone with the front panel. The Sample Map gains one output pin per zone setting: transpose, fine tune, sample start and end, loop points, crossfade, loop on, the ADSR, volume, pan, reverse and both fades. They emit the selected zone's values every time the selection changes, so wiring them into the Set pins of knobs and toggles builds a panel that always mirrors the zone you click. Each zone row in the node shows its input pin on the left and its snapshot output on the right. Edits made from those widgets still flow back through the zone's input pins, and the two directions never loop.
- New Pitch Shift Stereo node. A true-stereo version of the Pitch Shift: both channels run through the same shifter with shared Semitones, Fine and Grain, so the stereo image stays coherent. Found under Effects.
- New AM / Ring Mod Stereo node. A true-stereo version of AM / Ring Mod: a stereo carrier pair and a stereo modulator pair through one set of controls, so Mod L multiplies Audio L and Mod R multiplies Audio R while the image stays coherent. A missing R input falls back to its L side, so mono sources work as expected, and with no modulator wired both channels share the same internal oscillator. Same interactive preview body as the mono node. Found under Effects.
- New Swap L/R node. A stereo utility that swaps the channels: the left input goes to the right output and the right input to the left. A Swap toggle turns it on or off, and its hybrid input accepts a 0/1 value or a CV stream, so the swap can be gated per sample (an audio-rate gate gives a ping-pong effect). The In/Out pins sit on the same L and R rows. Found under Effects / Stereo.
- New Phase Invert node. Flips the polarity (phase) of the left and/or right channel, with an independent toggle per side. Each toggle has a hybrid input that takes a 0/1 value or a CV stream, so the inversion can be modulated per sample. Invert both to flip the whole signal's polarity, or one side to fix an out-of-polarity channel. Found under Effects / Stereo.
- Pitch Shift: grain control. A new Grain parameter (5 to 250 ms, with its own modulation pin) sets the shifter's window size by hand: short grains keep drums and transients tight, long grains smooth pads and voices. The Auto Grain toggle (on by default, with its own 0/1 pin) keeps the classic behaviour, where the window follows the transposition, and greys the Grain slider out while active. Sweeping through zero semitones no longer glitches.
- Per-node CPU meters. A new View > Show Node CPU toggle draws a small load meter (a coloured bar and a percentage) in the header of each node, so you can see at a glance which ones are heavy. A Subgraph, Module or Poly Module shows its total, and stepping inside it shows the meter on each inner node too. It costs nothing while the toggle is off.
- MIDI Panic on the Poly Module. A Poly Module now has a MIDI Panic action, both as a button in its Inspector and as an entry in the node's right-click header menu. It instantly silences every voice and clears any stuck or hung note. A safety net for a runaway patch or a host that drops a note-off.
Changed
- The Home window welcomes you with two paths. Home now opens with the MNodes logo, a Welcome header and two big cards: Perform (play and tweak devices on the front panel) and Create (patch your own devices in the node graph). Picking one takes you straight there and is remembered; together with the reworded "Don't show this on startup" toggle, a fresh MNodes opens directly into your chosen path. Recent projects stay on the panel. And a brand-new instance no longer starts on a bare wire: it opens a small Welcome device, audio in to out through a stereo volume stage, with a Volume knob and a typographic MNodes header on a tidy front panel, so choosing Perform shows a finished little device instead of an empty page.
- The starting patch now fits the plugin format. The audio FX plugin starts with just the Welcome volume device, with no stray MIDI In/Out nodes. The instrument plugin starts with an actual little polyphonic synth: MIDI In feeds a 6-voice Poly Module whose voice is the classic saw into low-pass into VCA, with an ADSR opening the VCA, so it makes a pleasant sound the moment the host sends notes, and doubles as a working Poly Module example you can open and learn from. The standalone keeps the volume device plus its MIDI In to Out row.
- Preset browser reorganised. The preset window is wider now and split into two panes: a navigation rail on the left and the preset list on the right. The rail groups your presets by Type (Instruments, Effects, Percussion, Other), by Category and by Author, plus All Presets and Favorites, each with a count. Click an entry to filter the list, and the search box narrows whatever you have selected. It replaces the old single long list with its row of category chips.
- Browse the Hub inside the preset browser. The preset window's rail now has a MNodes Hub section: select Explore and the right pane becomes the Hub catalog, each project with its thumbnail, author, star rating, download count and description. A bar at the top sorts the catalog (Recent, A-Z, Rating, Downloads) and filters it by category, the search box searches it, and the Size slider resizes the rows just like the local list (taller rows show the description, and featured projects get a badge). Click a free project to download and install it without leaving the popup (it shows up in your library straight away); click an installed one to load it; a paid one opens its product page. Your sort, category and view choice are remembered.
- One Hub, inside the preset browser. The separate Hub window is gone: the catalog lives entirely in the preset browser's MNodes Hub view. The Hub icon already left the header, so the header stays clean.
- New Updates window. Version checking, the latest version's release notes and the download link moved out of the old Hub window into a compact Updates window: open it from the MNodes logo menu ("Check for Updates...", next to Settings), or click the update chip that appears in the header when a new version is out and it takes you straight there.
- Settings moved to the MNodes logo menu. The Settings entry now lives in the dropdown under the MNodes icon in the header (just above About, between separators), instead of the View menu. It opens the same panel and is now reachable the same way in both Edit and Perform mode.
- Settings opens in its own window. Settings is now a separate, movable and resizable window instead of a full-editor overlay. Put it beside the graph and your colour, theme and appearance changes show as you make them, without it taking over the editor. It stays on top so it never hides behind the editor. Open it from the MNodes logo menu; close it from its title bar or with Escape.
- New Tutorial category. The preset categories now include Tutorial, so tutorial patches (and tutorial bundles) are easy to tag when saving and easy to find from the browser's rail.
- Show only the front panel. A new View > Show Only Front Panel toggle (Ctrl+Alt+W, or Ctrl+double-click the divider) gives the front panel the whole workspace and hides the graph entirely, so you can lay out a panel comfortably at full size in Edit mode. Toggle it off and the classic split (graph on top, panel dock below) comes back exactly as it was. The choice is remembered between sessions.
- The graph scrollbars can be hidden. A new View > Show Graph Scrollbars toggle (on by default, next to Show Mini Map) hides the canvas scrollbars for a cleaner view. Panning, zooming and the minimap work exactly the same without them, and the choice is remembered between sessions.
- Pitch Shift tunes tighter. When the material has a clear pitch (a voice, a bass, a sustained note), the shifter now lines up its internal grain splices by correlation, so transpositions land cleaner on the target note, with audibly less warble on held tones; an octave up now sits properly on the octave. The detection is confidence-gated, so chords, noise and transients keep exactly the same sound path as before, and it adds no latency and next to no CPU. The Pitch Shift Stereo node gets the same improvement.
- The preset arrows follow the browser's list. The header's previous/next arrows (and Random) now step through exactly what the preset browser shows. The selected rail entry (Favorites, a Type, a Category or an Author), the search text and the sort order all apply: with the list on Newest first, next always jumps to the next newest preset, and with something typed in the search box the arrows move only through the matches.
- Presets get an automatic thumbnail. Saving a preset now captures the patch and uses it as the thumbnail by default, following the preset's Open Mode: set to Perform it captures the complete front panel (the whole page, not just what is scrolled into view, rendered clean like Perform shows it: no grid, no edit borders or selection), set to Edit it captures the graph, and switching the Open Mode combo updates the preview live. Next to the preview there is a new Use Custom Image tick: leave it off and the capture is saved with the preset; tick it and the classic flow comes back, with the Choose Image button and drag-and-drop onto the preview. The Categories section also gains a small disclosure arrow (collapsed by default, with a count of the selected ones), so the save panel fits comfortably on smaller screens.
- Widget Text becomes a text entry field. A new User Editable toggle lets the user type into a Widget Text from the front panel even while the panel is locked (in Perform, double-click it and type). Whatever they enter is published on the widget's new Text Out pin, so typed text can drive anything that takes Data: another label, a Print, or the ComboBox. The ComboBox gains an Add Item input for exactly that: send it a text and it appends it as a new entry (no duplicates) and selects it, so a text field on the panel can grow a dropdown live. With User Editable off everything behaves exactly as before.
- Audio Player: Start and End have output pins. They mirror the current range, including edits made by dragging the markers on the waveform, so you can wire them into a widget's Set input and keep external controls in sync both ways. Since the two values keep each other in order (Start can push End and vice versa), both outputs update together.
- Every OTT parameter now has an output pin. Input Gain, Threshold, Upward, Downward, Time, Output Gain and Mix join the crossovers, depths and trims, so any OTT setting can be read back, displayed, or wired into a widget's Set input to keep a front-panel control in sync with edits made on the node's body. Also fixed along the way: the outputs the OTT already had sent their CV streams on the wrong channels, so modulating, say, Low X and tapping its output as CV could carry another parameter's value or silence.
- Widgets can now read a parameter back through their Set pin. A widget's Set input applies a value without re-emitting it, so wiring a parameter's output back into Set can never create a loop, and the editor now allows that connection. This is how you keep a control in sync both ways: wire Knob Out to, say, an envelope's Attack input, and the Attack output back to the knob's Set. Turn the knob and the envelope follows; drag the envelope's handles and the knob follows. Every control widget has a Set input for this: Knob, the Sliders, Film Strip, XY Pad (separate Set X and Set Y), ComboBox, Radio Group and Toggle. Set pins draw a small ring in the centre instead of a dot, so the feedback-capable inputs stand out at a glance.
Fixed
- The envelopes' Done pin works now, and it fires CV. The Done output on the Envelope, AHD Envelope and Trig Envelope never fired: the AHD and Trig sent their done signal out the wrong pin (the audio output), and any envelope inside a Module, Poly Module or Subgraph had its done events silently dropped before reaching the wires. All fixed. Done is also a CV trigger now: wire it to anything CV (another envelope's Trigger, a sequencer step, a gate) and it sends a short, sample-accurate pulse the moment the envelope finishes, like the Multi Envelope's Trigger on Done. Data-only inputs like Print still get their Event, but only one of the two fires per wire, so chained envelopes don't double-trigger.
- Multi Envelope's Trigger on Done fires data consumers too. The Multi Envelope's done trigger only ever sent its CV pulse: data inputs (Print, counters, a sequencer's Generate and the like) never heard it, anywhere. It now also sends the data-side trigger like the other envelopes, correctly routed from inside Subgraphs, Modules and Poly Modules.
- Sequencer action pins respond to CV inside containers. Wiring a CV trigger into the Slider or Toggle Sequencer's Generate pin (and other action pins like Clear or Dump) did nothing when the sequencer lived inside a Subgraph, Module or Poly Module: the inner graph silently dropped the trigger's data event because the pin was marked as stream fed, a filter the root graph never applied. Inner graphs now follow the same policy as the root, so those pins respond everywhere.
- Subgraph port nodes are inert at the project root. A Sub In (Audio) placed directly in the root graph (instead of inside a Subgraph, Module or Poly Module) silently picked up the live audio input as if it were an Audio In, a Sub In (MIDI) received the host MIDI, and a Sub Out (Audio) wrote straight to the device output, bypassing Audio Out. Port nodes only mean something inside a container, so at the root they now stay silent. Inside Subgraphs, Modules and Poly Modules everything works exactly as before. Thanks to the user who caught it.
- FLAC and OGG files work everywhere audio loads. The decoders were already on board, but several file filters only listed WAV, AIFF and MP3: the Sampler's file dialog, the Files explorer (FLAC and OGG files didn't even show up in it, so there was nothing to drag onto a Sampler, Audio Player or Granular) and the Wavetable's custom-file picker. All the audio filters now accept WAV, AIFF, FLAC, OGG and MP3, matching what dropping a file on the graph already accepted.
- CV sent from inside a Module or Poly Module reads correctly from the parent. A module sending CV from inside through a hybrid pin (for example a Voice Pitch chain feeding a Sub Out in a Poly Module, with nothing wired into the module from outside) could be misread as plain Data by the parent graph, and the parent cable rendered as a dashed, suspended wire even though the inner chain was genuinely CV. The module boundary now refreshes the inner CV state before judging its output pins, so the parent pin always matches what the module actually sends.
- Tweaking node parameters now lights the unsaved-changes star. Changing a node's settings (a knob, a toggle, anything in the inspector) now marks the preset as having unsaved changes, so the little star next to the preset name shows up. Before, only structural edits like adding nodes or connecting wires triggered it, so parameter tweaks could be lost without warning. Playing does not light it: modulation (an LFO wired to a parameter) and moving widgets in Perform mode are a performance, not an edit.
- Applying a widget style no longer resets the widget's settings. Applying a node preset (for example one of the factory styles on a Widget Knob, Slider or Button) wiped out everything the preset didn't store: Min, Max, Value, Increment, the Interaction settings, Expose to DAW and more all snapped back to their defaults. A preset now only changes the settings it actually contains, so a style restyles the widget and leaves its range, value and wiring untouched. The same rule now protects every node in the library, not just widgets: applying a partial preset to an LFO, a delay, an envelope or any other node keeps whatever the preset doesn't mention.
- Dragging a group of zones moves the whole group. In the Sample Map, clicking one of several selected zones used to collapse the selection before the drag could start, so only that zone moved. The group now survives the click: dragging moves every selected zone's key range together, and dragging vertically shifts all their velocity ranges at once, each zone keeping its own span (a small dead zone keeps purely horizontal moves from nudging velocities). The velocity edges follow the same idea: dragging the top or bottom edge adjusts every selected zone relative to its own range. A plain click without dragging still collapses to just that zone, and simple clicks no longer push empty undo steps.
- Hidden widgets stay hidden. The Visible toggle of panel widgets (knobs, sliders, buttons, toggles, text, XY pads, the Sample Map and the Sample View) was not saved with the project, so a widget hidden from the front panel came back visible after a reload. It is persisted now, and applying a partial node preset leaves it alone.
- Factory node presets retuned to their real ranges. A pass over every factory node preset found values written in the wrong scale for the node's actual parameter ranges (detunes as 0..1 instead of cents, decays in the wrong unit, drives and gains out of range). They were silently clamped, leaving several presets sounding wrong or even silent. All categories are corrected: Audio FX, Instruments, Envelopes, Sequencers and Widgets.
- Poly Module no longer gains a voice on every save and load. The voice count was stored twice with different meanings, and each save/load cycle could bump it by one. It is stored once now, and applying a node preset to a Poly Module also rebuilds its voices right away.
- Editing inside a Poly Module now takes effect right away. Adding, duplicating or removing a node inside a Poly Module (an envelope, an LFO, a duplicated oscillator) could do nothing, cut the sound, or make notes stop playing, because the module kept running the voices it had built before the edit. It now rebuilds the voices on every inner change, so what you patch is what you hear. The same fix covers plain Subgraphs and Modules.
- Node displays show the right shape inside a Poly Module. An on-body display (an oscillator's waveform, a scope) could come out looking like the wrong shape, for example a sine drawn as a square, because all of the module's voices were drawing into the same display at once. Only the visualization voice feeds the on-node display now, so it shows one clean signal.
- A Transport saved while playing starts playing on load. A preset stored with its Transport running used to come back stopped: the play state was restored before the node was attached to the engine, so it silently went nowhere. The state is now re-pushed once the node is fully wired, so the patch starts running the moment it loads.
- Transport follows its Sync mode without toggling it first. A Transport set to Host (DAW), or one freshly added in a plugin (where Host is the default), could ignore the DAW clock until you switched Sync off and back on. The node now pushes its sync mode to the shared clock the moment it is added and when a project loads, so Internal runs on its own Play and Host (DAW) follows the DAW's play and tempo straight away.
- No more crash when closing a plugin window with several instances open. With more than one MNodes loaded in the host, closing their windows in a different order than they were opened could crash on exit. Each window restored the previously active default styling when it closed, but that reference could point at another instance that had already gone away. It now holds that reference safely, so it clears itself when the other instance closes and nothing dangling is ever restored.
- Plugin window resizes again in Logic Pro (AU). 0.9.92 stopped drawing MNodes' own resize corner in Audio Unit hosts, expecting the host to supply one. Logic Pro does not, so the window could no longer be resized there. The corner is back in every format; the monitor-clamped size limits added in 0.9.92 still keep it from being dragged off-screen.
Hub
A few improvements landed on the Hub itself. These are on the web side and already live, so there is nothing to update in the app to get them.
- Download counts match the app and the website. A project's download number now adds up the same whether someone downloads it from the app or from the Hub website, instead of each one keeping its own count.
- Change a project's cover image after publishing. Editing one of your projects now lets you swap its image, and the new one shows up straight away on the cards and the project page.
- Give your projects a version. When you submit or edit a project you can set an optional version number, shown next to it on the Hub website and in the app.
v0.9.92 (2026-06-08) · macOS + Windows
MNodes 0.9.92 (Early Access)
NEW
- Show or hide a Module / Poly Module on the front panel (Visible toggle, plus an Appearance input to switch it from the graph).
- Curve node: In/Out Min and Max are now input pins, so the ranges can be wired or modulated.
- Name labels built into the Knob, Slider and ComboBox widgets (position, colour and size, no extra text widget needed).
- Separate opacity for each image on the Button and Toggle widgets.
- Rotation pivot for repeated images: spin each tile, or the whole pattern as one block.
- Share colour palettes: export and import your custom swatches as a .mnpalette file.
- Exact delay in samples on Delay Line Mono and Delay Mono (new Samples mode).
- Vocoder: up to 100 bands (was 16), plus a Gate that mutes the quietest bands.
- Vocoder Stereo: a new true-stereo vocoder, independent per channel.
- Vocoder: an editable band-mapping curve to shift formants or flip the spectrum.
- MIDI Single Note Remap: re-route one note's pitch, channel and velocity; chain a few to send notes to different channels.
- Node transparency: an alpha slider on the Node Body colour to make nodes more see-through.
CHANGED
- Smooth node now has continuous CV outputs (Value, Is Smoothing, Done).
- Sliders default to a 0.001 step like the knob (set 0 for fully continuous).
- Image widget settings are grouped into sections, easier to scan.
- Poly Module shows a warning when it has no MIDI to assign voices.
- Inside a Module, the Inspector offers both Module Panel and Front Panel, matching the right-click menu.
FIXED
- Modules and Poly Modules no longer open cropped.
- Vocoder keeps an even level as you change the band count.
- Vocoder's on-node bars follow the band count even with no audio.
- The Vocoder (and Vocoder Stereo) can now go on the front panel.
- Cleaner Increment field on knobs and sliders (no trailing zeros).
- Scopes, meters and readouts read correctly inside a Poly Module.
- The minimap follows you into Modules, Poly Modules and Subgraphs.
- Button / Toggle hover shows the Hover Colour cleanly.
- MIDI CC value is now 0..1 everywhere, like the rest of the CV.
- Group / Ungroup act on the whole selection in one step.
- Duplicating a group keeps it as a group.
- Curve node now works with data sources, not just CV.
- Pos X / Pos Y show for every node you can place on the front panel.
- No more loud burst when loading a project or patch.
- West Coast wavefolder shows live CV on its body.
- Standalone remembers your enabled MIDI inputs.
- CV / Data To MIDI sends pitch bend, CC and aftertouch from data too.
- Audio and CV Wire stay clean in hosts with variable block sizes (e.g. FL Studio).
- Knob widget value text updates inside subgraphs.
- Standalone asks to save before closing.
- macOS: graph keyboard shortcuts fire reliably.
- Plugin scan logs which plugin failed.
- macOS / Logic (AU): the plugin editor resizes smoothly.
- Plugin editor's resize limit follows it across monitors.
- Filter and AllPass take fast modulation cleanly (smooth audio-rate sweeps).
v0.9.91 (2026-06-04) · macOS + Windows
MNODES 0.9.91 (EARLY ACCESS)
This release builds on the first Early Access (0.9.9). Here is what changed since then. Thank you for testing and helping shape the road to 1.0.
NEW
New MIDI editing nodes. A set of small nodes that take MIDI in, change one thing, and pass everything else through, so you can chain them freely with sample accurate timing: MIDI Velocity (scale and / or offset velocity), MIDI Set Channel (force a channel 1 to 16), MIDI Note Remap (up to 8 note to note maps, by letter), MIDI Note Filter (pass or block a key range), MIDI CC Transform (renumber a CC and scale / offset it), and MIDI Merge (up to four streams into one). Untouched messages flow straight through, and a NoteOff always follows its NoteOn, so nothing ever gets stuck.
CV / Data To MIDI node. Closes the loop with MIDI To CV / MIDI To Data: pull MIDI out to CV or data, shape it, and turn it back into MIDI. A Gate fires notes (rising edge = NoteOn, falling = NoteOff) at the current Note and Velocity, and Pitch Bend, CC and Aftertouch rebuild when their values change. The inputs are Data pins that also accept CV.
Data To CV node. Converts a data value into a smoothed CV stream (the inverse of CV To Data), so any data float can drive a CV input without clicks.
CV output on envelopes. Envelope, Trig Envelope, AHD Envelope and Multi Envelope now have a CV output next to Out, carrying the envelope shape as a pure CV signal. Wire it straight into any modulation input (filter cutoff, a widget's position, an LFO's Min / Max...) with no conversion.
Position front panel widgets from the Inspector. Widgets now have Pos X and Pos Y fields (in pixels). They also accept the Appearance input and an Appearance Changer, so a widget's position can be modulated or animated like any other look value. Dragging or nudging a widget updates the fields live. They are excluded from the look randomiser by default.
Eyedropper for colour pickers. Every colour picker has an eyedropper to grab a colour from anywhere on screen: click to enter pick mode, move to preview the colour live, and click to apply it (Escape cancels). On macOS it uses the system colour sampler.
Type a note name into any number slider. Double click a numeric slider and type a note name (C3, C#5, Eb2, A-1) to set that note's frequency in Hz. Integer sliders round it, and plain numbers still work as before.
Drag a look onto the graph. Drop a .mnLook (or .hbLook) file onto the editor to apply it straight away, as a single undo step.
Cancel a Hub download. The download progress popup (preset or project) now has a Cancel button that stops cleanly and deletes the half written file, so no leftovers remain.
CHANGED
Node browser organised by purpose. The add node browser and palette now group nodes by what they do (Oscillators, Instruments, Samplers, Filters, Effects, Envelopes, Modulation, Sequencers, Pitch, MIDI, Math and Logic, Values, Routing, Convert, Widgets, Utilities, Analysis) instead of by signal type. Nothing was renamed and search is unchanged.
MIDI To Data now outputs the same set as MIDI To CV. Added Pitch (V/oct), Note Hz and Trigger Note On / Off, and Channel now reports 1 to 16 (was 0 to 15). The original outputs keep their pins, so existing patches are not rewired.
LFO output range now defaults to 0 to 1 (was -1 to 1), since most modulation targets expect unipolar. Set Min / Max to -1 to 1 for a bipolar LFO, and so on. Existing projects keep their saved range.
Removed the MIDI Split node. The in place MIDI nodes plus MIDI To CV / MIDI To Data already cover it. Note: projects that used MIDI Split will not reload that node.
Removed the CV Multiply node. The hybrid Multiply already handles CV and data. Note: projects that used CV Multiply will not reload that node; replace it with Multiply (same A * B).
FIXED
DAW automation of exposed widgets now works in both directions in hosts like Bitwig. The plugin was echoing the host's own automation back onto the same parameter and freezing the lane; now it only reports the changes you make, so lanes drive the widget and moving the widget updates the DAW.
macOS: the editor window of a hosted plugin (the Plugin Host node) now floats above the DAW instead of hiding behind it.
Plugin scanning is safer and faster. Plugins are probed out of process, so a crashing third party plugin can no longer take down the host, and several plugins scan in parallel.
CV now propagates through math nodes. A chain like CV to Multiply to Map (or Add, Subtract, Clamp...) carries CV all the way through.
LFO Min and Max can now be driven from outside the node (a knob, a CV / data connection, or automation), exactly like Freq and Phase Offset, and the LFO body scope no longer overflows or squashes when you change them.
Arpeggiator: the Down direction (and DownUp, Reverse Played) now play in the right order.
Installing or reinstalling factory content now refreshes the Modules, Subgraphs and Node Presets browser right away, and factory subgraphs and modules show up under their own Factory groups.
A project started from zero now opens with the master at 0 dB and the limiter on, instead of inheriting the last used value.
Standalone: changing the MIDI Output device in Settings takes effect immediately, and the window can be dragged to fill whatever monitor it sits on.
macOS standalone: fixed a crash when opening Settings (the MIDI / Bluetooth scan) and restored audio output; the build now ships the required microphone and Bluetooth usage descriptions.
macOS: the Files explorer now lists external and network drives, not just the internal disk, and file menu actions read Show in Finder.
Loading a preset now opens it in the mode it was saved with (Edit or Perform), instead of staying in Perform once Perform had been used.
Holding Ctrl / Cmd to zoom no longer also moves a slider under the pointer; Ctrl / Cmd + wheel is always a zoom.
Switching to Perform mode now closes any open Settings, Info or Save panel.
The ComboBox widget no longer follows the global theme; its colours come entirely from the node's Appearance. More UI (colour picker value boxes, breadcrumbs, drop downs, popup dialogs) now follows the theme / Main colour too.
Appearance undo / redo behaves predictably: randomising the palette is a single undo step, and a colour picker drag is grouped start to end.
Editing a comment node is readable again: the inline editor uses the comment's own colours instead of washing the text out.
Clicking outside a confirm dialog now dismisses it with the safe option (Cancel / No), never Save.
Hub: presets and projects uploaded by other users now download correctly (a Hub backend fix, already live, no app update needed).
v0.9.9 (2026-06-02) · macOS + Windows
MNODES 0.9.9 (EARLY ACCESS)
This is the first Early Access release. Thank you for testing MNodes and helping shape the road to 1.0.
NEW
Factory Content. MNodes can install a curated factory library (node presets, subgraphs, modules and projects) from the Hub into read only Factory folders, kept separate from your own content and your Hub downloads. Get it three ways: the "Install / Reinstall Factory Content" button in Settings > General, a one time prompt on first run, or by dropping a .mnpack file onto the graph. Reinstalling only ever touches the Factory folders, so it can never delete your own work. Requires an activated licence.
Multichannel Audio In / Out. Audio In and Audio Out have a new Channels slider (1 to 8, default stereo) that adds or removes pins live, numbered from the hardware's point of view (In 1, In 2 ... and Out 1, Out 2 ...). In the standalone you can enable more than two channels in Settings > Audio / MIDI to use a multichannel interface.
Appearance settings are back. Colour pickers for Background, Main and the four wire colours, plus new Graph Background, Grid, Node Body and Panel Grid colours, the built in skin presets, look file import / export, and a new Text Contrast slider that lifts the opacity of dim text and icons for readability.
Refreshed theme presets: Default plus 8 varied skins (Carbon, Aurora, Synthwave, Terminal, Cobalt, Crimson, Frost, Parchment), each setting the full 11 colour palette so the graph, nodes and front panel shift together.
Virtual Wires (Audio and CV). Route a signal through a named bus instead of a cable, and build feedback loops with a guaranteed one block delay. The family is Audio Wire In / Out and Sub Audio Wire In / Out (audio), plus the new CV Wire In / Out and Sub CV Wire In / Out (CV). "Wire In" feeds the bus, "Wire Out" reads it back.
Delay Line Mono. A pure mono delay line (no feedback, no mix) with three time modes: Free (ms), Hz (1 / frequency) and Sync (musical subdivision).
Feedback Loop Mono factory subgraph. Drop one node, open it, insert your effect chain, and the feedback loop closes for you. An Amount input drives the feedback from any LFO, envelope or knob.
LFO output range. New Min and Max params set the LFO range directly (default -1 to +1), both CV modulatable. Min greater than Max inverts it.
Toggle Perform Mode shortcut (Ctrl / Cmd + P).
Front Panel: pan the canvas (middle mouse drag, or Space and left drag) and nudge selected widgets with the arrow keys (1 pixel, or 10 with Shift). A new Layers button was added to the floating toolbar.
Double click a node header to toggle the Inspector, rename a node from the Inspector header, and set any dropdown parameter by its label text (not just its index).
CHANGED
Explorer sidebar dropped the Presets tab (presets live in the preset controller now). Order is Files, Nodes, Modules / Subgraphs, Lab.
Preset browser remembers your scroll position, search, tag filters, sort order, row size and favourites toggle for the session.
Hub Library cards now have a right click menu (Load, Show Info, Favourite, Show in Explorer, Delete) and a favourite heart, Show Info opens inside the Hub window, and the What's New notes are larger and easier to read.
CV Delay is now CV Delay Line. Note: projects that used the old CV Delay node will not reload that node, rebuild it with CV Delay Line.
MIDI CC Inject / Extract now work only in the 0 to 127 range.
"MIDI" is spelled in all caps across the whole interface.
LFO params reordered. Phase is now Phase Offset and the Phase input is Phase CV. Random waveforms use a fresh seed per instance, so each new or duplicated LFO sounds different.
Unified musical subdivisions across all Sync capable nodes. Double check synced delays saved before 0.9.9, the subdivision index may have shifted.
FIXED
Right clicking a preset and choosing an action no longer crashes.
Stereo samples in the Sampler now play in stereo.
Audio Player, Granular and Plugin Host play correctly inside a subgraph, and a playing sample no longer stops when you edit the subgraph.
A raw Audio Out or MIDI In inside a subgraph now reaches the host.
MIDI To CV and hosted plugins (notes and audio) work again.
Plugin Host strips DC offset, so an idle synth no longer pins the master meter while you hear nothing.
Standalone window: Aero Snap, edge resize and double click maximise work on Windows, and a stale saved audio setup falls back to the system default.
Window and panel minimums lowered so a wide, short layout fits cleanly.
Front Panel: widgets keep their proportions at every zoom, alignment no longer drifts away from 100%, the grid no longer tears under a dragged widget, and a locked widget hides its border and stays playable.
The Lab generating a chain no longer stops a playing Audio Player.
Sequencer fixes: lowering Steps no longer breaks the loop, the playhead is clearly visible, and a panel sequencer mirrors graph side edits.
Global single key shortcuts no longer steal keystrokes while you type.
Reset Zoom (Cmd / Ctrl + 0) is reliable on macOS.
Add node palette opens cleanly and auto selects the best match as you type.
The update notice no longer lingers after installing, and many smaller fixes (minimap refresh, tooltips, lasso, node thumbnails, Map node CV).
KNOWN NOTES FOR THIS EARLY ACCESS
v0.9.8 (2026-05-28) · macOS + Windows
New nodes
- Curve (CV/Value): reshape any value through 5 curves (Linear, Exponential, Logarithmic, S-Curve, Inverse S) with an Amount knob and Range mapping.
- MIDI CC Extract: pick a CC number and stream its value as CV.
- MIDI CC Inject: send any CV out as a MIDI CC message.
New features
- Per-node Bypass: B key or right-click. Click-free with crossfade, undoable, saved with the preset.
- Subgraph Oversample: Off / 2x / 4x / 8x, anti-aliased.
- Always-visible Preset Controller in the top bar: prev / next arrows plus one click on the name opens the full preset browser. Same in Edit and Perform mode.
- Front Panel Layer Groups: group widgets into folders, nestable, Cmd/Ctrl+G to group, Cmd/Ctrl+Shift+G to ungroup.
- Export Preset button in the Save Preset panel: saves to library AND prompts for a portable copy.
- Zoom shortcuts: Cmd/Ctrl + +, Cmd/Ctrl + −, Cmd/Ctrl + 0.
- MIDI pin flash: MIDI pins blink on activity, same as Data pins did already.
UI polish
- Resonator chart redesigned: cleaner curve, per-band frequency tags that never overlap.
- Plugin Host inspector: clear highlight on last-touched param + header search (handy on Diva / Serum / Pigments).
- AudioPlayer: hover affordances on draggable zones, drag-bar to move the loop, max zoom 256, thinner markers, proper cursor shapes.
- MIDI Scale: piano keyboard can be dropped into the Front Panel with full Appearance section.
- Master fader: pulled all the way down is now true silence (-inf), with a log curve so the useful range gets most of the slider.
- Grid slider in the Front Panel goes down to 1 px.
- Mini CV scope over knobs now shows the target parameter name, so you can tell which scope belongs to which knob at a glance.
- Filter node: Gain and Drive sliders grey out when the active Mode doesn't use them.
DAW integration
- DAW automation actually changes the sound now (was a real bug: slider moved visually but the patch didn't react).
- Standalone on macOS asks for microphone permission on first launch (otherwise audio gets silently muted on macOS 14+).
- First-run plugin scan is now opt-in with a prompt, no more frozen DAW.
Bug fixes
- Backspace / Delete in any text field no longer deletes the selected node.
- Clicking a node now properly releases focus from any open text field.
- Crash on Delete preset from the preset selector is fixed.
- AudioPlayer no longer degrades to a bitcrush-sound after playing for a while.
- macOS Bluetooth MIDI no longer crashes the standalone.
- Hub downloads now show a progress popup with a real percentage.
- Lab generator: AllPass knob and Stereo Delay L/R are wired correctly now.
Breaking change
- If node now has two output pins (
Then OutandElse Out) instead of the singleOutpin. Patches from 0.9.7 that wired the oldOutneed to be redrawn toThen Out.
v0.9.7 (2026-05-23) · macOS + Windows
MNodes v0.9.7
Beta feedback round. Bug fixes, polish, and a master output safety stage.
Added
- Master output safety - a brick-wall output limiter (on by default), a master output gain (-24 to +6 dB) and a stereo clip meter, shown as a compact strip in the menu bar. Drag the volume, double-click to reset to 0 dB, click the LED to toggle the limiter. Saved with the project and with each preset.
- Widget Text - Orientation option - choose between Horizontal, Vertical (up), Vertical (down), or Stacked (one character per row without rotation). Justification stays visually consistent across orientations.
- Explorer Nodes tab - tooltips - hovering a node shows its name and full description.
- Preset Browser - tooltips - hovering a preset shows its name, author and description.
- Copy / Paste Appearance - right-click a widget node's header to copy its look, then paste it onto other nodes of the same type. Works on multi-selection too.
Changed
- Perform mode menu bar simplified - only the Preset menu remains, plus a new MNodes logo button on the left with About and Open in Edit Mode. The About panel now also opens in Perform mode.
- Menu bar now adapts to narrow window widths - the preset name, the update notice and the master strip shrink or collapse in turn (the update notice becomes a small dot) instead of overlapping each other.
- Right-click Add Node menu - nodes sorted alphabetically by name within each category.
- License activation screen - higher contrast for text, inputs and buttons.
- CV Scope - the node body now shows the current incoming CV value as a clear numeric readout, so you can read the exact value at a glance.
- MIDI Channel Filter - In and Out share a single row, and the node only forwards raw MIDI from the selected channel (clock, transport and SysEx are dropped). The redundant MIDI Channel Router node was removed.
- Removed the older "MIDI Keyboard" widget node in favor of the richer "Midi Keyboard" node, which covers the same use case plus more.
- Removed the Reset option from the menu bar. Use New Project, or select all and Delete, instead.
Fixed
- Delete / Backspace shortcuts no longer stop working when a text field has keyboard focus somewhere in the editor. Several focus traps in the Debug Print body cleaned up at the same time.
- MIDI Arpeggiator - changing Octaves or Out Channel mid-play no longer breaks the arp. Turning Latch off now also clears the latched chord.
- MIDI Riff Generator - hybrid parameters now respond to CV / audio-rate streams in addition to Data. Trigger buttons fire on rising edges. The body's loop bracket follows the modulated values too.
- MIDI Keyboard - Hold latch now also applies to incoming MIDI notes, not only to keys clicked on the UI. Latched MIDI notes are shown as active on the keyboard body.
- Sampler Engine - Voices, Glide, Glide Time and Bend Range now persist across project saves (they were resetting to defaults on every reopen).
- Sample View and Sample Map - Wave Colour and other paint specs now persist across project reloads (they were saved double-encoded and the loader silently fell back to defaults).
- Sample View and Sample Map - the body no longer eats mouse-wheel events in the graph editor, so Ctrl+wheel canvas zoom over the body works as expected.
- Appearance Changer now populates its property dropdown for every node with an Appearance input pin (Oscilloscope, Audio Delay mono/stereo, Filter, Wavetable, all envelopes, all dynamics processors, Vocoder, OTT, Karplus-Strong, Granular, and more).
- Analyzer - trace colours with alpha 0 are now actually invisible.
- LAB - generating or regenerating a front panel is now a single atomic Undo step.
- Hub - re-downloading a preset or bundle no longer creates duplicates; asks to overwrite via a popup.
- Graph - middle-click drag always pans the canvas, doesn't jump position, and doesn't change a parameter the cursor is hovering over.
- Widgets - a colour set to alpha 0 stays fully transparent instead of snapping back to the theme colour.
- Front panel - tooltips set on a widget's appearance now show on hover, both when editing and when using the panel.
- Tooltips appear beside the cursor instead of floating above it, so they line up with the element being pointed at.
- Explorer Nodes tab - descriptions truncate cleanly instead of shrinking; the category label no longer overlaps long node names.
- Deleting a node that was driving another node's input now re-enables the affected controls.
- Drag a .mnprt onto the editor now imports it into the library and refreshes the preset list immediately, as well as loading it.
- Fixed a crash when loading some presets from the browser (a use-after-free of the file path during project rebuild).
- Fixed a heap-corruption crash that could fire when a meter or other node updated a parameter from the data pump thread.

ASIO is a registered trademark of Steinberg Media Technologies GmbH.
