BetterCmdTab

Config reference

Every config.json key — type, default, accepted range and allowed values.

Every key accepted in ~/.config/bettercmdtab/config.json and in exported settings files. Keys are listed without the Switcher. prefix, which is how they are written.

All keys are optional. Omitting one keeps its current value — see partial edits. Numbers outside the range shown are clamped rather than rejected, and an unrecognised string falls back to the key's default.

The three array-of-objects keys are documented separately: appExceptions, scopedShortcutList and shortcutOverrides.

This page is generated from the same schema.json the app writes next to your config file, so types, descriptions and allowed values are the app's own. Your editor shows the identical information inline.

Display & timing

Where the panel opens and how quickly it reacts.

KeyTypeDefaultDescription
displayModestring"mouseCursor"Which monitor the switcher opens on.
  • "mouseCursor"Monitor with the cursor
  • "activeWindow"Monitor with the active space
  • "mainDisplay"Main display
revealDelayMsinteger 40…500100How long the shortcut must be held before the panel appears — a quicker tap switches without showing it (milliseconds).
titleRefreshIntervalMsinteger 50…2000200Delay before window titles in the open switcher catch up after an app renames one (milliseconds). Lower reacts sooner, higher costs less CPU.

Layout

Which layout the switcher uses and how big it is.

KeyTypeDefaultDescription
layoutModestring"iconDock"Switcher layout: list rows, an icon grid, or window previews.
  • "list"List
  • "iconDock"Grid View
  • "windowPreview"Previews
panelScalePercentinteger 50…150120Overall size of the switcher panel, in percent.
listWidthPercentinteger 30…100100Width of list rows as a percentage of the automatic, screen-scaled width.
gridMaxColumnsinteger 0…120Column cap for the grid layout. 0 = automatic (as many as fit).

Appearance

Colour, blur, corners and typography of the panel.

KeyTypeDefaultDescription
panelAppearancestring"system"Light or dark switcher, independent of the rest of macOS.
  • "system"System
  • "light"Light
  • "dark"Dark
panelOpacityinteger 30…100100Opacity of the panel background, in percent.
panelCornerRadiusinteger -1…400Panel corner radius in points. 0 = automatic (follows the panel size), -1 = square corners.
backdropMaterialstring"hud"Blur material behind the rows. Ignored by the macOS 26 glass backdrop.
  • "hud"HUD (default)
  • "sidebar"Sidebar
  • "menu"Menu
  • "popover"Popover
  • "fullScreen"Full Screen
  • "underWindow"Under Window
fontScalestring"standard"Size of the name/title text, independent of the panel scale.
  • "extraSmall"Extra small
  • "small"Small
  • "standard"Default
  • "large"Large
  • "extraLarge"Extra large
fontFacestring"system"Typeface used for names and titles.
  • "system"System
  • "rounded"Rounded
  • "serif"Serif
  • "monospaced"Monospaced
boldSelectedLabelbooleantrueShow the highlighted entry's title in bold.
showApplicationNamesbooleantrueShow application names next to the icons.
showWindowTitleLabelbooleantrueShow each window's title, not just its app.
previewTitleAlignmentstring"center"Where the title sits under each window-preview tile.
  • "leading"Left
  • "center"Center
  • "trailing"Right
titleTruncationModestring"tail"Which part of a too-long title is replaced by an ellipsis.
  • "head"Beginning
  • "middle"Middle
  • "tail"End

Contents

Which apps and windows the switcher lists, and in what order.

KeyTypeDefaultDescription
sortOrderstring"mru"Order apps and windows are listed in.
  • "mru"Most recent
  • "mruWindows"Most recent (windows)
  • "alphabetical"Alphabetical
  • "launchOrder"Launch order
spaceScopestring"allSpaces"Which Spaces windows are pulled from.
  • "allSpaces"All Spaces
  • "currentSpace"Current Space
  • "visibleSpaces"Visible Spaces
applicationsOnlybooleanfalseShow one entry per app instead of one per window.
windowDrillEnabledbooleantruePeek the highlighted app's windows with ↓ while "applications only" is on.
showMinimizedWindowsbooleantrueInclude minimized windows.
showHiddenAppsbooleantrueInclude apps hidden with ⌘H.
sinkHiddenAppsbooleantrueMove hidden apps to the bottom of the list instead of leaving them in place.
showWindowlessAppsbooleantrueInclude running apps that have no open window.
showUnreadBadgesbooleantrueShow each app's Dock unread badge on its entry.
showRecentlyClosedbooleanfalseOffer recently closed apps in search so they can be reopened.
recentlyClosedLimitinteger 0…505How many recently closed apps to offer. 0 disables them.
pinnedBundleIDsarray[]Bundle IDs pinned to the front of the switcher, in the order they appear.
hideAllExcludedBundleIDsarray[]Bundle IDs the "hide all windows" shortcut leaves visible.

Tabs

How browser and native tabs appear in the list.

KeyTypeDefaultDescription
tabDrillEnabledbooleantruePeek the highlighted window's tabs with \.
expandTabsAsWindowsbooleanfalseList native system tabs (Finder, Terminal, TextEdit, …) as separate entries.
expandBrowserTabsAsWindowsbooleanfalseList browser tabs (Safari, Chromium) as separate entries.
browserTabRowLimitinteger 0…160Cap on tab entries per browser window. 0 = unlimited; anything else is taken as 2…16.
showBrowserIconOnTabsbooleanfalseBadge each browser-tab entry's favicon with the source browser's icon.

Type-to-filter and letter-jump behaviour.

KeyTypeDefaultDescription
fuzzySearchEnabledbooleantrueType to filter the switcher.
fuzzySearchRankBestMatchFirstbooleanfalseSort search results by match quality instead of keeping the list order.
searchIncludesLaunchableAppsbooleantrueInclude installed apps that aren't running, so search can launch them.
searchExpandsBrowserTabsbooleanfalseSearch browser tab titles too.
searchDismissModestring"holdModifier"Whether searching keeps the switcher open after the modifier is released.
  • "holdModifier"Hold ⌘
  • "stayOpen"Stay open until I choose
letterHintsEnabledbooleantrueShow the letter that jumps to each entry.
letterChainTimeoutMsinteger 200…30001000How long a typed letter-jump prefix stays active before it expires (milliseconds).

Keyboard

What happens while the shortcut is held, and how stepping works.

KeyTypeDefaultDescription
stayOpenOnReleasebooleanfalseKeep the switcher open after the modifier is released.
stayOpenOnQuickTapbooleanfalseAlso keep it open after a quick tap of the shortcut.
shiftTapStepsBackwardbooleantrueTap Shift while switching to step backwards.
backtickReversesAppSwitchingbooleanfalseUse the window-switch shortcut (⌘`) to step backwards through apps.
vimNavigationEnabledbooleanfalseNavigate with h/j/k/l as well as the arrow keys.

Mouse & hover

Pointer selection and the inline action buttons.

KeyTypeDefaultDescription
scrollToSwitchbooleantrueMove the selection by scrolling.
scrollReverseDirectionbooleanfalseReverse the scroll direction.
clickOutsideToDismissbooleantrueClick outside the panel to dismiss it without switching.
mouseHoverSelectionEnabledbooleantrueHighlight the entry under the pointer.
mouseClickSelectionEnabledbooleantrueClick an entry to switch to it.
hoverActionsEnabledbooleanfalseShow action buttons on the entry under the pointer.
hoverShowClosebooleantrueInclude "close" among the hover actions.
hoverShowMinimizebooleantrueInclude "minimize" among the hover actions.
hoverShowMaximizebooleantrueInclude "maximize" among the hover actions.
hoverShowHidebooleantrueInclude "hide app" among the hover actions.
hoverShowQuitbooleantrueInclude "quit" among the hover actions.
hoverShowForceQuitbooleanfalseInclude "force quit" among the hover actions.

Window management

Behaviour of the tiling shortcuts.

KeyTypeDefaultDescription
cycleTileWidthsbooleanfalseRepeating the tile-left/right shortcut cycles the window through half → two-thirds → one-third width.

Shortcuts

The key combinations themselves are recorded outside this file. Scoped shortcuts and per-shortcut overrides are documented on their own pages.

KeyTypeDefaultDescription
directActivationBindingsarray exactly 9 items["", "", "", "", "", "", "", "", ""]Bundle ID activated by each direct-activation slot, in slot order. An empty string leaves the slot unused.
nextScopedShortcutIDintegerInternal counter for allocating scoped-shortcut ids. Never decreases, so a removed id is never reused. Don't edit.

Feedback & menu bar

Sound, haptics, the menu-bar icon and screen-sharing privacy.

KeyTypeDefaultDescription
hideMenuBarIconbooleanfalseHide the menu-bar icon.
hapticOnCommitbooleanfalseTap the trackpad when the switcher commits a selection.
soundOnCommitbooleanfalsePlay a sound when the switcher commits a selection.
commitSoundNamestring"Tink"macOS system sound played on commit. A custom sound file stays on the Mac that chose it.
  • "Basso"
  • "Blow"
  • "Bottle"
  • "Frog"
  • "Funk"
  • "Glass"
  • "Hero"
  • "Morse"
  • "Ping"
  • "Pop"
  • "Purr"
  • "Sosumi"
  • "Submarine"
  • "Tink"
hideFromScreenSharingbooleanfalseKeep the switcher panel out of screen recordings and shared screens.

Experimental

Off by default and matching the Experimental settings pane. These can change or disappear between releases.

KeyTypeDefaultDescription
experimentalSwipeTriggerbooleanfalseThree-finger trackpad swipe.
swipeModestring"openSwitcher"What the three-finger swipe does.
  • "openSwitcher"Open switcher
  • "switchSpaces"Switch Spaces
  • "quickSwitch"Quick switch (last 2 apps)
swipeReverseDirectionbooleanfalseReverse the swipe direction.
swipeCommitOnReleasebooleanfalseCommit the swipe selection when the fingers lift.
swipeSensitivityinteger 1…105How far fingers must slide to advance one app. Higher = more sensitive.
experimentalInstantSpaceSwitchbooleanfalseSwitch Spaces without the macOS animation.
experimentalBrowserTabMRUbooleanfalseTrack browser tabs in the recency order.
experimentalBrowserTabPreviewsbooleanfalseShow thumbnails for browser tabs.
experimentalLivePreviewsbooleanfalseKeep window previews refreshing while the panel is open. Costs CPU/GPU.

Legacy

Superseded keys — always set the replacement named in the description instead. Only panelSize is migrated and then deleted; currentSpaceOnly and scopedShortcutScopes are still written on every change so older builds reading the same file stay consistent, so expect to see them; excludedBundleIDs and experimentalUnreadBadges are read at most once and never removed.

KeyTypeDefaultDescription
panelSizestringLegacy size preset, migrated to panelScalePercent at launch. Use panelScalePercent instead.
  • "small"
  • "standard"
  • "large"
currentSpaceOnlybooleanLegacy "only the current Space" flag, kept in sync with spaceScope for older builds. Edit spaceScope instead.
excludedBundleIDsarrayLegacy always-hidden bundle IDs, folded into appExceptions at launch. Edit appExceptions instead.
experimentalUnreadBadgesbooleanLegacy unread-badge flag, read once to seed showUnreadBadges. Edit showUnreadBadges instead.
scopedShortcutScopesarray exactly 3 itemsLegacy fixed scoped-shortcut slots, migrated to scopedShortcutList. Edit scopedShortcutList instead.

On this page

Display & timingdisplayModerevealDelayMstitleRefreshIntervalMsLayoutlayoutModepanelScalePercentlistWidthPercentgridMaxColumnsAppearancepanelAppearancepanelOpacitypanelCornerRadiusbackdropMaterialfontScalefontFaceboldSelectedLabelshowApplicationNamesshowWindowTitleLabelpreviewTitleAlignmenttitleTruncationModeContentssortOrderspaceScopeapplicationsOnlywindowDrillEnabledshowMinimizedWindowsshowHiddenAppssinkHiddenAppsshowWindowlessAppsshowUnreadBadgesshowRecentlyClosedrecentlyClosedLimitpinnedBundleIDshideAllExcludedBundleIDsTabstabDrillEnabledexpandTabsAsWindowsexpandBrowserTabsAsWindowsbrowserTabRowLimitshowBrowserIconOnTabsSearchfuzzySearchEnabledfuzzySearchRankBestMatchFirstsearchIncludesLaunchableAppssearchExpandsBrowserTabssearchDismissModeletterHintsEnabledletterChainTimeoutMsKeyboardstayOpenOnReleasestayOpenOnQuickTapshiftTapStepsBackwardbacktickReversesAppSwitchingvimNavigationEnabledMouse & hoverscrollToSwitchscrollReverseDirectionclickOutsideToDismissmouseHoverSelectionEnabledmouseClickSelectionEnabledhoverActionsEnabledhoverShowClosehoverShowMinimizehoverShowMaximizehoverShowHidehoverShowQuithoverShowForceQuitWindow managementcycleTileWidthsShortcutsdirectActivationBindingsnextScopedShortcutIDFeedback & menu barhideMenuBarIconhapticOnCommitsoundOnCommitcommitSoundNamehideFromScreenSharingExperimentalexperimentalSwipeTriggerswipeModeswipeReverseDirectionswipeCommitOnReleaseswipeSensitivityexperimentalInstantSpaceSwitchexperimentalBrowserTabMRUexperimentalBrowserTabPreviewsexperimentalLivePreviewsLegacypanelSizecurrentSpaceOnlyexcludedBundleIDsexperimentalUnreadBadgesscopedShortcutScopes