Get started

Install Grinch, write one rule, and make it your default browser. Every step can be undone.

  1. Install Grinch

    Grinch needs macOS 13 or later. Releases are universal binaries for Apple silicon and Intel Macs, signed with a Developer ID and notarized by Apple.

    Download the latest Grinch-vX.Y.Z.dmg from the releases page, open it, and drag Grinch.app onto the Applications shortcut in the DMG window.

    Install to /Applications directly. Running Grinch.app from ~/Downloads or anywhere else triggers Gatekeeper translocation, which makes the same app appear several times in the default-browser picker.

    From the terminal

    This script finds the latest DMG through the GitHub API, downloads it, copies Grinch.app into /Applications, and opens it:

    Terminal
    DMG=$(curl -fsSL https://api.github.com/repos/jamtur01/grinch/releases/latest \
      | grep -oE '"browser_download_url": "[^"]*\.dmg"' | cut -d'"' -f4)
    curl -fsSL "$DMG" -o /tmp/grinch.dmg
    hdiutil attach -nobrowse -quiet /tmp/grinch.dmg
    ditto "/Volumes/Grinch "*/Grinch.app /Applications/Grinch.app
    hdiutil detach "/Volumes/Grinch "* -quiet
    open /Applications/Grinch.app

    With Homebrew

    A community-maintained cask is available from bric3/tap. It is maintained outside the Grinch project.

    Terminal
    brew tap bric3/tap
    brew install --cask grinch

    From source

    Building needs Rust stable through rustup; the contributor prerequisites list the tools. Ad-hoc signed builds don't include automatic updates.

    Terminal
    git clone https://github.com/jamtur01/grinch
    cd grinch
    make run
  2. Write your first rule

    Grinch reads its rules from a JavaScript file. Create ~/.config/grinch.js with this content:

    ~/.config/grinch.js
    module.exports = {
      default: "com.apple.Safari",
      rules: [
        { match: "github.com", open: "com.google.Chrome" },
      ],
    };

    This sends github.com and its subdomains to Chrome, and every other link to Safari. Use apps you have installed: a target can be any app that can open the URL, such as Zoom or Slack. If ~/.config doesn't exist, create it first with mkdir -p ~/.config.

    Only use configs you trust. Grinch runs the config file as JavaScript.

    The commands on this site call the binary inside the app. Add this alias to your shell, or use the full path each time:

    Terminal
    alias Grinch='/Applications/Grinch.app/Contents/MacOS/Grinch'

    To find the bundle ID of a browser or app, list every app registered to open web links:

    Terminal
    Grinch --list-browsers
    com.apple.Safari               Safari
    com.google.Chrome              Google Chrome
    com.brave.Browser              Brave Browser
    com.microsoft.edgemac          Microsoft Edge
    app.zen-browser.zen            Zen
    ...

    App names such as "Google Chrome" work too. The configuration reference covers profiles, other match types, and rewrites.

  3. Launch Grinch

    Open Grinch from Applications. Its eyes appear in the menu bar. Click them for Open Config, Reload Config, Open Diagnostic Log, and update checks. The menu bar reference lists every item.

    macOS also asks whether Grinch may use Accessibility. Grinch only needs it for rules that read the title of the window a link came from. You can decline now and allow it later under System Settings → Privacy & Security → Accessibility.

  4. Make Grinch your default browser

    Open System Settings → Desktop & Dock → Default web browser and choose Grinch. Links you open in other apps now go through your rules.

  5. Check a link

    Ask Grinch where a link would go, without opening a browser:

    Terminal
    Grinch --test "https://github.com/jamtur01/grinch"
    URL:     https://github.com/jamtur01/grinch
    Final:   https://github.com/jamtur01/grinch
    Browser: com.google.Chrome
    Grinch --test "https://example.com/"
    URL:     https://example.com/
    Final:   https://example.com/
    Browser: com.apple.Safari

    Then click a GitHub link in Slack or Mail. It opens in Chrome. If it doesn't, Troubleshooting shows how to find out why.

Change your config

Edit the file, then choose Reload Config (⌘R) from the menu. If the reload fails, the menu-bar icon changes to a warning sign and the menu shows the error. Grinch keeps routing with the last config that loaded until you fix it.

To check a config from a terminal or an editor save hook, run Grinch --validate. If your edits don't take effect, Grinch may be reading a different config file.

Updates

Grinch checks for updates once a day. To check now, choose Check for Updates… from the menu bar. Turn off Check for Updates Automatically in the same menu, or set checkForUpdates: false in your config, to stop the daily check.

Undo or uninstall

To stop routing links through Grinch, choose another browser under System Settings → Desktop & Dock → Default web browser.

To remove Grinch:

  1. If you turned on Start at Login, turn it off in the Grinch menu.
  2. Choose Quit Grinch (⌘Q).
  3. Move /Applications/Grinch.app to the Trash.

Your config file and the logs in ~/Library/Logs/Grinch/ stay until you delete them.

Getting help

Only the latest published release is supported for issues and security fixes. Upgrade and reproduce the problem before filing a bug; older releases don't receive backported fixes.

For bug reports and feature requests, follow the contributor guide. Report suspected vulnerabilities through private reporting, not a public issue. The security policy explains what to include and how to redact diagnostics.