With Apptivator, you can create global hotkeys that will activate chosen apps (or scripts/anything executable) with predefined shortcuts. This means you can have a shortcut to show/hide/execute any application at any time!
I created this because I liked iTerm2's concept of a "hotkey" window, and I wanted to try alacritty/kitty as my main terminal for a while and found I couldn't live without a window I could activate at any time. So, I created this in order to have a global hotkey to activate/deactivate kitty (and any other apps) at the touch of a button.
It's also sometimes useful to run a script easily via a keyboard shortcut (or sequence of shortcuts).
Simply download the dmg from the releases tab and drag Apptivator.app into your /Applications folder.
It's simple really. Once Apptivator is running you'll see an icon in your menubar - click it to configure Apptivator. You can open the shortcuts window by clicking on the icon and choosing it from the menu.
In the menu, select an application (or executable) from the Finder (or optionally choose from running applications) and register a sequence for it. From now on (as long as Apptivator is enabled) you can activate that application via the sequence you set for it.
Apptivator uses something called a "shortcut sequence" to define hotkeys. This means that you can define a sequence of shortcuts (minimum 1) to activate your application. So if you set the sequence to ⇧⌘A + ^B, to activate your application you would need to first press (and release) ⇧⌘A, and then press ^B. Apptivator's icon will turn red if you're currently in a shortcut sequence.
If you want your applications to appear on every space, I recommend allowing the application to appear on all spaces. This can be done by clicking on the icon in the dock and selecting -> Options -> All Desktops.
Apptivator provides some neat options:
- Automatically hide when app loses focus
- When enabled, if the application loses focus then Apptivator will automatically hide it for you.
- Show on the screen with mouse
- When this is on, then when activated the application will show up on whichever monitor your mouse is on.
- Hide when active and sequence is fired
- If this is set then when you complete the sequence the application will hide if it's shown, or be shown if it's hidden.
- Launch app if it's not running
- When set, if the application is fired then Apptivator will attempt to launch it.
- Launch Apptivator at login
- self-explanatory
Extra Overrides or Hidden Settings
Apptivator has some experimental overrides that can be toggled via the Terminal (defaults write ..., etc). Look under the "Experimental Overrides" section at Apptivator -> About for more information.
- Nothing works, no shortcuts do anything
- Make sure that Apptivator is enabled! You can enable/disable it by right-clicking on the menu bar icon - you can see if Apptivator is off/on by left-clicking on the icon to show the menu. The first item in the menu will display whether Apptivator is on or off.
- When I activate my app its window doesn't appear
- Set the application to appear on all spaces. This can be done by clicking on the icon in the dock and selecting ->
Options->All Desktops(see #12 for a discussion and ways to automate this).
- Set the application to appear on all spaces. This can be done by clicking on the icon in the dock and selecting ->
- Activating my app always moves my computer to another space
- This won't happen if the
Options->All Desktopsis set for the application. - The behaviour can be adjusted by going to
System Preferences->Mission Control-> and enabling/disabling the checkbox:When switching to an application, switch to a Space with open windows for the application
- This won't happen if the
- Apptivator doesn't run my executable/script
- Ensure that the file has execute permissions! Run
chmod +x path/to/fileto be sure.
- Ensure that the file has execute permissions! Run
- Apptivator doesn't wait long enough for me to press every shortcut in the sequence
- You can easily increase the time Apptivator will wait between keypress in a shortcut sequence - this is an override that must be set via the terminal:
defaults write com.acheronfail.apptivator sequentialShortcutDelay -float 1sets the delay to 1 second. Look under the "Experimental Overrides" section atApptivator->Aboutfor more information.
The app requires macOS 13 or later. Build with Xcode 26.3 or later.
Release builds are universal: the application and its dependencies contain both
arm64 (Apple silicon) and x86_64 (Intel) code. Replace the old Intel-only app
in /Applications with the new build to remove macOS's Intel-app support warning.
Dependencies are managed with Swift Package Manager; Sparkle supplies a universal binary framework. Open
Apptivator.xcodeproj and Xcode resolves them automatically; Carthage is no longer
needed. Commit Apptivator.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
when updating dependencies.
| Dependency | Version / revision | Migration |
|---|---|---|
| Sparkle | 2.9.6 | Signed automatic updates hosted on GitHub Releases |
| SwiftyJSON | 5.0.2 | Keeps the existing configuration JSON format |
| AXSwift | 0.3.2 | Native source build for both architectures |
| LaunchAtLogin Modern | 1.1.0 | Uses macOS's login-item service; removes the legacy helper app |
| CleanroomLogger | d732baead85b77471505daf290212700b9d87a05 |
Post-7.0.0 revision with a supported Swift package manifest; preserves rotating logs |
| MASShortcut | 6f2603c6b6cc18f64a799e5d2c9d3bbc467c413a |
Post-2.4.0 revision with Swift package support; replaces the custom fork with a validator subclass |
MASShortcut and CleanroomLogger have no tagged release containing their current Swift package manifests, so they use fixed upstream revisions. Dependencies and GitHub Actions are pinned for reproducible builds. Third-party licenses are included in the app's resources.
After upgrading, check Launch Apptivator at Login again if you used the old
login helper. macOS manages the new registration under System Settings → General
→ Login Items. The existing shortcut configuration stays at
~/Library/Preferences/Apptivator/configuration.json.
Master pushes and manual Build runs use
acheronfail/dist-tools/actions/apple-release@v1 for Developer ID signing,
notarization and ZIP/DMG packaging. Pull-request builds use ad-hoc preview
packages. See Signing and releases for credential setup.
The build checks every bundled Mach-O for both arm64 and x86_64. Final
packages in dist/ retain these names:
Apptivator-<version>-universal.dmgApptivator-<version>-universal.zipApptivator-<version>-universal-SHA256SUMS.txt
The bundle identifier remains com.acheronfail.apptivator. Switching from the
previous self-signed identity may require granting Accessibility access again.
The Build workflow runs on pushes and pull requests to master, and can also be
started manually. It runs tests on a GitHub-hosted Apple silicon Mac and uploads
the universal packages as workflow artifacts.
Push a tag matching vX.Y.Z to run the Release workflow, for example:
git tag v1.7.0
git push origin v1.7.0The release job validates the tag, runs tests, builds fresh universal artifacts,
and creates a GitHub release with those artifacts attached. The tag sets
CFBundleShortVersionString; a shared time-based build number sets CFBundleVersion.
Only the release job has contents: write permission. It uses GitHub's automatic
GITHUB_TOKEN to publish the release. The certificate secrets and Sparkle signing configuration described in
RELEASING.md are required for publishing. The release also includes
a signed appcast.xml; Sparkle uses it to discover and verify updates. Install the
first Sparkle-enabled release manually, then use Check for Updates… from the
menu. Sparkle asks permission to check automatically.

