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
- # Denials per day and sitebouncer stats show
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
- A Stats window counts denials per day and per site
- 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 browser restart
Bouncer blocks new lookups, but browsers keep using connections they already have open, so a site that was already loaded can keep working. When you turn blocking on or add a block rule, Bouncer offers to restart your default browser; Chromium browsers reopen with their windows and tabs. macOS also runs one VPN at a time, so if another VPN starts, Bouncer stops blocking and says so.