A big friendly hand for your cursor. Poke included.
A native macOS menu bar app that replaces the system cursor on demand with a large, highly visible hand pointer — perfect for screen shares, recordings, and live demos. Click, and the hand pokes. Part of the Quiet Apps family.
Install · Features · Usage · Build from source · FAQ
You're presenting. You say "click here" — and half the room can't find your tiny arrow on a 4K screen.
Quiet Pointer lives in your menu bar. One hotkey (⌃⌥P) swaps the system cursor for a big cartoon hand that everyone can follow. Click, and the hand does a satisfying poke — click faster and the pokes get wilder. Only the cursor's appearance changes: clicking, dragging, selecting, and navigating all work exactly as before. No cloud. No account. No telemetry.
Current release: version 1.1.4, build 6 — see CHANGELOG for per-build notes
- System-wide cursor replacement — a cartoon hand pointer (white glove) atop a long fading shadow beam floats above every app and follows the mouse pixel-for-pixel; the fingertip is the hotspot
- Two hand styles — Classic glove (upright pointer) or Comic glove (diagonal "mouse cursor" glove with a striped cuff and a straight shadow beam along the arm's axis)
- Replaces the real arrow — while enabled, the macOS cursor is hidden (
CGDisplayHideCursor) and the hand stands in; toggling off restores the arrow instantly - Vector-drawn in code — stays crisp at any size and display scale, no bundled images
- Multi-monitor — one overlay per display, rebuilt automatically when displays change; the hand crosses screens seamlessly
- Click "poke" animation — a single click just moves the pointer; rapid repeat clicks fire a comic burst at the fingertip that cycles through four styles (sparkle → spikes → jagged ring → double-sparkle) and grows with the click count
- Two click motions — Poke (forward jab + swell) or Press (the hand + shadow recoil down the shadow's axis and bounce back against the clicked point)
- Four expressiveness modes — Shy finger → Gentle nudge → Bold poke → In your face — each with its own jab distance, scale, speed, and wobble
- Speed-reactive intensity — rapid clicks ramp the poke up to 3× the base animation
- Works everywhere — clicks are caught with global
NSEventmonitors, so pokes fire no matter which app is focused
- Color — White (soft grey shadow, grey/blue bursts) or Black (dark shadow beam, black bursts); the glove itself is always white
- Hand size — slider in Preferences, from subtle to billboard
- Shadow length — slider from a short stub to a very long beam
- Expressiveness slider — the same four-stop slider in the menu bar menu and in Preferences
- Global hotkey — default
⌃⌥P, remappable in Preferences; works even when Quiet Pointer isn't focused - Launch at login — optional, one toggle in Preferences; the hand also restores its last on/off state on relaunch
- Menu bar agent — no Dock icon (
LSUIElement+.accessorypolicy) - 100% Swift — SwiftUI Preferences + AppKit overlay
- No external dependencies — Apple frameworks only
- No permissions required — no Accessibility, no Input Monitoring, no network
Note: Quiet Pointer is not code-signed with an Apple Developer ID. macOS Gatekeeper will warn on first launch. The steps below work around it automatically.
brew tap quietapps/quietpointer
brew install --cask quietpointerThe cask strips the macOS quarantine attribute on install so Gatekeeper does not block launch. The tap is at quietapps/homebrew-quietpointer.
- Grab the latest
QuietPointer-*.zipfrom Releases - Unzip → drag Quiet Pointer.app into
/Applications - Strip the quarantine attribute (or right-click → Open once):
xattr -cr "/Applications/Quiet Pointer.app"- Launch Quiet Pointer — the hand icon appears in your menu bar
- Click it (or press
⌃⌥P) and the hand takes over your cursor
macOS silently blocks unsigned binaries on first launch. Fix it once with any of these:
Option A — Right-click open (no Terminal needed)
- Open Finder →
/Applications - Right-click Quiet Pointer.app → Open
- Click Open in the warning dialog
- macOS remembers your choice for every future launch
Option B — Terminal
xattr -cr "/Applications/Quiet Pointer.app"Option C — System Settings
- Try to launch the app — macOS shows a blocked notification
- Open System Settings → Privacy & Security
- Scroll to the message about Quiet Pointer
- Click Open Anyway
brew update
brew upgrade --cask quietpointerDownload the newer zip from Releases, drag the new Quiet Pointer.app over the old one in /Applications, then run:
xattr -cr "/Applications/Quiet Pointer.app"Your preferences are stored separately and are unaffected by app updates.
# Remove the app and its preferences (via the cask's zap stanza)
brew uninstall --cask --zap quietpointer
# Drop the tap
brew untap quietapps/quietpointer
# Purge Homebrew's download cache
brew cleanup --prune=all -sOptional manual cleanup if you skipped --zap:
defaults delete app.quiet.QuietPointer 2>/dev/null
rm -rf ~/Library/Preferences/app.quiet.QuietPointer.plist \
~/Library/Caches/app.quiet.QuietPointer \
~/Library/Saved\ Application\ State/app.quiet.QuietPointer.savedState# Move the app to Trash
rm -rf "/Applications/Quiet Pointer.app"
# Remove preferences
defaults delete app.quiet.QuietPointer 2>/dev/null
rm -rf ~/Library/Preferences/app.quiet.QuietPointer.plist \
~/Library/Caches/app.quiet.QuietPointer \
~/Library/Saved\ Application\ State/app.quiet.QuietPointer.savedState| Action | How |
|---|---|
| Show / hide the hand | Click the menu bar icon → Show hand, or press ⌃⌥P |
| Poke | Click anything — rapid clicks poke harder |
| Set expressiveness | Menu bar → drag the Shy finger ⟷ In your face slider |
| Switch hand style | Menu bar → Hand style, or Preferences → Pointer |
| Change shadow / burst color | Menu bar → Color (White / Black) |
| Change click motion | Preferences → Clicks → Click motion (Poke / Press) |
| Adjust shadow length | Menu bar slider, or Preferences → Pointer |
| Toggle click animation | Menu bar → Animate on click |
| Remap the hotkey | Menu bar → Preferences… → Global Hotkey → press new keys |
| Check for updates | Menu bar → Check for Updates… |
| Quit | Menu bar → Quit |
Quiet Pointer is a real overlay drawn on top of the whole screen, so it appears in full-screen captures and recordings — share Entire Screen in Zoom/Meet, full-display capture in OBS/Loom/QuickTime.
It will not appear when you share a single application window: macOS composites single-window capture from that window's own content only and excludes everything drawn outside it — including the overlay and the real system cursor. Share the whole screen to show the hand.
None. Quiet Pointer needs no Accessibility, no Input Monitoring, and no network access.
- The global hotkey uses Carbon's
RegisterEventHotKey, which works without Accessibility - Mouse tracking and click detection use global
NSEventmonitors for mouse events, which macOS allows without special permission - Zero network calls — no analytics, no telemetry
| Requirement | Implementation |
|---|---|
| Cursor replacement | One borderless, transparent, click-through NSWindow per display, above the shielding-window level, draws the hand and hides the real cursor with CGDisplayHideCursor |
| Follows the mouse | Mouse events wake a per-display CADisplayLink; each frame pins the fingertip to NSEvent.mouseLocation, so movement is frame-synced (high-rate mice coalesce to one update per refresh) and the link pauses when the mouse is idle |
| Click poke | Mouse-down monitors trigger a CAKeyframeAnimation jab (translate + scale + wobble) anchored at the fingertip, plus a CAShapeLayer starburst |
| Speed reactivity | ClickMonitor keeps a sliding window of recent click timestamps and scales the animation up to 3× |
| Global hotkey | Carbon RegisterEventHotKey — works unfocused, no Accessibility permission needed |
| Multi-monitor | One overlay per NSScreen; the set is rebuilt on didChangeScreenParameters |
| No Dock icon | LSUIElement + .accessory activation policy |
The hand itself is vector-drawn in code (HandCursorRenderer), so it stays crisp at any size and display scale and ships no bundled image.
- macOS 26.0 (Tahoe) or later
- Xcode 26.0 or later
No paid Apple Developer account required — the project uses automatic signing with any personal team.
git clone https://github.com/quietapps/QuietPointer.git
cd QuietPointer
open QuietPointer.xcodeprojPress ⌘R in Xcode. The hand icon appears in your menu bar.
Or from the command line:
xcodebuild -project QuietPointer.xcodeproj -scheme QuietPointer -configuration Release buildQuietPointer/
├── main.swift # Accessory app bootstrap (no dock icon)
├── AppDelegate.swift # Status item, menu, hotkey wiring
├── Info.plist # LSUIElement, bundle config
├── QuietPointer.entitlements
├── Managers/
│ ├── CursorManager.swift # Overlay lifecycle, mouse tracking, hide/show
│ ├── HotKeyManager.swift # Carbon global hotkey
│ └── ClickMonitor.swift # Click-cadence → intensity
├── Models/
│ ├── PokeMode.swift # Expressiveness modes, click motions, burst designs
│ ├── HandStyle.swift # Hand styles + pointer colors
│ ├── Preferences.swift # UserDefaults-backed settings
│ └── KeyCodeNames.swift # Key-code → display string
├── Cursor/
│ ├── HandCursorRenderer.swift # Vector hand drawing (both glove styles)
│ ├── HandCursorView.swift # Hand layer + poke animation
│ └── CursorOverlayWindow.swift # Transparent all-display overlay
└── Views/
├── PreferencesView.swift # SwiftUI preferences + hotkey recorder
└── PreferencesWindowController.swift
No external dependencies — Apple frameworks only (AppKit, SwiftUI, Carbon hotkeys, CoreAnimation).
All settings are in Preferences (menu bar icon → Preferences…). Reset to defaults:
defaults delete app.quiet.QuietPointerDoes Quiet Pointer send any data anywhere? No. Zero network calls. No analytics, no telemetry.
Does it change how clicking works? No. Only the cursor's appearance changes. Clicking, dragging, selecting, and navigating all behave exactly as before — the overlay is fully click-through.
Why doesn't the hand show up in my Zoom share? You're sharing a single window. macOS excludes everything drawn outside that window from single-window capture — including the overlay and the real cursor. Share your entire screen instead.
Does it need Accessibility permission?
No. The hotkey uses Carbon's RegisterEventHotKey and mouse tracking uses global NSEvent monitors — neither requires Accessibility or Input Monitoring.
Does it work with multiple displays? Yes. One overlay per display, rebuilt automatically when you plug or unplug monitors. The hand crosses screens seamlessly.
The poke is too much (or not enough). Drag the Shy finger ⟷ In your face slider in the menu bar menu (or the matching slider in Preferences → Clicks). You can also disable Animate on click entirely.
Does it slow my Mac down? No. Movement is display-link driven — at most one update per screen refresh, no matter how fast your mouse reports — and the link pauses about a second after the mouse stops. CPU is 0 % while the hand is idle, and zero when it's hidden.
How do I quit? Click the menu bar icon → Quit.
Interaction design inspired by Pokey. All code and art here are independent and original — no Pokey assets are used.
The classic glove pointer is derived from "MultiTouch-Interface Mouse-theme 1-finger" by BenBois on openclipart.org, released into the public domain. Its SVG path data is parsed and re-rendered by HandCursorRenderer; the comic glove is original traced vector artwork rendered the same way.
MIT © Quiet Apps