Skip to content

About

A native Launchpad replacement for macOS 15.6+, built with SwiftUI + AppKit. Global hotkey, paged app grid, folder management, drag sorting, and local search.

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Repository files navigation

Launchpad_Back

A native Launchpad replacement for macOS 15.6+, built with SwiftUI + AppKit.

Downloads

English | 繁體中文 | 简体中文

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.

Demo

Main Interface

Rebind the global shortcut in Settings (Cmd + ,):

Settings window

Install

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.

Search Keywords

Launchpad alternative, macOS app launcher, SwiftUI launcher, AppKit launcher, global hotkey launcher, macOS Tahoe Launchpad replacement, Homebrew Cask app scanner

What It Does (Aligned With Current Code)

  • 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 Return launching 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

Controls

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

Settings

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, or Ctrl
  • F1–F20 can be bound on their own, so F4 reproduces the original Launchpad key
  • Esc cancels recording
  • The hotkey is re-registered immediately and survives relaunch

App Discovery Paths

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).

Folder and Layout Behavior

  • Long press any icon to enter edit mode
  • Drag app onto app to create a folder (New Folder by 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

Icon Pipeline

  • Resolve symlink/canonical bundle path first
  • Use NSWorkspace icon 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

Persistence

Launchpad_Back stores layout state in UserDefaults:

  • launchpad_item_order
  • launchpad_folders
  • globalToggleHotKey

Project Structure

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/

Requirements

  • macOS 15.6 or later
  • Xcode 26.0 or later

Build

  1. Clone the repository:

    git clone https://github.com/EricYang801/Launchpad_Back.git
    cd Launchpad_Back
  2. Open in Xcode:

    open Launchpad_Back.xcodeproj
  3. Build and run:

  • Select My Mac
  • Press Cmd + R

Or build from Terminal:

xcodebuild build -scheme Launchpad_Back -destination 'platform=macOS'

Tests

Run unit tests:

xcodebuild test -scheme Launchpad_Back -destination 'platform=macOS' -only-testing:Launchpad_BackTests

Current 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 SearchViewModel behavior

License

This project is licensed under GPL-3.0. See LICENSE.

About

A native Launchpad replacement for macOS 15.6+, built with SwiftUI + AppKit. Global hotkey, paged app grid, folder management, drag sorting, and local search.

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages