Skip to content

About

Native keyboard-first app and window switcher for macOS in Swift 6 with live ScreenCaptureKit thumbnails across Spaces, instant search, and customizable global hotkeys.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

HyperSwitch

English | 简体中文

A keyboard-first app and window switcher for macOS. Hold a hotkey to browse running apps or windows with live thumbnails, then release to switch — similar in spirit to classic app switchers, rebuilt natively for current macOS.

HyperSwitch is a menu-bar (agent) app: no Dock tile of its own by default, runs in the background, and opens Settings from the menu-bar icon.

Version 1.0.1
Platform macOS 26.0+, Apple Silicon (arm64)
Bundle ID com.hyperswitch.HyperSwitch
Languages English, Simplified Chinese
License MIT

Screenshots

Every Settings pane is available in English and Simplified Chinese. Switch the interface language in Settings → General → Language.

English 简体中文
General — window switcher hotkeys, delay, filters General 通用
App Switcher — ⌘ Tab previews and delays App Switcher 应用切换器
Interaction Interaction 操作体验
Appearance Appearance 外观

Features

App & window switcher

  • Global hotkeys to open an app switcher or window switcher
  • Live thumbnails (with Screen Recording) and optional full-size preview
  • Search, arrow-key navigation, Return to activate, Escape to cancel
  • Space / desktop indicators for off-Space windows
  • Configurable delay, thumbnail size, appearance, and interaction options

Settings

  • General — launch at login, language, presence / menu-bar behaviour
  • App Switcher — hotkeys, delay calibration, include filters
  • Interaction — keyboard and pointer behaviour while the switcher is open
  • Appearance — theme, colours, layout
  • About — version and permission status

Requirements

  • macOS 26.0 or later
  • Apple Silicon Mac
  • Xcode with command-line tools (to build from source)
  • XcodeGen (brew install xcodegen locally)

Permissions

Permission Required? Purpose
Accessibility Yes Event tap, raise windows, drive the switcher
Screen Recording Optional Live thumbnails and window titles

Grant both in System Settings → Privacy & Security. Without Accessibility, HyperSwitch cannot operate.


Install (from source)

# Optional but recommended: stable local signing so permissions survive rebuilds
./scripts/setup-signing.sh

# Debug build → /Applications/HyperSwitch.app
./scripts/build.sh

# Release build
CONFIG=Release ./scripts/build.sh

# Always launch via Launch Services
open /Applications/HyperSwitch.app

Important: Do not run the binary from a shell. That inherits the terminal’s TCC grants, so permissions will look granted when they are not.

Release package (DMG)

./scripts/release.sh

Produces dist/HyperSwitch.dmg. With a Developer ID Application certificate and Notary credentials (HyperSwitchNotary profile), the script also signs and notarizes. Otherwise it keeps a local / ad-hoc signature.

Pushes to main run GitHub Actions, which publish the same DMG on Releases. CI builds are typically ad-hoc signed. After downloading a DMG from a browser or AirDrop, clear quarantine if Gatekeeper blocks it:

xattr -d com.apple.quarantine /path/to/HyperSwitch.dmg

Then open the disk image and drag HyperSwitch into Applications.

App icon

swift scripts/make-icon.swift /tmp
# copy PNGs into Sources/HyperSwitch/Resources/Assets.xcassets/AppIcon.appiconset/

Usage

  1. Install and open HyperSwitch.
  2. Grant Accessibility (and optionally Screen Recording).
  3. Use the configured hotkeys to open the switcher; navigate and release (or press Return) to switch.
  4. Open Settings from the menu-bar icon.

Project layout

hyperswitch/
├── project.yml                 # XcodeGen project definition
├── scripts/
│   ├── build.sh                # Generate project, build, install, sign
│   ├── release.sh              # Release build + DMG (+ optional notarize)
│   ├── setup-signing.sh        # Local self-signed identity for stable TCC
│   ├── make-icon.swift         # Generate iconset
│   ├── extract-strings.py      # Report missing / stale localisation keys
│   └── write-translations.py   # Regenerate Localizable.xcstrings
├── Sources/HyperSwitch/
│   ├── App/                    # Entry, status item, presence
│   ├── Core/                   # Preferences, permissions, localisation
│   ├── Settings/               # Settings panes
│   ├── Switcher/               # Switcher UI, hotkeys, model
│   ├── System/                 # AX, CGS, key codes
│   ├── Thumbnails/             # ScreenCaptureKit thumbnails
│   ├── Windows/                # Window index and actions
│   └── Resources/              # Info.plist, entitlements, assets, strings
└── Tests/HyperSwitchTests/

HyperSwitch.xcodeproj/, .build/, and dist/ are generated and gitignored.


Development

xcodegen generate
./scripts/build.sh
open HyperSwitch.xcodeproj

Notes

  • App Sandbox is off — required for Accessibility against other apps.
  • Signing: build.sh prefers “HyperSwitch Local Signing” from setup-signing.sh, else ad-hoc.
  • Swift 6, default actor isolation MainActor, strict concurrency.
  • Interface language can follow the system or force English / Simplified Chinese.

Localisation helpers

scripts/extract-strings.py          # missing / stale keys
scripts/write-translations.py       # rewrite Localizable.xcstrings from the table

Uninstall

  1. Quit HyperSwitch from the menu-bar icon.
  2. rm -rf /Applications/HyperSwitch.app
  3. Optional: defaults delete com.hyperswitch.HyperSwitch 2>/dev/null || true

Related projects

  • HyperDock — hover a Dock icon to preview every open window of that app, including minimized ones and windows on other Spaces, then click through to the one you want.

The two are built the same way — menu-bar agent apps, the same Accessibility / Screen Recording permissions, the same English and Simplified Chinese interface — and they complement each other: HyperSwitch reaches your windows through the keyboard, HyperDock through the Dock with the pointer. Running both is fine; they do not conflict.


License

This project is licensed under the MIT License.

About

Native keyboard-first app and window switcher for macOS in Swift 6 with live ScreenCaptureKit thumbnails across Spaces, instant search, and customizable global hotkeys.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages