Skip to content
sandipchitalePublic

About

macOS menu bar app that makes Cmd+Tab switch between windows (not apps), like Alt+Tab on Windows — with live window thumbnails, minimized/hidden badges, and close/quit/minimize/hide keys.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

CmdTab

A tiny menu bar app that makes Cmd+Tab switch between windows the way Alt+Tab works on Windows. Cmd+` keeps working as before. It also adds an on-demand Dock on Option+Tab, and makes a window's green button maximize instead of going full screen. Each of these can be turned off in the menu.

Switcher

CmdTab switcher in icon view: the selected window's name in a bubble above it, and the optional window preview below

CmdTab switcher in thumbnail view, with the selected window highlighted

Options

CmdTab menu bar options

Keys (while holding Cmd)

Key Action
Tab / Shift+Tab Next / previous window
← → ↑ ↓ Move the selection around the grid (grouped: ↓ into the app's window previews, ← → between them, ↑ back)
F Find: type part of an app's name or a window's title to show only the windows that match, then Return to switch
Release Cmd, or press Return Switch to the selected window
W Close the selected window
Q Quit the selected window's app
M Minimize / restore the selected window
H Hide / show the selected window's app
G Group / ungroup windows by app (remembered for the next Cmd+Tab)
R Switch between the grid and a big ring (the Dock follows), with R Toggles Ring Layout on in the menu (it's off by default, and until then R says where to turn it on)
Z Show the running apps that have no windows instead, so you can quit them with Q (Return opens one); Z again for the windows. See Apps with no windows
. Switch between app icons and window thumbnails (the same choice as in the menu, so it sticks for the next Cmd+Tab; grouped too)
N Open a new window of the selected window's app, and switch to it
T The tiling menu for the selected window (← ↑ ↓ → and Return to pick, Esc to close)
K Keep the switcher open after you let go of Cmd; K again to go back
X Exchange: close the switcher (without switching) and open the Dock instead
? Show / hide a bubble listing these keys and mouse actions
Esc Cancel
Mouse hover / click Select / switch (in icon view, hovering also shows the window title if the bubble doesn't already)
Hover a tile The window buttons: red closes, yellow minimizes / restores, green fills / restores
Right-click The tiling menu for that window

The Cmd+Tab help bubble, opened with ?, listing the keys and mouse actions in groups: moving and switching, acting on the window, finding and views, the switcher itself, and the mouse

A quick Cmd+Tab tap jumps straight to the previous window without showing the switcher. Windows are listed in most-recently-used order, with minimized windows last.

Nothing beeps. When a key can't do anything, a short note says why, where the selected item's name goes, and fades away: for example Finder can't be quit, or TextEdit has no New Window command. VoiceOver reads it out.

W, Q, M and H act on the selected window (or, grouped, the highlighted preview's window, or the app's most recent one) and keep the switcher open, so you can tidy up several windows in one go. Holding one of these keys acts only once. If a window is still there a moment after W, its app is asking something, such as whether to save: its tile comes back, selected, with a note saying so, so letting go of Cmd takes you to the question. N opens a new window through the app's own New Window menu item (or one like New Finder Window), found by name rather than by shortcut, because Cmd+N and Cmd+Shift+N mean different things in different apps (in Finder, Cmd+Shift+N makes a new folder). An app without such an item says so. Finder can't be quit with Q. Restoring a minimized window of a hidden app with M also unhides that app, the same as clicking the window's thumbnail in the Dock.

X swaps the switcher for the Dock and back. After X from the switcher, you're still holding Cmd: until you let go of it, keys typed with it go to the Dock (letting go doesn't close it). After X from the Dock, the switcher stays open until you press Return, Esc or click, since you aren't holding Cmd, and its bubble says Kept open; press and hold Cmd to get the usual "let go to switch" back. If the other one is turned off in the menu, X says so.

Keeping it open (K)

Press K (still holding Cmd) and the switcher stays open when you let go of Cmd, until you press Return, Esc, click, or press K again. The bubble above it says Kept open meanwhile. It's the counterpart of Windows' Ctrl+Alt+Tab, and what the Dock always does. Pressing and releasing Cmd again doesn't change that, so Cmd+Tab (or Tab) just moves the selection. K again goes back to letting go of Cmd switching, and switches at once if Cmd isn't held. Ctrl+Option+Tab opens the switcher already kept open, with no key to hold. Typing in a search types the letter K, as usual; in the Dock, K just says that the Dock stays up anyway.

Find (F)

Press F (still holding Cmd) and type part of an app's name or a window's title to find a window. In the Dock, F finds an app, a folder or the Trash by name.

  • Only the tiles that match stay, in their usual order and at their usual size, and the best match is selected. A name or title that starts with what you typed comes first, then one with a word that starts with it, then one that has it anywhere. Ties go to the more recently used window (in the Dock, to the item further left).
  • Case and accents don't matter. Each word you type can match anywhere, so "chr git" finds a Chrome window titled GitHub. Grouped, an app shows if its name or any of its windows' titles match, with only the matching windows in its previews.
  • A key that would leave nothing matching isn't searched for: it shows in red after what you typed, and so does every key after it, until Backspace deletes them. The best match so far stays selected, so a typo after a name is already unique does no harm, and the search can't turn into a word you didn't type. Backspace deletes. Tab, the arrow keys and the mouse work as usual among the matches.
  • Return switches to the selected window (in the Dock, opens the selected item). While the search is up, letting go of Cmd doesn't switch. You can let go and type comfortably, then press Return. Keys typed while you still hold the Cmd you pressed F with go into the search too.
  • Esc stops typing but keeps the search: it dims (read-only), the matches stay, and every key works on them as usual, so you can close several windows of one app with W, hide one with H, and so on. Press F to edit the search again. If none of the matches are left, the search goes and every window comes back.
  • Clear the search with the ✕ at its end, with Delete while it's read-only, or with Cmd+Delete while typing. Every tile comes back, the selection stays, and the search stays up, empty.
  • Esc on an empty search puts it away, with the selected tile still selected. On a read-only search with something in it, Esc cancels the switcher (or closes the Dock), as it does without a search. Without Cmd held, the switcher stays up until Return, Esc or a click once the search is gone, as after X.
  • While typing, the keys that act on the selection also work with Cmd, as in any search field: let go of Cmd, then press Cmd+W, Cmd+Q, Cmd+M, Cmd+H and so on.
  • Typing follows your keyboard layout, without Option's special characters. Input methods that compose characters, such as Japanese or Chinese, can't be used. While Cmd is held, macOS's own shortcuts (such as Cmd+Space for Spotlight) may still take the key, so type spaces after letting go of Cmd.

Apps with no windows (Z)

Press Z (still holding Cmd) to see the apps that are running but have no windows, which otherwise never show up in the switcher, as app icons with a label above them. The Dock has Z too: it shows only those apps, and Z again brings every item back, with the one you had selected still selected. Q, H and Return work the same there. Press Q to quit the selected one: the switcher stays up for the next, and once none are left the windows come back. H hides or shows it. Return or a click opens it, like clicking it in the Dock (most apps make a new window). Letting go of Cmd here doesn't switch to anything, so you stay where you were. Press Z again for the windows, with the one you had selected still selected. If there are no such apps, Z says so. Z during a search puts the search away first, and F while Z's apps are shown brings back the windows (in the Dock, every item) to search them. An app whose only windows are on another desktop counts as having none, unless Include Windows from All Desktops has already found them.

Grouping (G)

Press G (still holding Cmd) to show one icon per app instead of one per window, like the native switcher. The selected app's windows hang below its icon as previews, the same as in the Dock: press ↓ to move into them, ← → to pick one, ↑ to go back. Letting go of Cmd switches to the highlighted preview's window, or else to the app's most recent window. Press G again to go back to one icon per window. In thumbnail view, each app's tile shows a thumbnail of its most recent window instead of its icon, with all its windows below as usual (none for an app with only one window, since its tile already shows it); press . to switch between the two, grouped or not. Grouping is remembered: the next Cmd+Tab opens grouped too, until you press G again. Grouped, a quick Cmd+Tab goes to the previous app, like the native switcher.

Ring (R)

First turn on R Toggles Ring Layout in the menu; it's off by default, and until then R just says so. Then press R in the switcher or the Dock to lay the tiles out around a ring, the way WindowRing does, and press it again to go back to the grid (or the Dock's row). The ring is one setting for both, and it's remembered, so X swaps the window ring for the Dock ring and back, and the next Cmd+Tab or Option+Tab opens as a ring too. Turning R Toggles Ring Layout off puts both back to the grid and row.

  • Tiles start at 12 o'clock and go clockwise in the usual order; Tab, → and ← go around the ring.
  • The selected tile's wedge is highlighted, and its name (and window title) shows on a small card in the ring's see-through middle, where the ? help also appears.
  • Point anywhere on the ring to select the tile in that direction, like a pie menu; click to switch.
  • Window previews (grouped, the Dock's previews, Show Window Preview) are cards in an arc just outside the ring, centered on the selected tile and going clockwise; ↓ moves into them, ← → along the arc, and ↑ back.
  • Icons and thumbnails (.), grouping (G) and every other key work the same as in the grid.

Tiling (right-click)

Right-clicking a Chrome window's thumbnail opens the tiling menu, with Move & Resize showing halves, quarters and arrangements

Right-click a window's tile (or, grouped, an app's icon or a window preview), or press T, for a menu like the one under a window's green button (the Dock's window previews have it too):

  • Fill, Center. Like the green button, Fill toggles: while CmdTab has the window filled, the item reads Restore Size and puts it back
  • Move & Resize: Left, Right, Top, Bottom; Top Left, Top Right, Bottom Left, Bottom Right; and arrangements that also place the next most recent windows: Left & Right, Right & Left, Top & Bottom, Bottom & Top, Quarters
  • Return to Previous Size, after CmdTab has moved the window (shown as Restore Size above while it's filled)
  • Enter / Exit Full Screen
  • Move to another display, when you have more than one

Choosing one lays out the window on its display (minus the menu bar and Dock), closes the switcher and switches to it. While the menu is open, letting go of Cmd doesn't switch; closing the menu without a choice then switches, as letting go would have. CmdTab does these layouts itself; macOS's own Full Screen Tile (side-by-side full screen) isn't available to other apps.

Views

  • App icons (default): one large app icon per window, styled like the native macOS switcher. The selected icon gets a darker rounded square that hugs it, and its app name floats in a bubble above it, like the Dock's. When an app has more than one window listed, the bubble shows the window's title instead, so you can tell them apart. Otherwise, rest the pointer on an icon to see that window's title in a tooltip. With Show Window Preview on, a snapshot of the selected window also hangs below its icon; click it to switch to that window.
  • Window thumbnails: a live snapshot of each window, with the app icon and window title above it. The selected tile gets the same darker rounded background as in icon view.

Choose between them in the menu, or press . while the switcher is up. Thumbnails and window previews need Screen Recording permission (System Settings → Privacy & Security → Screen & System Audio Recording), and CmdTab must be relaunched after you grant it. Until then, they show the app icon. Minimized windows, windows of hidden apps and windows on other desktops can't be captured live, so they show their last snapshot, or the app icon if CmdTab hasn't captured them yet.

On macOS 26 and later, CmdTab's panels use the same Liquid Glass material as the native switcher, with a thin border in the opposite tone so they stand out against a background of the same tone. The window switcher is tinted with your Accent color (System Settings → Appearance), in a shade that suits Light and Dark, so it can't be mistaken for the neutral Dock. Choose Graphite for a gray switcher. Earlier versions get a blurred, tinted panel instead. Either way they follow the Appearance setting.

Window buttons

Hovering a window's tile in the switcher: red, yellow and green buttons at its top left, with their symbols showing

Rest the pointer on a window's tile (or on one of the window previews under an app, in the grouped switcher or the Dock) and three round buttons appear over its top left corner, like the ones in a window's title bar. Their symbols show when the pointer is over them.

Button Does
Red Closes the window, the same as W. The switcher stays up
Yellow Minimizes the window, or restores it if it's minimized, the same as M. The switcher stays up
Green Fills the screen (minus the menu bar and Dock) with the window, or puts it back if CmdTab filled it and it hasn't moved since, the same as Fill in the tiling menu. The switcher closes and switches to the window

The buttons wait for the pointer to move, so a tile that is under a resting pointer, or slides under it after a close, doesn't offer them at once. Tiles under about 56 points wide, the Dock's own app tiles and the ring don't have them. Grouped, the buttons on an app's tile act on its most recent window, as W does.

Window state badges

A small yellow badge marks windows you can't currently see:

Badge Meaning
● dot The window is minimized (yellow, like the minimize button in a window's title bar)
◯ ring The window's app is hidden
◉ ring around the dot Both

Normal windows have no badge. In icon view the badge sits on the icon's bottom-right corner; in thumbnail view it's at the right end of the title row.

Green button

A plain click on a window's green button maximizes the window to fill the screen (minus the menu bar and Dock) instead of taking it full screen. Click it again to put the window back where it was. Double-clicking a window's title bar does the same, instead of the system's Fill, which leaves a margin around the window. If you move or resize a maximized window, the next click maximizes it again rather than restoring.

Option-click the green button to go full screen, which is what a plain click does in standard macOS. Only clicks that land on the green button are affected, and hovering still shows the button's tiling menu. Turn this off in the menu to get the standard behavior back.

On-demand Dock (Option+Tab)

CmdTab Dock switcher: a Dock-like row of apps, folders and the Trash, with the selected app's name above it and a preview of its window below

Press Option+Tab to bring up a Dock where you're working (per the Show On setting), laid out like the real one: Finder, your pinned apps (without any spacer gaps you added), the recent apps section (if it's on in Dock settings), running apps that aren't pinned, then a divider, your Dock folders (such as Downloads), and the Trash. Running apps have a dot under the icon, hidden apps get the ◯ badge, and the selected item's name floats above it. It's handy with several displays, or with the real Dock hidden.

Alongside the system Dock

This doesn't replace the system Dock: that stays where it is, and CmdTab's Dock is a second, temporary one that appears only while you want it. The two don't interfere. CmdTab reads your Dock's pinned apps, folders and Trash but never changes them, and opening an app from either one does the same thing. The usable area CmdTab uses for tiling and the green button leaves room for the system Dock, unless it's hidden.

To get a Dock that only shows up on demand, turn on auto-hide for the system Dock: System Settings → Desktop & Dock → Automatically hide and show the Dock (or press Option+Cmd+D). The system Dock then slides away until you move the pointer to its edge, and Option+Tab gives you CmdTab's Dock wherever you are, on whichever display you choose with Show On. Without auto-hide, both are simply available: use the system Dock by pointer and Option+Tab by keyboard.

Unlike Cmd+Tab, it stays up after you let go of Option, until you pick something, press Esc or Option+Tab again, or click outside it.

With Show Window Previews on (it's off by default), previews of the selected running app's windows hang below its icon, and they follow the selection. Click a preview, or press ↓ and then Return, to bring that window forward. Hovering a preview shows its window buttons. The previews follow the Include Minimized Windows, Include Windows of Hidden Apps and Include Windows from All Desktops settings. Live snapshots need Screen Recording permission (see Views); without it, previews show the app icon and window title. Minimized windows and windows on other desktops show their last snapshot, or the app icon.

Key Action
Tab / Shift+Tab Next / previous item
← → Next / previous item, or window preview while in the previews
↓ / ↑ Into the selected app's window previews / back to the icons (with previews on); between rows if the Dock wraps into a grid
F Find: type part of an item's name to show only the items that match, then Return to open
Return, or click Open the item, like clicking it in the Dock, or bring the highlighted preview's window forward
W Close the highlighted preview's window (with none highlighted, a note says how to pick one)
Q Quit the selected app
M Minimize / restore the window: the highlighted preview's, or else the app's most recent one
H Hide / show the selected app
N Open a new window of the selected app (an app that isn't running, or has no windows, just opens, as when clicked)
T The tiling menu for the same window as M
G Beeps: the Dock is already one icon per app (G groups in the switcher)
R Switch between the row and a big ring (the switcher follows), with R Toggles Ring Layout on in the menu (it's off by default, and until then R says where to turn it on)
. Beeps: the Dock always shows icons (. switches the switcher's view)
Z Show only the running apps that have no windows, so you can quit them with Q (Return opens one); Z again for every item. See Apps with no windows
Fn+1 … Fn+9, Fn+0 Open the 1st … 10th item shown, counting from the left
X Exchange: close the Dock and open the Cmd+Tab window switcher instead
? Show / hide a bubble listing these keys and mouse actions
Esc, Option+Tab, or click outside Close (with a search up, Esc stops typing, or puts away an empty search, first)
Any other key Close, and the key goes to the app you're in (with a search up, it types; while the search is read-only, a note says to press F to type)

The Option+Tab Dock's help bubble, opened with ?, listing its keys and mouse actions in the same groups as the switcher's

Opening an app activates it (launching it if needed), the same as a Dock click. Folders open in Finder.

Opening by number

Like Win+number on the Windows taskbar: while the Dock is up, Fn+1 to Fn+9 open the 1st to 9th item and Fn+0 the 10th, counting from the left (Finder is 1) over the items shown, so with a search or Z on they are the ones that match. Holding Fn shows each of the first ten items' number over its icon. Fn+number opens the item like Return does (launching an app, activating it, opening a folder), and says so if there's no such item. While you type a search, digits type as usual. If your Globe key is set to show the emoji picker or start dictation, tapping it alone still does that; Fn with a number key doesn't.

Right-click a tile for its menu:

  • Running app: its windows (choose one to bring it forward; ◆ marks minimized ones), Show in Finder, Hide/Show, Quit. Hold Option for Force Quit. As in the Dock, Finder has no Quit.
  • Other apps and folders: Open, Show in Finder.
  • Trash: Open, Empty Trash.
  • Window preview (with Show Window Previews on): the tiling menu for that window. Choosing a layout applies it, closes the Dock and brings the window forward; closing the menu without a choice leaves the Dock open.

The menus never change your real Dock (no Keep in Dock / Remove from Dock). Items an app adds to its own Dock menu, such as a browser's New Window, aren't available to other apps, so they're not shown. The Dock follows the same Show On choice as the switcher.

Menu

The menu bar icon has these options:

  • Cmd+Tab Shows Windows: turn the window switcher on or off. While it's off, the system Cmd+Tab works as usual. Its options are indented under it:
    • Include Minimized Windows / Include Windows of Hidden Apps: show or skip those windows.
    • Include Windows from All Desktops: also list windows on other Spaces (desktops), including full-screen ones. Picking one switches to its desktop. Off by default.
    • Show App Icons / Show Window Thumbnails: choose the view.
      • Show Window Preview (icon view, off by default): a snapshot of the selected window hangs below its icon, like the Dock's window previews. Click it to switch to that window. Not used while grouped, where the selected app's windows hang there instead.
    • Group Windows by App: one tile per app, with the selected app's windows in a strip below (see Grouping). Pressing G in the switcher changes the same setting. Off by default.
  • Option+Tab Shows Dock: turn the Dock on or off. It works independently of Cmd+Tab Shows Windows.
    • Show Window Previews: preview the selected app's windows under its icon in the Dock. Off by default.
  • Show On: where the switcher and the Dock appear. All Displays (the default) shows them on every display; arrow keys follow the grid on the pointer's display. Display with Pointer or Display with Active Window (the display showing most of the frontmost window) shows them on just one.
  • Appearance: System, Light or Dark, for CmdTab's panels (the switcher, the Dock, previews and name bubbles) only.
  • R Toggles Ring Layout: lets R switch the switcher and the Dock between their grid (or row) and a ring. Off by default: R then just says so, and they're never shown as a ring.
  • Green Button Toggles Maximize Instead of Full Screen: see Green button. On by default.
  • Keyboard Shortcuts…: both lists of keys and mouse actions, side by side in a window. Keys for what's turned off aren't listed (R, and the Dock's window-preview keys while Show Window Previews is off). The first time CmdTab runs, this window comes up by itself, with a short welcome on top: what CmdTab changes, and how to find its keys. The switcher and the Dock show their list (the same one ? shows) the first time each appears, and then, the next few times, a tip about one key in the bubble above them.
  • Launch at Login
  • Accessibility Permission: shows whether it's granted, and opens System Settings if it isn't.
  • Quit CmdTab

Install

CmdTab runs on macOS 14 or later, on Apple silicon and Intel Macs.

Download (no developer tools needed)

  1. Download CmdTab-<version>.zip from the latest release, unzip it, and move CmdTab.app to your Applications folder.

  2. CmdTab isn't notarized by Apple (notarization needs a paid Apple developer account, which this free project doesn't use), so macOS blocks it the first time. To allow it, run this once in Terminal:

    xattr -dr com.apple.quarantine /Applications/CmdTab.app

    Or, without Terminal: try to open CmdTab, then go to System Settings → Privacy & Security, scroll down, and click Open Anyway. (On macOS 15 and later, right-clicking the app and choosing Open no longer gets past this.)

  3. Open CmdTab and grant Accessibility permission when asked (System Settings → Privacy & Security → Accessibility). It starts working as soon as you turn it on.

  4. For window thumbnails and previews, also grant Screen Recording permission and relaunch CmdTab (see Views).

Each release lists the zip's SHA-256 checksum, so you can check your download with shasum -a 256 CmdTab-<version>.zip.

Build from source

If you have Apple's free command-line developer tools (xcode-select --install), you can build CmdTab yourself. An app you build on your own Mac isn't blocked by Gatekeeper, so there's no step 2.

./install.sh           # builds, signs, copies to /Applications, launches

The first time you run it, install.sh creates a self-signed code-signing certificate called "CmdTab Local Signing" in your login keychain. macOS asks for your password to trust it, and may ask once whether codesign can use the key (choose Always Allow). Every build is then signed with that certificate, so the Accessibility and Screen Recording grants survive rebuilds. Then grant the permissions as in steps 3 and 4 above.

Builds are universal (Apple silicon and Intel).

./build.sh alone builds build/CmdTab.app with an ad-hoc signature, and ./build.sh install installs that. macOS treats each ad-hoc build as a new app, so you'd have to grant permissions again every time.

Notes

  • While CmdTab is running with Cmd+Tab Shows Windows on, it turns off the system Cmd+Tab app switcher. It turns it back on when you quit CmdTab or uncheck Cmd+Tab Shows Windows.
  • Permissions are tied to the code signature. When it changes (for example, the first install.sh run after an ad-hoc build), the install resets the old Accessibility and Screen Recording entries and you grant them once more. To sign with your own certificate instead, set CODESIGN_IDENTITY.
  • Like the Windows default, only windows on the current Space (desktop) are shown, unless Include Windows from All Desktops is on. macOS's Accessibility API doesn't list windows on other desktops, so CmdTab finds them through windows it has already seen. A window that was opened directly on another desktop, and that you haven't visited since CmdTab started, may be missing until you visit that desktop once. Windows on other desktops can't be captured live, so thumbnails and previews of them show their last snapshot or the app icon.

License

MIT © 2026 Sandip Chitale

About

macOS menu bar app that makes Cmd+Tab switch between windows (not apps), like Alt+Tab on Windows — with live window thumbnails, minimized/hidden badges, and close/quit/minimize/hide keys.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages