What It Does
QuitProtect intercepts commandQ before it reaches the frontmost application and requires you to confirm the quit with a deliberate action. A single accidental keypress won’t close anything.
It sits silently in your menu bar, counting the quits it has blocked. You’ll be surprised how often it saves you.
Two Modes
Double-press command-Q (default)
The first commandQ is consumed silently. Press again within the interval to actually quit. If you don’t press again, nothing happens — the quit is blocked.
| Interval | Description |
|---|---|
| 0.3s | Fast — requires quick double-tap |
| 0.4s (default) | Balanced |
| 0.5s | Relaxed |
| 0.75s | Generous window |
Hold command-Q
Hold commandQ for the configured duration to quit. Anything shorter is blocked.
| Duration | Description |
|---|---|
| 0.5s | Quick hold |
| 1.0s (default) | Balanced |
| 1.5s | Deliberate |
| 2.0s | Very deliberate |
Settings
Click the power icon in the menu bar and choose Settings… to configure:
Quit Mode
Switch between double-press and hold-to-quit using radio buttons. The timing option updates to match the selected mode.
General
- Accessibility permission — status display and grant button
- Show quit guidance — a small overlay on the first commandQ telling you what to do next (off by default). It never takes focus from the app you were using, and it disappears the moment the gesture completes or lapses rather than lingering on screen contradicting itself
- Show icon in menu bar — hides the power icon in the menu bar while QuitProtect keeps running in the background, still protecting against accidental quits. Your choice persists across launches, including login auto-start. Shown only on macOS 14–15; on macOS 26 (Tahoe) and later, use System Settings → Menu Bar, which provides this natively.
- Menu bar icon pill — optional grey background for stronger contrast on busy or wallpaper-tinted menu bars (off by default)
- Launch at Login — start automatically when you log in
If you’ve hidden the menu bar icon and want it back, just re-open QuitProtect from your Applications folder — it reappears immediately.
Auto-updates are handled by Sparkle. Use the “Check for Updates…” menu item to check on demand; Sparkle’s prompt offers an “Automatically download and install updates in the future” checkbox the first time an update is available. QuitProtect checks for new versions automatically once a day in the background.
Languages
QuitProtect follows your macOS language preference. English and Simplified Chinese (简体中文) are included; every other language, Traditional Chinese among them, falls back to English.
The Simplified Chinese localisation was contributed by RSS1102, who also wrote the quit guidance overlay.
The localisation went further than translation: the string handling moved into the shared JorvikKit toolkit, so every other Jorvik app can now be localised the same way. That part was unasked-for, and is the more valuable of the two.
Permissions
- Accessibility — required to intercept keyboard events before they reach applications. macOS will prompt on first launch.
Permission status can be checked in Settings.
Self-exclusion
QuitProtect does not protect itself — you can always quit QuitProtect with a normal commandQ.
Installation
Two formats on every release — both signed and notarised, pick whichever suits:
- Installer (
.pkg) — recommended for first-time installs. Double-click to run; macOS Installer places the app in/Applicationswithout quarantine or App Translocation. - Download (
.zip) — unzip and dragQuitProtect.appto your Applications folder.
Or install it with Homebrew: brew install --cask perpetualbeta/jorvik/quitprotect
On first launch, grant Accessibility permission when prompted.
Building from Source
QuitProtect uses Swift Package Manager. No Xcode project is required.
- Clone the repo:
git clone https://github.com/PerpetualBeta/QuitProtect.git - Run
gmake build - Launch with
open .build/QuitProtect.app
Requirements
macOS 14 (Sonoma) or later. Universal binary (Apple Silicon and Intel).