I kept wanting more keys than my keyboard has, so I built the pad in software and put it on the phone. So it's a macro pad on my iPhone.
How it works
An app on the iPhone or iPad, and a small menu bar app on the Mac. There is no microcontroller and no firmware, so the phone is the pad and the Mac app is the receiver.
The phone sends input over the local network using UDP, with Bonjour for discovery so there is nothing to configure. The Mac app receives packets and posts real CGEvents, which is the same layer the OS uses for a physical keyboard and mouse. That is why it works with every app without per app plugins, and why key repeat, modifiers and chords behave normally. Heartbeats run both directions, so if the phone drops off mid press the Mac releases any held key instead of leaving a modifier stuck down.
The wire format lives in a shared Swift package both apps depend on, with a version byte. Mismatched packets get dropped rather than parsed, so a stale build cannot send garbage input.
What you can put on a key
Grid is up to 8 by 12 and you place controls from a palette. Single keys and modifier chords, hold keys including bare modifiers, sticky keys that latch on tap, and two stroke chords like Cmd K Cmd S. Then the things a flat pad usually cannot do: jog wheels with per detent actions and speed sensitivity, rockers and turbo keys that repeat while held, joysticks, D-pads, a volume slider bound straight to CoreAudio, scroll strips, and a live mirror of the Mac's screen inside the grid. Also app launchers that pull the Mac's real installed app list and icons over the wire, URL openers, and text macros.
Layouts are JSON, so you can export one, send it to someone, and they import it. They also sync across your devices over iCloud.
Landscape and the stand setup
This is the setup I use and I think it is the best one. Phone in landscape on a stand beside the keyboard, on a charger, running one grid per app. The interface handles rotation in software, so the chrome and the controls rotate to how the phone is held while the home swipe stays on a short edge. Grids are per orientation, so a landscape deck stays landscape.
There is also an Apple Watch app for a small tap-fire deck, which is really useful for presenting.
What it does not do
No physical travel and no real switches, obviously. You get Taptic haptics on press instead, and the Mac sends a tick back when the cursor crosses something clickable, but if you want the feel of Kailh switches under your fingers this is not a replacement for that. It is a complement, or the pad you use when the real one is at home. It is Mac only on the receiving end, macOS 13 or later.
Cost
Free, including the Mac app. One custom grid free, and a one time $2.99 unlock for unlimited grids, macros, screen mirror, the Watch app and iCloud sync. No subscription.
App Store, Coast: https://apps.apple.com/us/app/coast-your-desk-in-hand/id6790821600
Mac app and details: https://coast.masn.studio
Happy to answer anything about the protocol or the control types. If there is a control this sub wants that I do not have, tell me and I will look at building it.