Skip to content

Yoliani/TabBuddy

Repository files navigation

TabBuddy

TabBuddy icon

A macOS menu-bar utility that replaces the native app switcher with a richer overlay showing open windows and their individual browser/editor tabs.

macOS Swift License

Features

  • Global hotkey — Option+Tab (default), Cmd+Tab (opt-in), or any custom shortcut you record
  • Quick-switch mode — hold the modifier and press Tab to cycle, release to switch (just like native Cmd+Tab)
  • Search mode — tap the hotkey and release immediately to type-filter windows and tabs by name or URL
  • Tab expansion — view every open tab inside supported browsers and editors, and switch directly to any tab
  • Cross-space windows — lists windows from all desktops/Spaces
  • Tab prefetching — tabs are fetched in the background as soon as the switcher opens
  • Switcher position — place the panel on the left, center, or right of your screen
  • Menu bar icon — choose from several icon styles for the menu bar item
  • Launch at login — optionally start TabBuddy automatically on login
  • Menu bar only — no Dock icon, lives quietly in your menu bar

Supported Apps

Browsers

Browser Tab Method
Safari AppleScript
Google Chrome AppleScript
Brave Browser AppleScript
Microsoft Edge AppleScript
Arc AppleScript
Orion AppleScript
Vivaldi AppleScript
Opera AppleScript
Chromium AppleScript
Helium AppleScript
Comet (Perplexity) AppleScript
Dia AppleScript
Firefox Accessibility API
Zen Browser Accessibility API

Code Editors

Editor Tab Method
Xcode Accessibility API
Visual Studio Code Accessibility API
VSCodium Accessibility API
Cursor Accessibility API

Other Apps

These apps expose tabs natively and are supported out of the box:

App Tab Method
Finder Accessibility API
Terminal Accessibility API
Preview Accessibility API
Fork Accessibility API
Figma Accessibility API
Notion Accessibility API

Keyboard Shortcuts

Key Action
Option+Tab (default) / Cmd+Tab / custom Open or cycle the switcher
Tab (modifier held) Cycle to next window
↑ / ↓ Navigate window list
Return Activate selected window/tab
Escape Dismiss the switcher

Permissions

TabBuddy requires these macOS permissions to function:

Permission Purpose
Accessibility Global hotkey interception and window/tab enumeration via the Accessibility API
Automation AppleScript-based tab fetching for Safari and Chromium browsers

Note: The App Sandbox must be disabled. TabBuddy relies on CGEvent taps and AX APIs that are blocked inside a sandbox.

On first launch, TabBuddy will prompt for Accessibility access. You can also grant it manually in System Settings → Privacy & Security → Accessibility.

Automation permissions are requested per-app the first time TabBuddy reads tabs from a browser via AppleScript.

How It Works

  1. Window discovery — combines the Accessibility API (current Space) with CGWindowList (all Spaces) into a merged, deduplicated list
  2. Tab fetching — Safari and Chromium browsers use in-process NSAppleScript; Firefox-based browsers and code editors use the macOS Accessibility tree with multi-strategy traversal (AXTabGroup → AXToolbar → AXList → brute-force scan)
  3. Tab scoring — for editors, each candidate tab group is scored by file-extension matches to distinguish the editor tab bar from sidebars/panels
  4. Activation — AX-based tabs are activated via AXPressAction; AppleScript tabs via set current tab / set active tab index

Building

Requires Xcode 26+ and macOS 26.2+.

git clone https://github.com/Yoliani/TabBuddy.git
cd TabBuddy
open TabBuddy.xcodeproj
  1. In Xcode, open TabBuddy → Signing & Capabilities and select your Apple Developer team. Xcode will write your Team ID to project.pbxproj locally — do not commit that change.
  2. Make sure App Sandbox is disabled (it already is in this project).
  3. Build and run the TabBuddy scheme.

Automatic Updates (Sparkle)

Sparkle is integrated for in-app updates via the menu bar item Check for Updates....

Before shipping updates, set these target build settings for both Debug and Release:

  • SPARKLE_FEED_URL → your hosted appcast URL (for example https://your-domain.com/appcast.xml)
  • SPARKLE_PUBLIC_ED_KEY → your Sparkle EdDSA public key

Until both keys are configured, the app keeps Sparkle disabled and the update menu item is unavailable.

License

MIT

About

A macOS menu-bar utility that replaces the native app switcher with a richer overlay showing open windows and their individual browser/editor tabs.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors