Universal Controller MIDI

Getting started

Installation overview

Pick your OS, grab the right installer, and get Universal Controller MIDI running in under two minutes. Three platforms, one workflow.

Updated

Universal Controller MIDI turns a game controller into a class-compliant MIDI device in under 120 seconds, on macOS, Windows, and Linux. The app is a single download, ~38 MB, with no kernel extensions, no driver signing prompts, and no DAW plugin to install.

This page is the index. Pick your OS below, follow the platform guide, then come back to verify everything works.

Pick your OS

One installer per platform. Each one bundles the Python runtime, the UI, and the MIDI bridge — nothing else to fetch.

  • macOS — universal DMG, Apple Silicon + Intel. ~12 s to install.
  • Windows — signed .exe installer, Windows 10 and 11.
  • Linux — AppImage or .deb, X11 + Wayland.

Installer matrix at a glance

If you're picking between formats — especially on Linux — here's the shape of each option side-by-side. All three bundle the same app version.

Platform Format Size Admin needed Auto-update
macOS 12+Universal DMG~38 MBNoYes (in-app)
Windows 10/11NSIS .exe~42 MBOptionalYes (in-app)
Debian/Ubuntu.deb~44 MBYes (apt)Via apt repo
Any LinuxAppImage~48 MBNoYes (in-app)
Arch/Fedora/Nixtarball~40 MBNoManual

What to expect

After install, the app launches a one-time onboarding wizard that asks for input-device permissions, lights up your first controller, and creates a virtual MIDI port your DAW can listen to. Total walk-through: ~90 seconds.

If you're on macOS or Windows, the DAW side is zero-config — your virtual port shows up under whatever name you set (default: Universal Controller). On Linux, ALSA handles it the same way aplaymidi does.

# macOS — quick check the install dropped the app where expected
ls /Applications | grep -i "Universal Controller"

# Windows — same check via PowerShell
Get-ChildItem "$env:LOCALAPPDATA\Programs\UniversalControllerMIDI"

# Linux — confirm the binary is on PATH after .deb or tarball install
which ucm && ucm --version

Then what?

Once the controller is paired and your DAW sees the port, the next stop is first launch + onboarding, then the mapping editor. Most users are playing their first kick drum within five minutes of opening the installer.

What if it doesn't work?

Most install failures fall into one of these buckets. If you're stuck, walk this list before opening a ticket.

  • "Installer won't open" on macOS — quarantine bit is set. Drag the app from the DMG window, not from Downloads. Or run xattr -dr com.apple.quarantine "/Applications/Universal Controller MIDI.app".
  • SmartScreen blocks the .exe — the cert is signed but new. Click More info → Run anyway. See Windows install for the full unblock flow.
  • AppImage won't launch on Wayland — missing libfuse2. Install with sudo apt install libfuse2t64 on Ubuntu 24.04+, or use the .deb instead.
  • App opens then immediately closes — input-monitoring permission was denied. Re-launch and accept the prompt, or toggle it on under System Settings → Privacy & Security.
  • "Disk full" mid-install — the installer expands ~110 MB of Python bytecode during the unpack step even though the final footprint is ~38 MB. Free up at least 150 MB on the install volume and retry.

None of the above? Run the loopback test and grab the diagnostics export from the cog icon. That's everything our support inbox needs.

Edit this page on GitHub Updated
ESC

Type to search.