KillSwitch is a lightweight macOS menu bar utility for seeing memory pressure and quickly quitting heavy apps.
Built in Swift and SwiftUI, KillSwitch gives you a fast, native way to spot memory-heavy apps and gracefully quit them without opening Activity Monitor.
KillSwitch also includes a built-in Sparkle updater for silent background checks and standard macOS update prompts.
- Shows current unified memory usage at a glance
- Lists the top memory-using user apps
- Lets you request a normal app quit without skipping save prompts
- Includes an in-app updater with background update checks
- Stays in the menu bar instead of becoming another window-heavy dashboard
The app shell is up and running locally with:
- menu bar extra and popover UI
- live memory snapshot
- top applications list
- graceful quit buttons
- settings window
- local build/run script
- Sparkle-based in-app update checks with silent background checking
KillSwitch ships with a Sparkle-based in-app updater. Once a user is on a current release, the app can check for updates in the background and present the standard macOS install-and-relaunch flow when a new version is available.
Users on older pre-updater builds need one manual upgrade through Homebrew or the latest GitHub Release before in-app updating takes over.
- macOS 14 or newer
- Full Xcode installed
KillSwitch prefers the full Xcode toolchain. The local run script auto-detects Xcode in:
/Applications/Xcode.app/Volumes/SSD/Applications/Xcode.app
If your Xcode install lives somewhere else, set DEVELOPER_DIR before building.
git clone https://github.com/<owner>/KillSwitch.git
cd KillSwitch
./script/build_and_run.shUseful variants:
./script/build_and_run.sh --verify
./script/build_and_run.sh --logs
./script/build_and_run.sh --debugSources/KillSwitch/
├── App/
├── Models/
├── Services/
├── ViewModels/
├── Views/
└── Support/
Supporting scripts live in script/, and the product spec lives in killswitch_prd.md.
The repo includes GitHub Actions for:
- CI builds on macOS
- Packaging a release
.appinto a zip artifact - Optional signing and notarization when Apple secrets are present
- Generating and publishing a Sparkle
appcast.xmlfeed for in-app updates - Generating a Homebrew cask file from the release artifact checksum
- Optionally publishing that cask into a Homebrew tap when tap secrets are present
See docs/release.md for the release and Homebrew flow.
The intended distribution path is:
- Ship a tagged GitHub Release with
KillSwitch.zip - Generate the matching
killswitch.rbcask file from that artifact - Optionally publish that cask into your tap automatically from GitHub Actions
- Install with
brew install --cask <tap>/killswitch
The release workflow generates the cask file for you once the repo slug and release artifact exist. If HOMEBREW_TAP_REPOSITORY and HOMEBREW_TAP_GITHUB_TOKEN are configured in GitHub Actions secrets, it will also commit the generated cask into that tap.
- Choose the public GitHub repo slug
- Choose the Homebrew tap repository slug
- Choose an open-source license
- Finalize signing and notarization secrets for release builds
