A radial app switcher for macOS, inspired by the emote wheel in Overwatch. Hold a key combo to summon a ring of your active apps, flick toward the one you want, and release to switch. No clicking, no dock hunting β just muscle memory.
Fully customizable β ships with several built-in presets:
You need a Mac running macOS 13 or later with the Xcode command-line tools installed.
# 1. Clone the repo
git clone <repo-url> && cd jazzhands
# 2. Build and install (puts JazzHands.app in ~/Applications)
bash build.sh
# That's it. JazzHands is now running in your menu bar (look for the icon).On first launch you'll be asked to grant two permissions:
- Accessibility β lets JazzHands listen for your hotkey and raise windows. Go to System Settings β Privacy & Security β Accessibility and toggle JazzHands on.
- Screen Recording β lets JazzHands capture window thumbnails for Fingers. Same path but under Screen Recording.
After granting both, restart JazzHands from the menu bar icon (Quit β relaunch, or just run bash build.sh again).
| Action | What happens |
|---|---|
| Hold Set Key Combination | Summons the radial ring of active apps |
| Move mouse | Highlights the app in that direction |
| Release Option | Switches to the highlighted app |
| Quick tap (< 200ms) | Toggles to the last-used app |
| Tab (while held) | Cycles selection clockwise |
| Backtick (while held) | Cycles selection counter-clockwise |
When you hover over a multi-window app for 500ms (configurable), a second ring fans out showing individual windows with thumbnails. Move outward to pick a specific window, or move to a different app to switch targets. Release to activate.
Right-click (or click) the menu bar icon β Settings to configure:
- Shortcut β change the trigger key combo (default: Option + Space)
- Appearance β ring colors, glow, opacity, icon size, segment borders
- Behavior β hover delay, cursor sensitivity, dead zone, fingers toggle
- Animation β parent wedge slide on fingers entry
- Presets β save and load full appearance configurations
Builds a debug version of JazzHands, installs it to ~/Applications, and launches it immediately. If a running instance is detected it will be killed first. The bundle is signed with your Apple Development identity (falls back to ad-hoc if none is found).
bash build.shUse this for day-to-day development and testing.
Compiles an optimized release build, creates a signed .app bundle and a .dmg installer in the release/ directory. With a Developer ID Application certificate it will also notarize both artifacts via Apple's notary service.
# Full signed + notarized release (requires Developer ID Application certificate)
bash release.sh
# Local release build without notarization
bash release.sh --localBefore your first notarized release, store your credentials once:
xcrun notarytool store-credentials "notarytool-profile" \
--apple-id YOUR_APPLE_ID \
--team-id YOUR_TEAM_ID \
--password YOUR_APP_SPECIFIC_PASSWORD- macOS 13.0+
- Swift 5.9+ (Xcode 15+ or standalone toolchain)





