Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/0xdps/default-tamer/llms.txt

Use this file to discover all available pages before exploring further.

What is Default Tamer?

Default Tamer is a macOS menu bar utility that acts as your system’s default browser — but instead of opening URLs itself, it intelligently routes them to the right browser based on where the link came from and what URL it points to. Set Default Tamer as your default browser once — from then on, your links open exactly where you want them.
Default Tamer requires macOS 13.0 or later and is built with Swift 5.9.

How It Works

When you click a link anywhere on your Mac, Default Tamer evaluates your rules in order. The first matching rule wins, and unmatched links go to your fallback browser.
// Router.swift:21-58
static func route(
    url: URL,
    sourceApp: String?,
    settings: Settings,
    rules: [Rule],
    modifierFlags: NSEvent.ModifierFlags?
) -> RouteAction
Rules are evaluated top-to-bottom:
  1. Check if app is enabled
  2. Check for Option key override (shows manual browser chooser)
  3. Evaluate each enabled rule until one matches
  4. Fall back to default browser if no rules match

Key Features

Smart Routing

Route links based on source app (Slack, Cursor, etc.) and URL patterns

Domain Rules

Send specific domains to specific browsers with exact, suffix, or contains matching

Override Chooser

Hold ⌥ Option while clicking any link to manually pick a browser

Fallback Browser

Configurable default for unmatched links

Launch at Login

Optionally start at system login

Activity Logging

Optional, privacy-first diagnostic log of recent routes

Rule Types

Default Tamer supports three types of routing rules:

Source App Rules

Route links based on which application sent them. Example: All links from Slack open in Chrome
// Rule.swift:72-86
static func slackToChrome() -> Rule {
    var rule = Rule(type: .sourceApp, targetBrowserId: "com.google.Chrome")
    
    if let bundleId = AppResolver.resolveBundleId(forAppNamed: "Slack") {
        rule.sourceAppBundleId = bundleId
        rule.sourceAppName = "Slack"
    }
    
    return rule
}

Domain Rules

Route based on the domain with three matching types:
  • Exact: github.com matches only github.com (also normalizes www.github.com)
  • Suffix: .atlassian.net matches mycompany.atlassian.net, jira.atlassian.net, etc.
  • Contains: jira matches any domain containing “jira”
Example: All GitHub URLs open in Firefox

URL Pattern Rules

Route based on URL content:
  • Contains: Simple string matching (e.g., /admin matches any URL with /admin)
  • Regex: Advanced pattern matching with full regex support
Example: All URLs containing /admin open in Safari

Privacy First

All processing is local — no network calls, no telemetry
Stores no personal information
Activity logging is opt-in; URLs are sanitized before storage (tokens, API keys, secrets are stripped)
Default Tamer never sends your browsing data anywhere. Everything happens on your Mac.

What’s Next?

Installation

Download and set up Default Tamer as your default browser

Quick Start

Create your first routing rule in under 2 minutes

Build docs developers (and LLMs) love