v1.0 · iPhone × Mac · Bluetooth

Code from anywhere in the room.

Vibe turns your iPhone into a Bluetooth trackpad & remote keyboard for your Mac. Pace, recline, project — your couch is your new desk.

Stuck at the desk.

The old way: you, hunched over the keyboard.

Pick up the phone.

Lean back. The trackpad is in your hand.

Walls become screens.

Pace the room. Talk to the AI. Steer with your thumb.

— What it does

Every gesture, every keystroke. Wirelessly.

The whole screen is the trackpad.

Pan. Tap. Two-finger right-click. Two-finger scroll. Every part of the iPhone surface is touch-sensitive — no buttons, no chrome, just leather-feel control.

Type on phone. Land on Mac.

Open the send sheet, type a paragraph in any language, hit Send. Vibe injects the text directly via CGEvent.keyboardSetUnicodeString — your clipboard is never touched, Chinese and emoji land intact.

Volume buttons become Return.

Both volume keys map to on the Mac. Pace the room, point the projector at the wall, and confirm prompts without breaking stride.

— Under the hood

Native. Local. No cloud.

Vibe is two Swift apps and one shared protocol package. Your gestures travel ten feet over Bluetooth and stop there.

~20ms
End-to-end latency
iPhone touch → Mac cursor
0kB
Data sent to any server
everything is local BLE
2apps
iOS Central, Mac Peripheral
shared GATT protocol
14tests
Wire-format round-trip tests
passing on every commit

BLE GATT, written from scratch

One write per command, little-endian. 0x01 move, 0x02 button, 0x03 scroll, 0x21 key, 0x22 text. Drops are tolerated where it makes sense; buttons and text use Write With Response.

Accessibility, asked for once

The Mac side uses CGEvent.post on the system HID tap. The grant is asked for at first launch and persists across rebuilds — Vibe pins its code-signing identity so macOS TCC never has to second-guess.

— Get Vibe

Two apps. One pairing.

Install both. Pair once. Stand up.

Requires iOS 16+ · macOS 14+