Bouncer app icon

Menu bar utility for macOS

Bouncer

Block distracting sites in every browser and app from the menu bar.

Requires macOS 14 or later. You build it with Xcode under your own Apple developer account.

Example bouncer commands

  • # Block a site and its subdomainsbouncer rules add reddit.com
  • # Or match with a regexbouncer rules add '/tiktok|instagram/'
  • # Start blockingbouncer on
  • # Recently blocked domainsbouncer activity

How Bouncer works

  • Add a domain, a wildcard, or a regular expression.
  • Turn blocking on from the menu bar, a global shortcut, or the bouncer command.
  • When an app looks up a blocked site, the menu bar shows the domain for a moment.
  • Quitting Bouncer removes every block.

Block by domain or pattern

Type a domain, paste a URL, or write a regex. You can toggle, edit, and test rules from the menu bar or the command line.

reddit.com
The domain and its subdomains, like old.reddit.com.
*.substack.com
Subdomains only.
/tiktok|instagram/
Any domain matching the regex, ignoring case.
allow old.reddit.com
An exception to broader block rules.
  • A global shortcut toggles blocking (⌃⌥⌘B by default)
  • Option-click the menu bar icon to toggle
  • Recent activity shows what was blocked
  • No Dock icon

Works with iCloud Private Relay

While blocking is on, Bouncer runs a VPN tunnel that handles only DNS. Lookups for blocked domains get “not found”; everything else goes to your usual DNS servers. macOS prefers the tunnel's DNS over Private Relay's, so Safari, Chromium browsers, and other apps all follow the same rules.

  • Only DNS goes through the tunnel
  • A self-test warns if lookups bypass it
  • It follows your network's DNS servers when you switch networks

Scriptable from the terminal

The bundled bouncer command can do everything the menu bar can: toggle blocking, manage and test rules, and list recent blocks.

  • Every command accepts --json
  • Results go to stdout, errors to stderr, with distinct exit codes
  • Settings live in a plain TOML file at ~/.config/bouncer/config.toml

Permissions and privacy

  • No administrator password or background daemon
  • Blocks are removed when Bouncer quits, and within seconds if it crashes
  • No analytics. The only network traffic is your DNS lookups, sent to your DNS servers

Open tabs need a reload

Bouncer blocks new lookups, so a site that was already open can keep loading until the browser reconnects. Reload the page and the block applies. macOS runs one VPN at a time; if another VPN starts, Bouncer stops blocking and says so.