This page covers information about a Windows MIDI Services feature and application that will be released to consumers in November 2026. It’s currently available for developers.
Windows MIDI Patchbay connects MIDI endpoints to each other. You drop the devices you care about onto a canvas, draw connections from one device’s Out to another device’s In, and from then on everything arriving on that connection point is passed along.
It’s the software version of the patchbay in a studio rack: keys into a sound module, a drum machine into your DAW, one controller split across three instruments.

Routing happens only while Windows MIDI Patchbay is running. Routing only runs while Patchbay is running explains how to keep it going in the background.
A patch is one canvas: the endpoints on it, the connections between them, and a name. Patches are saved as files in Documents › MIDI Patchbay, one file per patch, so you can back one up or copy it to another PC.
Patch files end in .midipatch. To add one that somebody sent you, or one an AI assistant saved in another folder, select Import a patch… and pick the file. You can also double-click it in File Explorer. The first time you do, Windows asks which app to open it with, so pick MIDI Patchbay. Either way, the patch is copied into your patches. It doesn’t route, and it doesn’t start automatically, until you turn those on. A file from somewhere else shouldn’t connect your devices before you’ve looked at it.
Older versions of Patchbay named patch files .midipatch.json. Patchbay renames them to .midipatch the next time it starts. If a file with the new name is already there, the old one is left alone.
You can have as many patches as you like, and more than one can be routing at the same time. Whether a patch is routing is separate from whether it’s the one on screen, so you can look at one patch while three others are working.
When the patch on screen isn’t routing, a warning bar across the top says so. Select Start routing on the bar to turn it on, and the bar goes away.
To have a saved patch start routing by itself every time Patchbay starts, turn on Start automatically next to the routing button. While it’s off, another bar reminds you that you’ll need to start the patch yourself each time. You can close that reminder. A temporary patch can’t start by itself, so turning the switch on for one asks you to save it first. The Start routing saved patches at startup setting turns automatic starting off for every patch at once.
A patch you don’t name is temporary: it routes right now and disappears when Patchbay closes. Nothing is written to disk. Give it a name and it sticks around.
New quick patch is the fastest way to get going: pick a source, pick a destination, and you have a patch with one connection in it. New empty patch gives you a blank canvas to build on instead.
Each endpoint on the canvas has two columns.
There’s a row for each group the endpoint declares, labeled with the group’s number and the name the device gives that group. The name comes from the device’s function blocks, or from its group terminal blocks when no function block names the group. Each endpoint grows wide enough to show its longest name. If a name is longer still, point at the row to see all of it. Above them is an All groups row: connect that and everything passes through with its group untouched, which is usually what you want when you just mean “send this device to that one”.
Connect a specific group to a different specific group and Patchbay rewrites the group as the message goes past. That’s how you fold four groups of one device onto one group of another.
You can draw a connection by dragging from an Out point to an In point, or by clicking the Out point and then clicking the In point. The second way also works from the keyboard. You don’t have to land exactly on the point — get close and the connection snaps to it.
To change where an existing connection goes, drag the end of the cord onto a different point. Drag a node by its title bar to move it out of the way. Select a connection or an endpoint and press Delete to remove it; the first time, Patchbay asks, and offers to stop asking.
The zoom controls above the canvas go from 10% to 400%. Click the zoom percentage and choose Fit to screen to see everything on the patch at once, as large as the window allows. The overview in the corner of the canvas shows the whole patch, with a box around the part on screen. Drag the box to move around, or click anywhere in the overview to jump there.
Each connection can be narrowed so only some of what arrives is passed on. Select the connection and choose Edit filters.

Everything is allowed until you clear something. A message has to pass every section to be sent on, so the sections work together: clearing a whole message type drops those messages whatever the sections below say.
A note range keeps only notes inside a span, which is how you split a keyboard across two instruments. Click a key for the bottom of the range and shift-click for the top, or type the note numbers. It applies to note on, note off, poly pressure and the MIDI 2.0 per note messages, so a held note can’t be stranded.

Transforms change messages on the way past. They run after the filters, on the copy sent to that one destination, so nothing here affects what any other connection carries. Between them they do everything the old Windows MIDI Mapper did, and quite a lot it couldn’t.


Each rule under Control change values names one controller and says what happens to its value. A small graph beside the rule shows the result: the dashed line is the value going in, and the solid line is what comes out. Some everyday fixes:
Invert happens before the curve, so a backwards pedal is put the right way round first and then shaped like any other pedal. If you type the ends of a range high to low, that range runs backwards, so the numbers always mean what they say.
A rule applies to the controller number as it leaves, after the control change mapping. So if CC 1 is moved to CC 11, the rule for CC 11 is the one that shapes it. MIDI 2.0 controllers are shaped at their full resolution.
Rules work on one message at a time. Some controllers split a value across two controller numbers for extra detail, such as CC 1 with CC 33. Those are best left without a rule, because each half would be shaped on its own.
MIDI 2.0 carries velocity in sixteen bits and controller values in thirty-two, so a percentage is what those values really mean, and that’s how Patchbay stores them. But plenty of controllers give each of the 128 MIDI 1.0 steps its own meaning, such as a pad color, and typing 0.79% when you mean step 1 is no fun.
So the transforms dialog starts with a choice: 0 to 127 or Percentage. Velocity, aftertouch and controller values all follow it. The value is the same either way; only the way you type it changes. A patch saved before this choice existed opens as 0 to 127, because that’s all it could have meant. A new one starts as a percentage.
A MIDI 2.0 note on can say exactly which pitch to play, down to a fraction of a semitone. That makes its note number an address rather than a pitch, and moving one without moving the other would produce a message asking for one note and the pitch of another.
Leave Leave MIDI 2.0 notes that carry an exact pitch alone clear and the pitch moves with the note, so transposing and note mapping both stay honest. Check it and those notes are passed through untouched, which is what you want when the note number means a drum pad or a key on a controller rather than a pitch.
Selecting a connection shows what its filters and transforms add up to, so you can see at a glance what a cord is doing without opening either dialog.

This is the important limitation. Patchbay routes by receiving messages in its own process and sending them back out, so the routes exist only while the app is open. Two settings in the appearance and settings flyout deal with that:
Both are off unless you turn them on. Patchbay doesn’t put itself in the notification area uninvited.
Because Patchbay works inside its own process, it can only route from a message source to a message destination. It can’t reach inside another app. A loopback is how you bridge that gap: it’s a real MIDI endpoint on the PC that any app can open, so your DAW connects to the loopback and Patchbay feeds the loopback.
Create loopback on the toolbar makes one without leaving the canvas, and drops it straight onto the patch. It uses the same Windows MIDI Services feature that MIDI Loopback Setup does, so a loopback made here is a normal endpoint that every app sees, and it can stick around after Patchbay closes.
Gear gets unplugged. That’s a normal state, not an error.
An endpoint that isn’t connected right now is drawn with a dashed outline and a warning badge, its patch gets a caution triangle in the list, and the connections to it sit idle. Everything else in the patch keeps routing. The moment the device comes back, its connections start carrying messages again without you doing anything.
If the device came back with a different identity — a USB device with no serial number moved to another port, for example — Patchbay notices a likely match and offers it. It never binds to a different device on its own.
Selecting an endpoint shows Identify this device by in the details panel:
Sending a device’s output back to its own input, directly or the long way around, floods every device on the path within a second. Patchbay walks the patch after every change and looks for that.
When the circle is certain — when every endpoint on it is a loopback, so it’s known that what goes in comes back out — the connection that closes it is left in place but held muted, and the whole circle is drawn in red. The message names the hops in order so you can see which one to remove.
When the circle only closes if a piece of hardware echoes what it receives, which Patchbay can’t see from outside, it says so and mutes nothing.
Patchbay only knows about the connections it routes itself. A DIN cable between two devices, or another routing app, can close a circle it can’t see. That’s why the status bar says “no loops detected” rather than “no loops”.
Right-click an endpoint, or use Test on the toolbar, to open MIDI Monitor, the MIDI keyboard or the scratch pad already pointed at that endpoint. Selecting a connection shows a running count of what it has forwarded, which is how you tell “nothing is arriving” apart from “arriving and going nowhere”.