MIDIBridge is a lightweight, open-source toolset that streams MIDI signals to any machine over the Internet in real time.
No extra hardware. No distance limit. Just plug in and play.
MIDI Keyboard ──USB──▶ Server ──WebSocket──▶ Client ──Virtual MIDI──▶ DAW / Other Software
| Component | Repo | Description |
|---|---|---|
| Server | midibridge-server | Reads USB MIDI input and broadcasts over WebSocket |
| Client | midibridge-client | Receives signals and injects them into a virtual MIDI port for use by DAWs |
| Android | midibridge-android | Run MIDIBridge Server on your Android device |
| Feature | Description |
|---|---|
| 🔌 Zero-config pairing | Set password once — client auto-connects |
| 👥 Multi-client | One server broadcasts to multiple clients simultaneously |
| 🔄 Hot-plug recovery | Unplug and replug the keyboard anytime — server auto-detects |
| 🎯 Device targeting | Configure target MIDI device name — auto-retries until ready |
| 🔒 Password-protected | bcrypt-hashed storage with remote online update |
| ♻️ Auto-reconnect | Exponential backoff with random jitter to avoid connection storms |
| 🔗 External integration | Local programs can read the live MIDI stream directly over TCP — no virtual MIDI port required |
Download the binary for your platform from MIDIBridge-Server Releases
Change the default password via the HTTP API after first launch.
See the server repository README.md for detailed instructions.
Run MIDIBridge Server on your Android device
Download the APK from MIDIBridge-Android Releases and install it on your phone.
See MIDIBridge-Android README for details.
Download the binary for your platform from MIDIBridge-Client Releases:
./midibridge-clientEdit
data/config.jsonwith your server IP and password before starting.
Important
Windows users: Due to driver limitations, install loopMIDI first and create a virtual port with the same name as virtualPortName in your config file — otherwise the client cannot inject MIDI signals.
Besides injecting into a virtual MIDI port, the client can also publish the same MIDI stream over a local TCP loopback socket, so other programs on the same machine can read it directly
./midibridge-client -ipc-listen 127.0.0.1:9003This is off by default and does not change the normal virtual-MIDI-port workflow. The interface is read-only and unauthenticated, so it is intended for programs running on the same machine.
See docs/PROTOCOL.md in the client repository for the protocol specification and copy-paste-ready examples.
MIT — Use, modify, and distribute freely.