A native Launchpad replacement for macOS 15.6+, built with SwiftUI + AppKit.
Looking for a Launchpad alternative on macOS Tahoe? This project focuses on exactly that: a launcher with global hotkey toggle, paged app grid, folder management, drag sorting, and fast local search.
Rebind the global shortcut in Settings (Cmd + ,):
Download Launchpad_Back.app.zip from the latest release, unzip it, and move Launchpad_Back.app into /Applications.
The app is ad-hoc signed rather than notarized, so macOS blocks it on first launch. Right-click the app and choose Open, then confirm — or allow it under System Settings → Privacy & Security.
Launchpad alternative, macOS app launcher, SwiftUI launcher, AppKit launcher, global hotkey launcher, macOS Tahoe Launchpad replacement, Homebrew Cask app scanner
- Runs in a floating launcher window and can be toggled globally with a customizable hotkey (default
Cmd + L, configurable in Settings) - Opens and closes with a Launchpad-style zoom + fade animation; launching an app or clicking outside the window dismisses it
- Uses a responsive grid with dynamic rows/columns (5-9 columns, 3-7 rows)
- Supports drag reorder, folders, folder rename, and drag-out from expanded folders
- Starts searching as soon as you type, with
Returnlaunching the first match - Searches by app name, bundle ID, and app path (case-insensitive)
- Scans system, user, and Homebrew app locations
- Resolves app icons through workspace icon, metadata fallback, and generated fallback icon
| Input | Behavior |
|---|---|
Global hotkey (default Cmd + L, configurable in Settings / Cmd + ,) |
Toggle launcher visibility globally |
| Type anywhere | Characters go straight into the search field |
Return |
Launch the first search result |
Cmd + W |
Hide launcher window |
Cmd + Q |
Quit app |
Cmd + , |
Open Settings |
Esc |
Exit edit mode -> close folder -> clear search -> hide window |
Left / Up |
Previous page (when search is empty) |
Right / Down |
Next page (when search is empty) |
| Click outside the window | Hide launcher |
| Trackpad scroll gesture | Pages follow your fingers; release to snap or flick to turn |
| Mouse wheel | Page switch with notch accumulation + debounce |
Press Cmd + , to open Settings, where the global toggle shortcut can be re-recorded: click the shortcut button and press a new combination.
- Regular keys require
Cmd,Opt, orCtrl F1–F20can be bound on their own, soF4reproduces the original Launchpad keyEsccancels recording- The hotkey is re-registered immediately and survives relaunch
| Path | Recursive |
|---|---|
/System/Applications |
No |
/System/Applications/Utilities |
No |
/Applications |
No |
/Applications/Utilities |
No |
~/Applications |
No |
/opt/homebrew/Caskroom |
Yes |
The scanner also filters a set of hidden/background system apps and deduplicates apps using a stable identifier (bundleID, or path when bundleID is missing).
- Long press any icon to enter edit mode
- Drag app onto app to create a folder (
New Folderby default) - Drag app onto folder to add it
- Reorder apps inside an expanded folder
- Drag app out of expanded folder to remove it
- Folder is removed automatically if only one app remains
- Reset layout clears saved custom order and folders, then restores alphabetical order
- Resolve symlink/canonical bundle path first
- Use
NSWorkspaceicon if it is not the generic app icon - If generic icon is returned, load icon from bundle metadata (
CFBundleIconFile,CFBundleIconName, etc.) - If metadata icon is still unavailable, generate a consistent initials-based fallback icon
- Cache resized icons asynchronously and preload adjacent pages for smoother pagination
Launchpad_Back stores layout state in UserDefaults:
launchpad_item_orderlaunchpad_foldersglobalToggleHotKey
Launchpad_Back/
├── Launchpad_BackApp.swift
├── ContentView.swift
├── Models/
│ └── AppItem.swift
├── Services/
│ ├── AppIconCache.swift
│ ├── AppIconResolver.swift
│ ├── AppLauncherService.swift
│ ├── AppScannerService.swift
│ ├── GestureManager.swift
│ ├── GridLayoutManager.swift
│ ├── GridScreenLayout.swift
│ ├── HotKeySettings.swift
│ ├── KeyboardEventManager.swift
│ └── Logger.swift
├── ViewModels/
│ ├── EditModeManager.swift
│ ├── LaunchpadViewModel.swift
│ ├── PaginationViewModel.swift
│ └── SearchViewModel.swift
├── Views/
│ ├── AppIconView.swift
│ ├── BackgroundView.swift
│ ├── FolderExpandedView.swift
│ ├── PageIndicatorView.swift
│ ├── SearchBarView.swift
│ └── SettingsView.swift
└── Assets.xcassets/
- macOS 15.6 or later
- Xcode 26.0 or later
-
Clone the repository:
git clone https://github.com/EricYang801/Launchpad_Back.git cd Launchpad_Back -
Open in Xcode:
open Launchpad_Back.xcodeproj
-
Build and run:
- Select
My Mac - Press
Cmd + R
Or build from Terminal:
xcodebuild build -scheme Launchpad_Back -destination 'platform=macOS'Run unit tests:
xcodebuild test -scheme Launchpad_Back -destination 'platform=macOS' -only-testing:Launchpad_BackTestsCurrent test suite covers:
- icon resolution for direct path, symlink path, metadata fallback, and generated fallback icons
- icon cache behavior for canonical paths, concurrent requests, and in-flight async request joining
- folder creation/add/remove/delete and saved-order restore
- reset layout behavior
- search matching by app name, bundle ID, and path
- pagination slicing, bounds checks, and page validation
- basic
SearchViewModelbehavior
This project is licensed under GPL-3.0. See LICENSE.

