TabLift Svelte Themes

Tablift

A lightweight, open-source macOS utility that automatically restores minimized app windows when switching with ⌘+Tab.

TabLift Banner

Hackatime Badge License: MIT Latest Release Watchers

macOS Swift HTML5 Svelte TypeScript CSS

TabLift is a lightweight macOS utility that restores minimized apps instantly when switching with ⌘+Tab or ⌘+`.
By default, macOS ignores minimized windows unless you hold the Option key.
TabLift fixes this behavior, making app switching intuitive and seamless — no extra keys needed.

🌐 Visit the TabLift website


Features

  • Instantly restores minimized windows when you switch to an app using ⌘ + Tab or ⌘ + `
  • No need to press extra keys — just switch!
  • Menu bar icon with quick popover for access and control
  • One-click toggle for restoring all minimized windows or just the last minimized window, from the menu bar or settings
  • Modern Settings & About window with clickable version and license links
  • Sparkle-powered update checker
  • Runs quietly in the background with minimal resource usage
  • Compatible with Mission Control, multiple desktops, and most macOS versions
  • Website included in the repo, for documentation and SEO

How It Works

TabLift uses public Apple APIs to monitor when you activate a different app (via NSWorkspace notifications).
As soon as an app is activated, TabLift checks for minimized windows via the Accessibility API (AXUIElement).
If a minimized window is found, it is instantly restored for you, either restoring all or just the most recently minimized window (configurable).

Technical flow:

  1. Listening: AppMonitor.swift listens for app activation events.
  2. Restoring: WindowManager.swift inspects the app's window list. If any window is minimized, it sets the AXMinimized attribute to false. The behavior (restore all or just the latest) is determined by a global toggle.
  3. Menu Bar: MenuBarManager.swift provides a menu bar icon and popover with a quick settings toggle, open settings, and quit.
  4. Permissions: On first launch, PermissionsService.swift prompts you to grant Accessibility permissions, which are required for window management.
  5. UI: The SettingsView.swift (tabbed, includes About tab) provides quick links and info, including clickable version and license links, and toggles for behavior and launch at login.
  6. Updates: The app checks for updates with Sparkle, customizable via the settings.

Quick Start

Option 1: Download Prebuilt App

  1. Download the latest release
  2. Open the .dmg file and move the app into the /Applications folder
  3. Launch TabLift
  4. Grant Accessibility permission when prompted

Option 2: Build from Source

git clone https://github.com/turtle-key/TabLift.git
cd TabLift
open TabLift.xcodeproj

Then build and run in Xcode.
You'll be prompted to grant Accessibility permission.

Website

The website sources are in the website/ folder, powered by SvelteKit.
To run locally:

cd website
npm install
npm run dev

Permissions

TabLift needs Accessibility Access to restore minimized windows.
You'll be prompted on first launch, or you can enable it manually:

System Settings → Privacy & Security → Accessibility → Enable TabLift

UI Preview

App Screenshot App Screenshot

TabLift has a simple, modern Settings/About window with helpful links:

Know more about TabLiftBuy me a coffeeSource code on GitHubEmail support


File Structure

TabLift/
├── Sources/
│   ├── TabLiftApp.swift              // Main app entry point and delegate
│   ├── AppMonitor.swift              // Listens for app switch events
│   ├── WindowManager.swift           // Restores minimized windows (all or last, toggleable)
│   ├── MenuBarManager.swift          // Manages menu bar icon, popover, and quick toggles
│   ├── PermissionsService.swift      // Handles Accessibility permissions
│   ├── SettingsView.swift            // Tabbed Settings & About window (SwiftUI)
│   ├── AccessibilityPermissionWindow.swift // UI for requesting permissions
│   └── ...                           // Other supporting Swift files
├── website/                          // SvelteKit-powered website
│   ├── src/
│   ├── static/
│   ├── package.json
│   └── ... (SvelteKit structure)
├── Images/
│   ├── banner.png
│   ├── banner-wbg.png
│   └── app-screenshot.png
├── Assets.xcassets/
├── Info.plist
├── Sparkle/                          // Update framework
└── TabLift.xcodeproj

Tech Stack

Component Technology
macOS App Language Swift
macOS UI Frameworks SwiftUI (Settings/About window), AppKit (core)
macOS APIs Used Accessibility API (AXUIElement), NSWorkspace
Platform macOS 13.0 Ventura and later
macOS Packaging .app bundle (no kernel extensions)
Website Framework SvelteKit (Svelte, TypeScript, Vite)
Website Styling CSS, HTML5
Website Hosting Static (exportable, deploy anywhere)
Other Open Graph, Twitter Cards, SEO meta, robots.txt

Contributing

Pull requests are welcome!
If you have suggestions, bug reports, or want to help improve TabLift:

  1. Fork the repo
  2. Create a feature branch:
    git checkout -b feature/your-feature-name
    
  3. Push and open a PR

License

MIT License
© Mihai-Eduard Ghețu – See LICENSE for details.

Credits

Built for macOS power users frustrated with Apple's default app switching.
Thanks to the accessibility community and everyone who contributed feedback(the voices in my head).


TabLift – Lift your windows. Free your workflow.

Top categories

Loading Svelte Themes