# MIDI 2.0 Preview Branch

**URL:** <https://forum.juce.com/t/midi-2-0-preview-branch/66453>\
**Category:** News and Announcements\
**Created:** [June 25, 2025, 11:26am UTC](https://forum.juce.com/t/midi-2-0-preview-branch/66453 "2025-06-25T11:26:35Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![t0m](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/t0m/32/16413_2.png) [@t0m](https://forum.juce.com/u/t0m)\
**Post date:** [June 25, 2025, 11:26am UTC](https://forum.juce.com/t/midi-2-0-preview-branch/66453/1 "2025-06-25T11:26:35Z")

</div>

Hello everybody,

We’re excited to announce the first batch of MIDI 2.0 support is now available on the `midi2` branch:

> **[GitHub - juce-framework/JUCE at midi2](https://github.com/juce-framework/JUCE/tree/midi2)**
>
> midi2

This preview branch introduces OS/Hardware level MIDI 2.0 support across all JUCE supported platforms.

**If you are working on a DAW, a plugin host or a standalone app and are interested in MIDI 2.0, please do give this preview branch a spin** — it’s a great opportunity to provide feedback before the work lands on develop.

We’d also appreciate anyone using the `MidiInput` and `MidiOutput` classes (for example, standalone synths) to help confirm behavior is unchanged.

## Higher-resolution note/channel message format

MIDI 2.0 brings a new format for MIDI messages: “Universal MIDI Packet” or UMP. Each message contains more data than a classic MIDI 1.0 message. For example, Velocity and CC can now express a large 16-bit range (0-65,535) instead of the classic 7-bit (0-127).

This branch adds the `ump::Input` and `ump::Output` types that speak the new UMP MIDI format. These types can send MIDI 1.0 **or** MIDI 2.0 channel-voice messages. There’s also some other quality-of-life improvements, like being able to detect when a particular input or output gets disconnected.

Because the new types support everything that the old `MidiInput` and `MidiOutput` supports (aka MIDI 1.0 messages), we’ve re–implemented `MidiInput` and `MidiOutput` entirely in terms of the new types — a big under-the-hood change.

## New UMP demo

To help you debug UMP, a new Demo is available in DemoRunner.app \> `Audio` \> `UmpDemo`.

 ![DemoRunner - 2025-06-24.54@2x](https://us1.discourse-cdn.com/flex026/uploads/juce/original/3X/1/b/1bd9ecea818ae4cf57db2f9153cbd7d396ff070f.jpeg)

## Session API

The new `Session` API manages MIDI 2.0 Inputs and Outputs.

`Session` also takes advantage of Microsoft’s new OS-level API, called Windows Midi Services, currently in [preview](https://devblogs.microsoft.com/windows-music-dev/announcing-windows-midi-services-customer-preview-1/). On “Canary” builds of Windows with the SDK installed, this allows management of separate documents (i.e. multiple DAW sessions or browser tabs) independently.

## Endpoint API handles device discovery/negotiation

MIDI 2.0 brings a new way of reporting detailed information about connected MIDI devices.

`Endpoints::getStaticDeviceInfo` reports detailed immutable information such as manufacturer, product name, transport type — all information available from the OS before a MIDI connection is established.

After establishing a connection, MIDI device discovery can report more information via `Endpoints::getEndpoint`. This includes advanced information about the MIDI 2.0 “function block layout,” allowing developers to discover and present user-friendly naming when dealing with connector routing.

## Android support

JUCE’s MIDI 2.0 implementation for Android was more involved than other platforms.

On Windows/Linux/Apple, multiple apps can send/receive messages to the same device at the same time — it makes sense then that the OS handles the device discovery, so each app can share the discovery results.

On Android, output connections are exclusive. Only one app can send messages to a device at a time. This makes the OS-level API simpler, but means that each app must handle the discovery and negotiation details. JUCE handles this piece of the work for you in this branch.

## JUCE’s MIDI 2.0 roadmap

We are working on MIDI 2.0 from the outside-in. If you imagine where a plugin sits in relation to physical hardware, there are (at least) two layers of APIs:

- The OS APIs — to get messages between the computer and hardware
- The plugin APIs — to send messages between the plugin and the DAW

This preview branch’s scope is OS-level APIs.

MIDI 2.0 work will continue. Keep in mind that MIDI 2.0 isn’t just one thing — it’s a bunch of different features that can be mixed and matched. Synth plugin developers can eventually expect to see `AudioProcessor` support UMP (Universal MIDI Packets), etc.

In the meantime, if OS-level MIDI 2.0 support is something that interests you, please do checkout the branch and let us know how it’s working.

---

_[View the full topic](https://forum.juce.com/t/midi-2-0-preview-branch/66453)._
