Finicky icon

Finicky

Choose which browser opens every link.

A free macOS app that sends URLs to the right browser based on rules you set up - by pattern, by app, or whatever you need.

Free & open source · macOS 12+

What it does

Configure rules in the app

Add URL routing rules directly in the app.

Recommended
🔗

Route by URL pattern

Match URLs with wildcards and send them to the right browser. Works for http, https, and custom schemes.

📄

JS/TS config for power users

Write a ~/.finicky.js or ~/.finicky.ts for full programmatic control - match functions, conditions, rewrites, and whatever else you can think of.

👁

Route by window context

Open links differently depending on which app they came from.

👤

Browser profiles

Target a specific Firefox or Chrome profile, not just a browser. E.g. keep work and personal browser separate.

🔎

Built-in URL tester

Paste a URL into the app and see which rule matches.

How it works

1

Install Finicky

Download and move it to your Applications folder.

2

Set as default browser

Finicky will ask. Click "Use Finicky" and it handles everything from there.

3

Add your rules

Open the app and set up which URLs go to which browser.

Screenshots

Rules editor
Rules editor
Preferences
Preferences
For power users

Full control with JavaScript or TypeScript

Drop a ~/.finicky.js or ~/.finicky.ts in your home directory for programmatic routing - match functions, which app triggered the link, window title, and more.

~/.finicky.js

export default {  defaultBrowser: "Safari",  rewrite: [    {      // Redirect x.com to xcancel.com      match: "x.com/*",      url: ({ url }) => ({ ...url, host: "xcancel.com" }),    },    {      // Strip tracking parameters from all URLs      match: () => true,      url: ({ url }) => {        [...url.search.keys()].filter(p => p.startsWith("utm_")).forEach(p => url.search.delete(p));        return url;      },    },  ],  handlers: [    {      // Open work links in Chrome      match: ["*.work.example.com*", "*jira*"],      browser: "Google Chrome",    },    {      // Route by window title - e.g. which Slack workspace      match: ({ opener }) => opener?.windowTitle?.includes("Work"),      browser: "Google Chrome",    },    {      // Open with a specific Firefox profile      match: "*.mozilla.org*",      browser: { name: "Firefox", profile: "work" },    },  ],};