SwiftUI • MultipeerConnectivity • WatchConnectivity

Presentation Remote for Apple Fans

Control Keynote, PowerPoint, or Google Slides without dongles or cloud accounts. ClickerRemote pairs your Mac, iPhone, and Apple Watch using encrypted local networking so every tap lands exactly when you need it.

Mac 1.2ClickerRemoteReceiver
iOS 1.6ClickerRemote
watchOS 1.6ClickerWatch

Designed for stage control, not slide anxiety

Swift 5.9, SwiftUI, and Apple’s haptics toolkit combine for a tactile experience that mirrors the clickers pros carry on stage. Every surface follows the liquid glass aesthetic outlined in our product design language.

01

Peer-to-peer reliability

No external servers, accounts, or analytics. The Mac advertises Bonjour services and the iPhone joins instantly on the same network.

02

Cross-device gesture flow

Apple Watch flick gestures trigger the same RemoteCommand used by the iPhone UI, routed through WatchConnectivity with built-in lockout guards.

03

Timer with haptic cues

Set presentation timers and feel pulses as milestones approach—ideal for keynotes with tight run-of-show schedules.

04

Menu bar minimalism

The macOS receiver lives in the menu bar, requests accessibility permissions once, and injects previous and next keystrokes for any frontmost app.

One system, three tailored experiences

Each binary ships with the right distribution channel: App Store for iPhone + Watch, notarized DMG for Mac. Shared Swift packages keep RemoteCommand and networking logic aligned.

iOS logo

ClickerRemote (iPhone)

  • Liquid glass vertical remote layout
  • Dark-only UI for backstage visibility
  • Subscription-ready with trials
  • Automatic Mac discovery via MultipeerConnectivity
macOS logo

ClickerRemoteReceiver (Mac)

  • Signed + notarized DMG workflow
  • Menu bar controller and keystroke bridge
  • Hardened Runtime, accessibility permissions
  • DMG distributed on GitHub with Homebrew tap
Apple Watch screenshot

ClickerWatch (Apple Watch)

  • Installed automatically with iOS app
  • Gesture-based gestures with inversion option
  • Auto-toggle tied to wrist raise/lower
  • Workout session keeps app alive
  • Relays commands through iPhone instantly

Simple onboarding before showtime

Install the Mac App and iOS app. Test the iOS or Watch app. Connect your Mac to the screen.

Install the Mac receiver

Download the notarized DMG, drag `ClickerRemoteReceiver` to Applications, and grant accessibility control when prompted.

Pair the iPhone remote

Install from the App Store, open ClickerRemote, and select your Mac from the Bonjour list. No manual IP addresses required.

Activate the Watch

Enable the Watch companion from the iOS app. Wrist flicks become precise previous/next commands with a 3-second lockout.

Present with confidence

Swipe or tap to advance slides while the timer, haptics, and liquid glass UI keep you focused on your story.

Install via Homebrew

Get the Mac receiver up and running in seconds with Homebrew. No manual downloads or drag-and-drop required.

$ brew tap douinc/clicker https://github.com/douinc/clicker
$ brew install --cask clicker-remote-receiver

Architecture snapshot

Every layer is documented in the GitHub wiki and compiled via XcodeGen for reproducible builds.

Stack

  • Language: Swift 5.9 with shared RemoteCommand models
  • UI: SwiftUI
  • Networking: MultipeerConnectivity + WatchConnectivity
  • Build: XcodeGen + `just` automation
  • Platforms: macOS 14+, iOS 18+, watchOS 10+

Distribution

  • iOS & Watch: App Store via TestFlight pipeline
  • Mac: Signed + notarized DMG
  • Homebrew tap: Easily download and update ClickerRemoteReceiver Mac app using homebrew

Security posture

  • Local only: Commands stay on your network
  • Accessibility: Minimal permissions, once per Mac
  • Hardened Runtime: Required for notarization
  • Watch lockout: Prevents accidental slide jumps

Need help or ready to contribute?

Everything—Swift code, wiki docs, and distribution scripts—lives on GitHub. File issues, follow TestFlight betas, or dive into the wiki if you want to extend Clicker to your stage setup.