
Finicky sets itself as the macOS default browser, then hands every link to the browser your rules pick. A link clicked in Slack, Mail, a terminal or a PDF goes through Finicky, which decides in milliseconds: work links to 1 browser, everything else to another, a specific site to a specific profile.

The rules live in 1 file, ~/.finicky.js, written in JavaScript or TypeScript. Save the file and Finicky reloads it.
Why I use it
I run 2 browsers. Microsoft Edge holds my work sessions: Microsoft 365, the company sign-in, the sales tools. Google Chrome holds everything else. Before Finicky, every link from Teams, Outlook or a Markdown note opened in whichever browser was the default, and half of them landed in the wrong one, signed out.
Now the work hosts open in Edge and the rest in Chrome, with no prompt and no thinking. I set it up on 28th October 2026 with the work host list taken from 90 days of Edge history.
What it does
| Feature | What it means |
|---|---|
| Handlers | Rules that pick the browser for a URL: by wildcard, regex, function or a list |
| Rewrites | Change the URL before it opens: force HTTPS, strip tracking parameters, swap a domain |
| Browser profiles | Open a Chromium browser in a named profile: "Google Chrome:Personal" |
| Modifier keys | Hold Shift, Option, Command or Control while clicking to change the target |
| Opener | Match on the app the link came from (name, bundle ID or path) |
| Background opening | Open the tab without bringing the browser to the front |
| Browser extensions | Chrome and Firefox add "Open with Finicky", and Option-click sends a link to it |
Rules run in order: rewrites first, then handlers, then defaultBrowser for anything that matched nothing.
My config, simplified
The real list names my employer's tools, so this is the shape, not the content:
// ~/.finicky.js
const EDGE = "Microsoft Edge";
const CHROME = "Google Chrome";
const workHosts = [
/(^|\.)cloud\.microsoft$/, // Microsoft 365
"teams.microsoft.com",
/(^|\.)microsoftonline\.com$/, // Microsoft sign-in
/(^|\.)example-crm\.com$/, // a work SaaS tool, 1 line each
];
export default {
defaultBrowser: CHROME,
options: {
checkForUpdates: false, // Homebrew updates it
logRequests: false,
},
handlers: [
{ match: () => finicky.getModifierKeys().shift, browser: EDGE }, // Shift-click: force Edge
{ match: () => finicky.getModifierKeys().option, browser: CHROME }, // Option-click: force Chrome
{ match: finicky.matchHostnames(workHosts), browser: EDGE },
],
};
Things I learned setting it up:
- Put the modifier rules first. Handlers run top to bottom, so Shift and Option win over the host list. That gives a 1-click override for the odd link the list gets wrong.
- Match hosts, not URLs.
finicky.matchHostnames()with a regex per domain (/(^|\.)office\.com$/) catches every subdomain and never matches a look-alike such asoffice.com.example.net. - Safe Links need their own line. Links in Outlook mail are wrapped in
*.safelinks.protection.outlook.com, so that host goes in the work list, or every link from work email opens in the wrong browser first. - In Ghostty, Cmd-click already holds Command, so the override becomes Shift+Cmd+click.
- Start Finicky by hand to debug. Opening the app from Applications or Spotlight shows its configuration and troubleshooting window.
Install
brew install --cask finicky
Then create ~/.finicky.js, start Finicky once, and accept it as the default browser in the macOS prompt. Version 4.2.2 is current (October 2025). Version 4 (May 2025) was a rewrite in Go with a new configuration format: configs from Finicky 3 need the migration guide.
Alternatives
| App | How it decides | Price |
|---|---|---|
| Finicky | Rules in a JavaScript file | Free, open source |
| Velja | Rules in a settings window, plus a picker | Mac App Store |
| Choosy | Rules or a browser picker | Paid |
| OpenIn | Rules and a picker, also for mail and files | Paid |
| Browserosaurus | A picker on every click | Free, repository archived in 2025 |
Finicky is the one for a rule set that lives in a text file, sits in a backup or a dotfiles repo, and that an agent can edit. A picker suits someone who wants to choose by hand each time.
Further Reading

- Configuration ideas, Finicky wiki
- Finicky releases