Minimum requirements
HopTab requires the following to run:- macOS 14.0 (Sonoma) or later
- Accessibility permission (prompted on first launch)
HopTab uses Swift 5.9 and is built with Xcode 15+. You only need to know this if you’re building from source.
Building from source
If you want to build HopTab from source instead of downloading the pre-built binary, you need:- Xcode 15 or later
- macOS 14.0 (Sonoma) or later
Permissions
Accessibility permission
HopTab requires Accessibility permission to:- Detect global keyboard shortcuts (Option+Tab, Option+`)
- Switch between your pinned apps
- Raise windows to the front when activated
How to grant Accessibility permission
- Launch HopTab for the first time
- A system dialog will appear asking for Accessibility access
- Click Open System Settings
- In System Settings > Privacy & Security > Accessibility, toggle HopTab on
- Return to HopTab — it will automatically detect the permission and start working
- Open System Settings
- Go to Privacy & Security > Accessibility
- Click the + button and add HopTab
- Toggle HopTab on
HopTab polls for permission changes every second until Accessibility access is granted. Once enabled, the app starts immediately.
Why Accessibility is required
HopTab uses a CGEvent tap to intercept global keyboard events. This is required to:- Swallow the shortcut so it doesn’t reach other apps (e.g., prevent Cmd+Tab from triggering the native app switcher)
- Detect modifier key state in real-time (when you hold Option and when you release it)
- Cancel on Escape to dismiss the switcher without activating an app
Why not use NSEvent.addGlobalMonitorForEvents?
Why not use NSEvent.addGlobalMonitorForEvents?
NSEvent.addGlobalMonitorForEvents can listen to global events, but it cannot swallow them. That means the shortcut would still reach other apps, and the native Cmd+Tab would still trigger alongside HopTab.CGEvent.tapCreate is the only API that lets you intercept and suppress keyboard events, which is critical for a custom app switcher.No App Sandbox
HopTab does not run in the macOS App Sandbox. This is intentional:CGEvent.tapCreate(.defaultTap)requires raw event access, which is incompatible with the sandbox- App Sandbox would prevent the event tap from starting
The
xattr command is safe and only removes the macOS quarantine flag. It doesn’t disable any security checks — it just tells macOS you trust this specific app.