MCPcopy Index your code
hub / github.com/johnste/finicky

github.com/johnste/finicky @v4.2.2 sqlite

repository ↗ · DeepWiki ↗ · release v4.2.2 ↗
136 symbols 302 edges 36 files 49 documented · 36%
README

Finicky Logo

Always open the right browser

Finicky is a macOS application that allows you to set up rules that decide which browser is opened for every url. With Finicky as your default browser, you can tell it to open Bluesky or Reddit in one browser, and LinkedIn or Google Meet in another.

  • Route any URL to your preferred browser with powerful matching rules
  • Automatically edit URLs before opening them (e.g., force HTTPS, remove tracking parameters)
  • Write rules in JavaScript or TypeScript for complete control
  • Create complex routing logic with regular expressions and custom functions
  • Handle multiple browsers and apps with a single configuration
  • Keep your workflow organized by separating work and personal browsing

GitHub prerelease MIT License Finicky v4 release

Table of Contents

Installation

  • Download from releases
  • Or install via homebrew: brew install --cask finicky
  • Create a JavaScript or TypeScript configuration file at ~/.finicky.js. Have a look at the example configuration below, or in the example-config folder.
  • Start Finicky (in Applications, or through Spotlight/Alfred/Raycast) and allow it to be set as the default browser. Starting Finicky manually opens the configuration/troubleshooting window.

Basic configuration

Here's a short example configuration that can help you get started

// ~/.finicky.js
export default {
  defaultBrowser: "Google Chrome",
  rewrite: [
    {
      // Redirect all x.com urls to use xcancel.com
      match: "x.com/*",
      url: (url) => {
        url.host = "xcancel.com";
        return url;
      },
    },
  ],
  handlers: [
    {
      // Open all bsky.app urls in Firefox
      match: "bsky.app/*",
      browser: "Firefox",
    },
    {
      // Open google.com and *.google.com urls in Google Chrome
      match: [
        "google.com/*", // match google.com urls
        "*.google.com*", // also match google.com subdomains
      ],
      browser: "Google Chrome",
    },
  ],
};

See the configuration for all the features Finicky supports.

Configuration

Finicky has extensive support for matching, rewriting and starting browsers or other application that handle urls. See the wiki for the full configuration documentation explaining available, APIs and options as well as detail information on how to match on urls.

Migrating from Finicky 3

Please see the wiki page for updating info and migrating your configuration

Other

Browser extensions

Finicky has browser extensions for Chrome and Firefox. They add an "open with Finicky" on links, and alt-clicking links opens them in Finicky directly.

Building Finicky from source

See Building Finicky from source

Works well with

If you are looking for something that lets you pick the browser to activate in a graphical interface, check out Browserosaurus by Will Stone, an open source browser prompter for macOS. It works really well together with Finicky!

Questions

Have any other questions or need help? Please feel free to reach out to me on Bluesky or post an issue here

License

MIT

Icon designed by @uetchy

Extension points exported contracts — how you extend this code

LogEntry (Interface)
(no doc)
packages/finicky-ui/src/types.ts
Window (Interface)
(no doc)
packages/finicky-ui/src/types.ts
UpdateInfo (Interface)
(no doc)
packages/finicky-ui/src/types.ts

Core symbols most depended-on inside this repo

matchWildcard
called by 37
packages/config-api/src/wildcard.ts
isMatch
called by 19
packages/config-api/src/index.ts
autodetectAppStringType
called by 14
packages/config-api/src/index.ts
rewriteUrl
called by 13
packages/config-api/src/index.ts
resolveBrowser
called by 12
packages/config-api/src/index.ts
openUrl
called by 6
packages/config-api/src/index.ts
Runtime
called by 4
apps/finicky/src/config/vm.go
getDefaultHandlerForURLScheme
called by 3
apps/finicky/src/browser.go

Shape

Function 93
Method 22
Struct 16
Interface 3
Class 2

Languages

Go71%
TypeScript29%

Modules by API surface

apps/finicky/src/main.go17 symbols
apps/finicky/src/config/cache.go16 symbols
packages/config-api/src/index.ts11 symbols
apps/finicky/src/version/version.go10 symbols
apps/finicky/src/config/configfiles.go10 symbols
packages/config-api/src/FinickyURL.ts7 symbols
apps/finicky/src/window/window.go7 symbols
apps/finicky/src/config/vm.go7 symbols
apps/finicky/src/browser/launcher.go7 symbols
packages/config-api/src/utils.test.ts6 symbols
apps/finicky/src/logger/logger.go6 symbols
packages/config-api/src/utilities.ts4 symbols

Dependencies from manifests, versioned

al.essio.dev/pkg/shellescapev1.6.0 · 1×
github.com/Masterminds/semverv1.5.0 · 1×
github.com/dlclark/regexp2v1.11.5 · 1×
github.com/dop251/gojav0.0.0-2025030717580 · 1×
github.com/go-sourcemap/sourcemapv2.1.4+incompatible · 1×
github.com/google/pprofv0.0.0-2025030219165 · 1×
github.com/jvatic/goja-babelv0.0.0-2025030812173 · 1×
golang.org/x/sysv0.13.0 · 1×
golang.org/x/textv0.23.0 · 1×
@duplojs/zod-to-typescript0.4.0 · 1×

For agents

$ claude mcp add finicky \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact