Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

umarz317/WatchPointer

Productivity & Utilities

Turn an Apple Watch into a Bluetooth pointer for a Mac, with tap, drag, and scroll.

191
17
Swift
MIT
2 days old

What it does

WatchPointer lets an Apple Watch act as a pointing device for a Mac. The watch's orientation controls the cursor: pointing its top edge toward a spot on the screen moves the cursor there, and the same gestures cover clicking, dragging, right-clicking, and scrolling. The connection is direct Bluetooth between the watch and the Mac, with no Wi-Fi or server involved. The Mac also shows a notch panel with connection state, watch model, battery, and live aim, plus a small light-gun style game called Sky Shot for trying the aim.

This is aimed at people who want a remote-like pointer without carrying a separate device, and who are comfortable building and sideloading Apple apps.

How it works

The watch app samples gravity and gyroscope data 100 times per second. Gravity supplies the vertical component, while accumulated rotation around the vertical axis supplies horizontal movement, so the aim does not drift over time. The Mac receiver projects the aim onto the screen, smooths it with a 1€ filter using the watch timestamps, and moves the cursor on its own thread. Clicks are anchored to the aim at the moment the thumb touches the watch, so the tap's impact does not shift the cursor. The Bluetooth protocol is documented at the top of Mac/Sources/WatchPointer/Receiver.swift.

Quick start

Requirements: a Mac on macOS 14 or later with Bluetooth, an Apple Watch on watchOS 11 or later, and Xcode 16 or later to install the watch app (requirements).

  1. Start the Mac receiver from the repository:

    cd Mac
    swift run WatchPointer
    

    On first run, allow Bluetooth access and grant Accessibility access to the terminal app in System Settings › Privacy & Security › Accessibility. Accessibility is what permits cursor movement; run the command again after allowing both (Mac receiver steps). The receiver appears in the notch, or at the middle of the menu bar on Macs without a notch.

  2. Open Watch/WatchPointer.xcodeproj in Xcode, select your signing team under Signing & Capabilities, and change the bundle identifier if Xcode asks. Choose the Apple Watch as the run destination and press ⌘R (watch app steps).

  3. Open WatchPointer on the watch and tap Pair next to your Mac. Then hold the watch like a remote with its top edge (12 o'clock) toward the screen, point at the middle of the screen, and tap Center to align (pointing steps).

  4. Optional: open Game/index.html in a browser, press F for full screen, and tap the watch to start Sky Shot (Sky Shot).

Settings

The Mac receiver accepts tuning arguments at launch without reinstalling (settings):

swift run WatchPointer 1.2          # speed: higher means less turn to reach the edges
swift run WatchPointer steady=0.6   # steadier when holding still (default 0.8)
swift run WatchPointer quick=0.02   # less lag on fast moves (default 0.01)

Usage constraints

  • Both the Mac and watch minimum OS versions and Xcode 16 are required; the watch app must be built and installed through Xcode, and signing may require adjusting the bundle identifier.
  • The watch only connects to the Mac it is paired with until unpaired.
  • Wrist detection can lock the watch when it is off your wrist during use; adjusting Passcode › Wrist Detection and the display wake duration is suggested for handheld use (tips).
  • Pairing is chosen on the watch, and the Mac receiver does not ask for confirmation. Any nearby Bluetooth device speaking the protocol could move the cursor while the receiver is running, so quit it when done (security note).
  • The project is MIT licensed (license).

HotRepo's take

WatchPointer entered HotRepo's new-project list on 2026-11-07, recording 128 stars and 12 forks, with 23 stars gained in a window that began at 11:45 UTC and was observed at 14:15 UTC that day; the fork gain in that window was zero. Because this is a single short-window new-list record with no full-language daily rank and a very short sampling window, it supports the fact of early attention but not a trend. The technical bet worth noting is different from a trackpad replacement: gravity plus yaw integration gives absolute vertical aim, and timestamp-based filtering addresses latency and jitter rather than raw sensor rate alone. The README's own security note about unconfirmed pairing is the main caveat for anyone trying it in a shared space.

Written by AI from the project's README, updated . The project's own docs are the source of truth.