MainStage is the only Apple app built purely for playing live, and it has the best controller-assignment model of any host on macOS — hardware assignments and parameter mappings are deliberately separate layers. That separation is exactly what makes a gamepad work so well here: you bind the right trigger to a screen control once, and then every Patch in the Concert decides for itself what that trigger does. This guide sets up a MainStage gamepad MIDI controller rig with a DualSense, DualShock 4, Xbox or 8BitDo pad, using Universal Controller MIDI as the HID-to-CoreMIDI bridge.
- What you do: bring the IAC Driver online, open the MainStage Layout tab, drop in screen controls, Learn them from the gamepad, then map them per Patch.
- What you need: MainStage 3.5+, macOS 12 or later, any supported controller, the bridge.
- Time: about 15 minutes for a four-knob, eight-button layout.
- Why it is different: hardware assignment is Concert-wide, mapping is per-Patch — one physical control, a different job in every song.
Can MainStage use a PS5 or Xbox controller as a MIDI controller?
Yes, as soon as something translates the gamepad's HID reports into CoreMIDI — MainStage itself only ever looks at MIDI ports. macOS does recognise a DualSense natively through the GameController framework, but that framework feeds games, not audio apps, so nothing from it ever reaches MainStage's MIDI input list. The bridge sits in that gap: it reads the pad, applies deadzones and curves, and publishes a virtual port named UCM Bridge that MainStage enumerates alongside any USB keyboard you have plugged in. If you want the full picture of how those ports work on each OS, the virtual MIDI port explainer covers it.
Why a gamepad beats an extra MIDI keyboard on a cramped stage
Most MainStage rigs already have a keyboard — what they lack is hands-free parameter control that does not need a music stand. A gamepad gives you two analogue triggers, two analogue sticks, fourteen buttons and (on a DualSense) a clickable touchpad, in a shape your hands find in the dark. Guitarists velcro one to a mic stand. Keyboard players keep one on the left of the keybed for Patch changes and expression. Vocalists hold one. It fits in a gig bag pocket, runs off a USB-C cable from the same laptop that runs the Concert, and there is nothing to re-patch at soundcheck.
The other practical win is redundancy. A gamepad is a $70 spare you can carry two of, which is the same logic behind the festival redundancy rig — if the expression pedal dies mid-set, the right trigger is already doing the same job.
What you need before you start
- MainStage 3.5 or later — tested through 3.7 on Apple silicon
- macOS 12+ with the built-in IAC Driver (no third-party loopback tool required)
- Universal Controller MIDI — download the macOS build
- A supported controller — DualSense, DualSense Edge, DualShock 4, Xbox Series, Switch Pro or 8BitDo
- A USB-C or micro-USB cable — wired is the right call for a live rig, see the note on Bluetooth below
How do you get the bridge port into MainStage?
Bring the IAC Driver online in Audio MIDI Setup, then launch the bridge — MainStage rescans CoreMIDI at startup, so launch order matters.
1. Enable IAC
Press Cmd-Space, type Audio MIDI Setup, open it, then choose Window → Show MIDI Studio. Double-click the IAC Driver icon and tick Device is online. Add a port called UCM Out if there is not one already. This is a one-time step on each Mac.
2. Launch the bridge, then MainStage
Open Universal Controller MIDI and plug the controller in. Confirm the input scope moves when you push a stick — if it does not, the pad is asleep; on a DualSense hold the PS button for a second. Then open MainStage. If MainStage was already running, quit and relaunch it, because it caches the MIDI device list at launch and will not pick up a port created afterwards.
3. Check the MIDI Activity light
In MainStage's Edit tab, the MIDI Activity indicator sits top-right. Press a face button and it should flicker. If it is dead, open MainStage → Settings → MIDI and make sure the bridge port is not excluded under the device list.
How do you assign a gamepad control in the Layout tab?
Drag a screen control onto the Layout canvas, select it, then click Learn in the Screen Control Inspector and move the physical control you want to bind.
Click Layout in the top-left toolbar. The palette down the left side has Knobs, Faders, Buttons, Keyboards, Drum Pads, Waveforms and Text. For a gamepad rig, the useful set is:
- Four Knobs — left stick X/Y, right stick X/Y
- Two Faders — L2 and R2 analogue triggers
- Eight Buttons — four face buttons, L1, R1, Options, Share
- One XY Pad — the DualSense touchpad, if you have one
Select a knob, and in the Screen Control Inspector on the right open the Hardware Assignment section. Click Learn, push the left stick fully left then fully right, and MainStage captures the incoming CC. Click Learn again to stop. Repeat for each control. This is the part people over-think — you never type a CC number, you just wiggle the thing.
Set the right responsiveness per control type
Still in the Screen Control Inspector, the Responsiveness popup matters a lot for sticks. A spring-loaded stick snaps back to centre when you let go, which is wrong for a filter cutoff you want to leave parked. Options:
- Absolute — the parameter follows the stick exactly. Right for triggers and the touchpad.
- Pickup — nothing moves until the incoming value crosses the stored value. Right for Patch switching, stops values jumping.
- Relative — treats movement as an increment. The cleanest answer for self-centring sticks: push and hold to sweep, release to park.
How do you map a control to a plug-in parameter?
Switch to the Edit tab, select the screen control, and click the target parameter in the Channel Strip Inspector while the Mappings pane is open.
This is the half that is per-Patch. In the Edit tab, pick a Patch in the Patch List, select a screen control in the layout at the top of the window, then look at the Mappings pane in the inspector. Click + (or the parameter-picker row), then click the actual control in the plug-in window or the Channel Strip. MainStage records the mapping and shows it as a named row.
Because mappings are per-Patch, the same knob can be Alchemy's Transform Pad in one song, Retro Synth's filter cutoff in the next, and a reverb send in the third. That is the whole reason to bother with MainStage instead of running the show out of Logic. If you are coming from a Logic Pro gamepad setup, this is the big conceptual difference to internalise.
Patch Change, Set Change and transport on buttons
Select a Button screen control, and in Mappings choose Actions instead of a plug-in parameter. The ones worth binding:
- Next Patch / Previous Patch — d-pad right and left
- Next Set / Previous Set — d-pad up and down
- Panic (All Notes Off) — hold Options, or a dedicated button. Non-negotiable on stage.
- Tap Tempo — R3 (right stick click)
- Playback Play/Stop — Share button, if you run backing tracks from a Playback plug-in
Default mapping table for a MainStage Concert
This is the layout the bridge's default preset produces, and what each control is worth mapping to in MainStage. Everything is on MIDI channel 1 unless you change it in the mapping editor.
| Gamepad input | MIDI | MainStage screen control | Suggested mapping |
|---|---|---|---|
| Cross / A | Note 60 | Button | Patch Change → Next Patch |
| Circle / B | Note 62 | Button | Panic — All Notes Off |
| Square / X | Note 64 | Button | Playback → Play/Stop |
| Triangle / Y | Note 65 | Button | Sustain latch (channel strip) |
| L1 / LB | Note 67 | Button | Previous Patch |
| R1 / RB | Note 69 | Button | Next Patch |
| L2 / LT trigger | CC 1 | Fader | Mod wheel / filter cutoff |
| R2 / RT trigger | CC 2 | Fader | Expression on the active Patch |
| Left stick X | CC 3 | Knob (Relative) | Plug-in macro 1 |
| Left stick Y | CC 4 | Knob (Relative) | Plug-in macro 2 |
| Right stick X | CC 5 | Knob (Relative) | Reverb send |
| Right stick Y | CC 6 | Knob (Relative) | Delay send |
| Touchpad X / Y | CC 16 / 17 | XY Pad | Alchemy Transform Pad |
| D-pad up/right/down/left | Notes 78–81 | Buttons | Set and Patch navigation |
Should you run the gamepad over Bluetooth for a live show?
No — use the cable for anything with an audience, and keep Bluetooth for rehearsal and writing.
Bluetooth is fine for bedroom work, but a crowded venue is the worst possible 2.4 GHz environment: hundreds of phones, the house Wi-Fi, wireless IEMs and the lighting desk all fighting for airtime. The failure mode is not gradual either — you get a clean connection then a dropout at the worst moment. A USB-C cable removes the entire class of problem and charges the pad while you play. Our Bluetooth MIDI latency write-up goes through the jitter sources if you want the detail, and the hot-swap guide covers what to do when a controller dies mid-song anyway.
Three MainStage-specific tricks worth stealing
Layer the triggers against aftertouch
Most stage keyboards have no aftertouch, or have the kind you cannot control. Map R2 to CC 2 and then, in the Channel Strip Inspector, route CC 2 to whatever the patch would have used aftertouch for — filter cutoff on a lead, vibrato depth on strings. Because the trigger is analogue over its full travel, it gives you a smoother ramp than a keybed's aftertouch strip does.
Use the touchpad as an Alchemy Transform Pad
Drop an XY Pad screen control into the layout, Learn its two axes from touchpad X and Y, then map it straight onto Alchemy's Transform Pad in the Mappings pane. It is the closest thing MainStage has to a Kaoss-style morph surface, and it costs nothing extra. The touchpad XY guide covers calibration and two-finger behaviour.
Keep one Concert-wide Panic button
A stuck note in a 2,000-seat room is the only MainStage failure the audience actually hears. Bind Circle to the All Notes Off action in every Patch, label the screen control PANIC in big text, and make muscle memory out of it at rehearsal.
Troubleshooting
- Bridge port missing from MainStage. IAC is offline, or MainStage launched first. Fix IAC in Audio MIDI Setup, quit MainStage, relaunch.
- Learn captures the wrong control. A resting stick is still drifting. Widen the deadzone in the bridge's calibration panel before you Learn, then narrow it again afterwards.
- Knob snaps to a value on Patch change. Change Responsiveness from Absolute to Pickup or Relative in the Screen Control Inspector.
- Face button retriggers on release. Set the Button screen control's type to Momentary rather than Toggle, or invert it — MainStage treats note-off as an event too.
- CC stream looks noisy in automation. Lower the bridge poll rate and increase smoothing. The latency tuning doc has the trade-off laid out.
- Only three presets will save. That is the free-tier limit. Pro removes it, along with the mapping editor and per-binding curves — see Pro vs Free.
FAQ
Does MainStage see a gamepad without any extra software?
No. macOS exposes a DualSense or Xbox pad as an HID game controller, not as a MIDI device, so MainStage never lists it. Universal Controller MIDI converts the HID stream into a CoreMIDI port that MainStage treats as a normal controller.
Which MainStage version does this work with?
MainStage 3.5 and later, including MainStage 3.7 on Apple silicon. The Layout tab, Screen Control Inspector and Assignments & Mappings panes referenced here have been stable across that whole range.
Can one gamepad control multiple Patches differently?
Yes, and that is the point of MainStage. Hardware assignments live at the Concert level, mappings live at the Patch level — so the right trigger is physically bound once, then means filter cutoff in a synth Patch and expression in an orchestral Patch.
Why does my knob jump when I switch Patches?
MainStage picked up the stick position before you touched it. Set the screen control Responsiveness to Pickup or Relative in the Screen Control Inspector, which makes it wait until the incoming CC crosses the stored value.
Do I need Pro for a MainStage rig?
The free build sends the default notes and CCs, which is enough to learn a few knobs. Pro is what you want once you need custom bindings, per-binding curves, more than three saved presets, or a second controller on its own port.
Where to go next
Once the Concert is working, the useful next step is building per-song variations rather than more mappings. Duplicate a Patch, change what the right trigger controls, and you have a second song with zero new hardware setup. If you are also running visuals or backing tracks from the same laptop, the bridge can fan out to a second virtual port so MainStage and your VJ host both see the controller — that is covered in the multi-DAW fan-out doc.
Download Universal Controller MIDI, bring IAC online, and spend fifteen minutes in the Layout tab. The gamepad in your drawer is a better live surface than most of what is on the stand.