A fast, lightweight Cmd+Tab replacement for macOS. No bloat, no lag, no memory leaks.
Frustrated with AltTab? You're not alone. AltTab is powerful but comes with costs:
- 🐌 Sluggish performance over time
- 💾 Memory usage that grows unbounded
- 🔋 Background CPU drain
- 🐛 Occasional freezes and glitches
- ⚙️ Complex settings for features you don't use
Switcher takes a different approach: do less, but do it well.
- ✅ Shows only apps with visible windows (no hidden/minimized clutter)
- ✅ Sorts by most recently used
- ✅ Native macOS blur effect
- ✅ Instant response (<16ms)
- ✅ Light memory footprint (releases its UI when idle)
- ✅ Negligible background CPU (a lightweight permission check, no window polling)
- ✅ Keyboard shortcuts: H to hide, Q to quit, M to minimize, Cmd+, for Preferences, Shift to go back
- ✅ Mouse support: hover to select, click to activate
- ✅ Multi-monitor: appears on screen where your pointer is
- ✅ Optional: show only your N most recent apps — Cmd+Opt+Tab reveals the rest when you need them
- ❌ Window thumbnails (requires Screen Recording permission)
- ❌ Per-window switching
- ❌ Themes or extensive customization
- ❌ Anything else
This is intentional. Switcher does one thing and does it well.
brew tap fad1/tap
brew install --cask switcherGrab Switcher.app from Releases and move it to /Applications.
git clone https://github.com/fad1/Switcher.git
cd Switcher
swift build -c release
./create-icon.sh # optional: creates app icon
./build-app.sh release- Open Switcher.app
- When prompted, grant Accessibility permission in System Settings → Privacy & Security → Accessibility (toggle Switcher on)
- Switcher takes over Cmd+Tab automatically within ~1 second — no relaunch needed
Until you grant permission, Switcher leaves your native Cmd+Tab working and waits, so it can never get stuck. You can quit any time from its menu bar icon (⌘ → Quit).
Switcher is ad-hoc signed, so rebuilding/replacing the app can invalidate a previous grant — just remove and re-add it under Accessibility.
To turn Switcher off, use menu bar ⌘ → Quit.
Removing its Accessibility permission is not a reliable off-switch: macOS caches an app's permission for its entire running lifetime, so Switcher keeps working until you relaunch it (at which point it sees no permission and leaves Cmd+Tab alone). Switcher uses a passive event tap, so — unlike many tools — revoking its permission does not risk the known macOS input-freeze that active-tap apps can trigger.
Open Preferences (menu bar ⌘) and tick Start at login (macOS 13+). Or add it manually via System Settings → General → Login Items.
| Key | Action |
|---|---|
| Cmd+Tab | Open switcher / next app |
| Cmd+Opt+Tab | Show all apps (when the recent-apps limit is on) |
| Shift | Previous app |
| ←/→ | Navigate left/right |
| ↑/↓ | Navigate up/down (when multiple rows) |
| H | Hide selected app |
| Q | Quit selected app |
| M | Minimize selected app's windows |
| , | Open Preferences |
| Return | Activate |
| Escape | Dismiss |
| Release Cmd | Activate selected |
Mouse: hover to select (after slight movement), click to activate.
Switcher runs in the background. Open Preferences from its menu bar icon, or by launching Switcher again while it's already running. The window lets you:
- Start at login — launch Switcher automatically (macOS 13+)
- Show icon in menu bar — toggle the menu bar icon on or off
- Grayscale icons — show app icons without color (applies on the next Cmd+Tab)
- Show declutter tip in switcher — the ⌥⌘H "Hide others" hint that appears at 2+ rows
- Hide apps with only minimized windows — keep fully-minimized apps out of the list
- Show only the [N] most recently used apps — cap the switcher to your N most recent apps (2–12). When it's on, Cmd+Opt+Tab shows the full list for that one press of the switcher — handy when the app you want is older than the cap
- Donate — support development
The menu bar icon (⌘) also has a quick Grayscale Icons toggle, plus Preferences, Donate, and Quit.
Grayscale can still be set from the terminal if you prefer:
defaults write com.simpleswitcher.app grayscaleIcons -bool true # enable
defaults delete com.simpleswitcher.app grayscaleIcons # revertOnly Accessibility — no Input Monitoring, no Screen Recording, no admin access.
~3,000 lines of Swift across 13 files, plus ~400 lines of pure, tested kernel logic. No dependencies. Uses:
- Carbon hotkeys (avoids Input Monitoring requirement)
- CGEvent tap for modifier detection
- Private
CGSSetSymbolicHotKeyEnabledAPI to intercept native Cmd+Tab
See CLAUDE.md for architecture details.
"Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away." — Antoine de Saint-Exupéry
Switcher exists because sometimes you just want to switch apps. Fast. Without thinking about it. Without your computer grinding to a halt after a week of uptime.
If you need window thumbnails, per-window switching, or extensive customization, use AltTab. It's a great project with different goals.
If you want a Cmd+Tab that just works, try Switcher.
If you find Switcher useful, you can buy me a coffee.
MIT