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

IntervalDescription
0.3sFast — requires quick double-tap
0.4s (default)Balanced
0.5sRelaxed
0.75sGenerous window

Hold ⌘Q

Hold commandQ for the configured duration to quit. Anything shorter is blocked.

DurationDescription
0.5sQuick hold
1.0s (default)Balanced
1.5sDeliberate
2.0sVery 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

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.

Permissions

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:

On first launch, grant Accessibility permission when prompted.

Building from Source

QuitProtect uses Swift Package Manager. No Xcode project is required.

  1. Clone the repo: git clone https://github.com/PerpetualBeta/QuitProtect.git
  2. Run gmake build
  3. Launch with open .build/QuitProtect.app

Requirements

macOS 14 (Sonoma) or later. Universal binary (Apple Silicon and Intel).