A window switcher for macOS that gets out of the way.
Hold Command, tap Tab. Let go before you can see it and it never draws at all.
brew install --cask mxwnk/tap/flip
or take the disk image · quick guide · source on GitHub
macOS 14 or newer · MIT
Nothing is asked for at the moment you press the key. Every number below comes from the log of a real run, nine windows open on a two-monitor machine.
Every window on the space, most recently used first. Two documents in the same app are two entries.
Let go inside 150 ms and it switches without drawing anything. The selection is made either way; only showing it waits.
⌥ F reaches the Finder out of the box. Bind ⌥ S to Spotify, ⌥ T to your terminal — press one again to walk that application's windows.
Halves, quarters, filling and across to the other display, from the keyboard. Filling is a toggle.
Hover to pick, click to confirm — but only once you actually move the pointer, so a resting mouse never steals the choice.
A flip command that lists windows as JSON and focuses them
by id, so the search it does not have is jq away.
The grid follows the active window, sticks to the main display, or appears on all of them at once. Your call.
| ⌘ Tab | every window on the current space, most recently used first |
| ⌥ Tab | the windows of whichever application is in front |
| ⌥ F | jump straight to the Finder — one key per application, the rest yours to choose |
| ⌥ then a key | narrow the open grid to that application |
| ←→↑↓esc | move the selection, or give up |
| let go of ⌥ | focus what is selected, out of the Dock if it was minimised |
Add ⇧ to any of those to go backwards.
| ⌃⌥←⌃⌥→ | left or right half |
| ⌃⌥↑⌃⌥↓ | top or bottom half |
| ⌃⌥U⌃⌥I⌃⌥J⌃⌥K | the four quarters |
| ⌃⌥↩ | fill the screen, or put it back if it already fills |
| ⇧⌥←⇧⌥→ | previous or next display, keeping the window's place on it |
The corners are u i j k rather than the vim keys, because those four sit as a square on a German keyboard too. The display moves share the arrows with the halves, so they carry a modifier of their own — ⇧⌥ to begin with, or ⌃⌥⌘ if that suits the rest of your shortcuts better.
AXObserver notifications keep it current on a thread of its
own, with a half-second messaging timeout per application — so an
unresponsive app becomes a missing window rather than a frozen switcher.
Opening the grid costs one lock and one window server call.
macOS quietly disables a tap whose callback misses its deadline, and the main thread is where rendering and window server round trips live. The callback itself compares a keycode.
One per screen, ordered in and out rather than created. Thumbnails are captured ahead of time: at startup, and then for each window as it loses focus — which is when its contents are final and nobody is waiting.
macOS keys a privacy grant to an application's designated requirement. Flip's is pinned to one certificate and checked on every release, so Accessibility and Screen Recording survive updates instead of having to be granted again.
brew install --cask mxwnk/tap/flip
Flip asks for Accessibility on first run, and for
Screen Recording only if you want thumbnails — turn them off and it never
asks. Everything it stores is readable JSON in
~/Library/Application Support/Flip/, and the only request it
ever makes is a daily check for a newer release, which can be turned off.
Flip is signed with its own certificate rather than notarised through Apple's paid programme, and macOS quarantines anything a browser downloads. Homebrew clears that for you — you only meet this warning with the disk image.
Or clear it in one line, which also spares the copied application the same warning on its first launch:
xattr -d com.apple.quarantine ~/Downloads/Flip-*.dmgControl-clicking and choosing Open no longer works for this on macOS 26.