Turn any device into a Keyboard Maestro remote.
Examples:
Getting Started
- Download KMDeck
- Set up some buttons in the app
- Open the interface on any device
- Start controlling your Mac!
The Desktop App
This is where you'll set up a grid of buttons to appear on another device. You can choose the number of buttons and add multiple pages. Any changes made in the Editor are immediately reflected on the other device. The button grid colours are fully customisable.
Here's my Logic Pro setup in the KMDeck Editor. It automatically appears on my phone whenever Logic is activated.
Clicking on an empty button in the grid presents the configuration window, where you can set the appearance and behaviour of the button.
There are various button types to choose from:
- Macro - triggers a Keyboard Maestro macro, with optional parameter.
- Hotkey - simulates a keypress
- Run Shortcut - executes a macOS Shortcut, with optional parameter.
- Open - launch apps and open files or folders.
- MIDI - Send PC/CC/Note on/off messages.
- Switch Deck - switches directly to another saved button set up (aka "Deck")
- Back - switches to the previous Deck
All button types (with the exception of Back) have toggle and single/double/long press detection support.
As you can see, GIFs are supported.

The KMDeck app uses ~0.3% CPU, so you can leave it running in the background. The server will pause when your mac sleeps and resume when it wakes.
The Button Interface
Grab the IP address from the URL button and open it on any device connected to the same WiFi network. If you open it in iOS Safari and select Share → Add to Home Screen, you'll be able to use the resultant bookmark to access the full-screen interface, which feels very much like using a native iOS app.
This is where you press the buttons, and...
- Swipe up to enter the Deck Selection screen
- Swipe left/right to navigate between pages
- Swipe down to refresh the interface
Oh, and there's also a web version that can be used to trigger macros from anywhere in the world!
Special thanks to @_jims for his role as Beta-Tester-In-Chief! ![]()



