A macOS-first productivity launcher inspired by Raycast. The first version focuses on local app launching through a keyboard-first command palette.
- Option-Space global launcher hotkey
- Fast local app index for
/Applications,/System/Applications, and user apps - Fuzzy app and command search with arrow-key navigation and Return-to-open
- Direct web URL opening in the default browser, including domains without a scheme
- Basic focused-window commands for left half, right half, maximize, and next desktop
- Menu bar utility with reindex, settings, and quit actions
- Native Settings window for launch-at-login, theme, and shortcut customization
- Dark, light, and system appearance modes
- Local-only indexing; no network service or remote search
./script/build_and_run.shThe script builds the SwiftPM target, stages dist/NovaLauncherDev.app, and opens
the app bundle as a foreground macOS application.
Local run, debug, log, telemetry, and verify commands build the development app
by default as NovaLauncherDev.app. It uses the Nova Launcher Dev display
name, the app.nova-launcher.dev bundle identifier, and a badged development
icon so it can run beside the production Homebrew app.
To stage the production app locally:
./script/build_and_run.sh --bundle --productionThe Homebrew cask lives in suho/homebrew-tap. Tagged releases publish a
versioned app zip and automatically update the cask checksum.
Prerequisites:
- macOS Tahoe 26.0 or newer
- Homebrew
- Xcode Command Line Tools with Swift 6.2 or newer
Install without manually tapping the repo:
brew install --cask suho/tap/nova-launcherIf you previously tapped this repository directly, remove the old tap first:
brew untap suho/nova-launcherTo upgrade:
brew upgrade --cask suho/tap/nova-launcherTo uninstall:
brew uninstall --cask suho/tap/nova-launcherThe release workflow runs when a v* tag is pushed. It builds the app on
GitHub Actions, signs and notarizes the app, creates a GitHub release with
NovaLauncher-<version>.zip, computes the SHA-256 checksum, and dispatches
suho/homebrew-tap to update the cask.
Signing uses fastlane match to install the Developer ID Application
certificate into a temporary CI keychain. Notarization uses an App Store Connect
API key with notarytool.
The suho/nova-launcher repository must have these GitHub Actions secrets:
MATCH_GIT_URL: private fastlane match repository URL.MATCH_PASSWORD: fastlane match encryption password.MATCH_GIT_BASIC_AUTHORIZATION: optional HTTPS credential for the match repo, base64-encoded asusername:token.MATCH_GIT_PRIVATE_KEY: optional SSH private key contents for the match repo.APP_STORE_CONNECT_API_KEY_ID: App Store Connect API key ID.APP_STORE_CONNECT_API_ISSUER_ID: App Store Connect API issuer ID.APP_STORE_CONNECT_API_KEY_BASE64: base64-encoded App Store Connect.p8API key.HOMEBREW_TAP_TOKEN: fine-grained GitHub token scoped tosuho/homebrew-tapwith Contents read/write permission.
The match repository must already contain a Developer ID Application
certificate. CI runs fastlane match developer_id --readonly and only installs
existing signing assets. For a private match repository, provide either
MATCH_GIT_BASIC_AUTHORIZATION or MATCH_GIT_PRIVATE_KEY.
Encode the App Store Connect .p8 key with:
base64 -i AuthKey_<key-id>.p8 | pbcopygit tag v0.1.0
git push origin v0.1.0After adding or rotating signing secrets, run the release workflow manually with an existing tag to replace that release asset and update the tap checksum.

