# How Vorssaint’s Window Switcher Compares to macOS ⌘Tab: A Technical Deep Dive

> Compare Vorssaint window switcher to macOS CmdTab. Discover a live thumbnail window navigation system with deep customization via Accessibility APIs. Learn more now.

- Repository: [vorssaint/vorssaint-utils](https://github.com/vorssaint/vorssaint-utils)
- Tags: deep-dive
- Published: 2026-09-06

---

**Vorssaint’s window switcher replaces macOS’s native ⌘‑Tab with a window‑level navigation system that displays live thumbnails of every open window and supports deep customization through Accessibility APIs.**

The Vorssaint window switcher is an open-source utility that fundamentally reimagines application switching on macOS. While the native ⌘‑Tab cycles between applications, Vorssaint operates at the window level, allowing users to navigate individual windows across Spaces and displays. The implementation in `vorssaint/vorssaint-utils` leverages global event taps and the Accessibility framework to intercept shortcuts and enumerate window hierarchies in real time.

## Granularity: Windows vs. Applications

The most significant architectural difference lies in how each system represents open tasks.

**macOS ⌘‑Tab** operates at the application level. Every app consumes exactly one slot in the switcher, regardless of how many windows are open. If you have five Finder windows spread across multiple desktops, ⌘‑Tab only shows a single Finder icon, and selecting it brings forward the most recently active window.

**Vorssaint’s window switcher**, as implemented in [`AppSwitcher.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/AppSwitcher.swift), enumerates every individual window via [`AXWindowResolver.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/AXWindowResolver.swift). This includes minimized windows, fullscreen windows, and windows on secondary displays. Each window appears as a distinct card with its own live thumbnail, allowing you to target specific documents or browser tabs directly rather than cycling through an app’s window stack.

## Live Previews and Visual Feedback

Visual feedback represents another major divergence between the two systems.

macOS displays static application icons in its switcher bar. Vorssaint renders real-time screenshots of each window using the Accessibility API. These thumbnails update dynamically as you navigate, providing immediate visual confirmation of your selection. The UI layout constants and hot-key symbols governing this behavior are defined in [`SwitcherSupport.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/SwitcherSupport.swift), which specifies card dimensions, spacing, and overlay indicators for minimized or hidden windows.

The panel itself remains **non-activating**, meaning it appears above fullscreen apps and across Spaces without stealing focus from the current application context.

## Navigation and Interaction Model

Vorssaint introduces several interaction paradigms that extend beyond macOS’s linear cycling.

**Keyboard Navigation:**
- Use the **configured global shortcut** (customizable, defaults to ⌘‑Tab) to open the switcher
- Navigate with arrow keys or the original modifier combination
- Press **S** to pin the search field, allowing text input without holding modifiers
- Press **Q** to quit the selected app, **W** to close the specific window, or **Esc** to cancel

**Mouse Interaction:**
- Click any window thumbnail to focus it immediately
- Middle‑click a card to close that specific window
- Click outside the panel to dismiss the session

This contrasts with macOS’s limited interaction model, which only supports clicking app icons to activate the frontmost window of that application.

## Customization and Configuration

Unlike macOS’s fixed ⌘‑Tab behavior, Vorssaint exposes extensive configuration through `UserDefaults` and per‑app rules.

**Global Shortcuts:**
The switcher uses a singleton pattern (`AppSwitcher.shared`) that respects custom shortcuts. You can replace ⌘‑Tab entirely or assign a separate *window shortcut* to cycle only through windows of the frontmost app:

```swift
// Configure a custom global shortcut (⌥‑Space)
let customShortcut = GlobalShortcut(keyCode: kVK_Space, modifiers: [.option])
UserDefaults.standard.set(customShortcut.rawValue, forKey: DefaultsKey.switcherShortcut)

// Programmatically start a switcher session
AppSwitcher.shared.startSession(scope: .allApps, reversed: false)

```

**Per‑App Rules:**
You can define visibility rules for specific applications using `SwitcherAppRule`. These rules are stored as dictionaries in `UserDefaults` under `DefaultsKey.switcherAppRules`:

```swift
// Hide Finder from the switcher entirely
var rules = SwitcherAppRule.rules(UserDefaults.standard.dictionary(forKey: DefaultsKey.switcherAppRules))
rules["com.apple.finder"] = .hidden
UserDefaults.standard.set(SwitcherAppRule.storedValue(rules), forKey: DefaultsKey.switcherAppRules)

```

Available rule types include `.visible` (show windows), `.hidden` (exclude from switcher), and `.windowless` (include app even if it has no windows).

**Screen Placement:**
While macOS always displays its switcher on the active display (the one containing the menu bar), Vorssaint supports three placement modes defined in [`SwitcherSupport.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/SwitcherSupport.swift): the pointer’s current screen, the menu‑bar screen, or the screen of the window that initiated the session.

## Technical Implementation

The switcher’s behavior relies on two core mechanisms: global event interception and Accessibility enumeration.

**Global Event Tap:**
[`AppSwitcher.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/AppSwitcher.swift) installs a **global event tap** that intercepts the configured shortcut system-wide. This allows the switcher to capture keystrokes even when the panel is non-activating, enabling navigation without holding modifier keys continuously. The event tap filters for key-down events to trigger the initial session and monitors key-up events to handle selection or dismissal.

**Window Resolution:**
[`AXWindowResolver.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/AXWindowResolver.swift) queries macOS’s Accessibility API (`AXUIElementCopyAttributeValue`) to build a list of windows, extracting titles, positions, and preview images. This approach reveals windows that standard NSWorkspace APIs cannot see, including those on inactive Spaces or minimized to the Dock.

**Performance:**
The implementation caches window previews and metadata to maintain 60fps during rapid navigation. The switcher enumerates windows asynchronously, updating the UI as data becomes available rather than blocking the main thread.

## Summary

- Vorssaint’s window switcher operates at **window granularity** rather than application level, showing every open window including minimized ones
- **Live thumbnails** provide visual confirmation of window contents, updated in real time via the Accessibility API
- **Configurable shortcuts** allow replacement of ⌘‑Tab or assignment of separate app-specific window cycling
- **Per‑app rules** let you hide specific applications or control their visibility behavior
- **Non-activating panels** work across Spaces and fullscreen apps without stealing focus
- The implementation relies on [`AppSwitcher.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/AppSwitcher.swift) for session management and [`AXWindowResolver.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/AXWindowResolver.swift) for window enumeration

## Frequently Asked Questions

### Can Vorssaint replace macOS ⌘‑Tab completely?

Yes. You can set Vorssaint’s global shortcut to ⌘‑Tab in the preferences, which overrides the native macOS behavior through its global event tap. The system will then use Vorssaint’s window-level switcher instead of the built-in application switcher.

### Does the switcher work with fullscreen apps and multiple monitors?

Yes. Because the switcher panel is non-activating and uses the Accessibility API rather than standard window management, it functions correctly across Spaces, fullscreen applications, and multiple displays. You can configure which screen hosts the switcher panel via the screen placement settings.

### How does Vorssaint handle apps with many open windows?

Vorssaint displays each window as a separate card and supports type-to-filter functionality. Press **S** to pin the search field, then type to filter the visible windows by title or application name. This scales more efficiently than cycling through a stack of windows using ⌘‑` (backtick).

### Is it possible to exclude specific applications from the switcher?

Yes. Using `SwitcherAppRule` values stored in `UserDefaults`, you can hide specific bundle identifiers (like `com.apple.finder`) or configure apps to appear only when they have visible windows. These rules persist across sessions and apply immediately to the window enumeration logic in [`AXWindowResolver.swift`](https://github.com/vorssaint/vorssaint-utils/blob/main/AXWindowResolver.swift).