Finicky is an macOS application that allows you to set up rules that decide which browser is opened for every link or url. With Finicky as your default browser, you can tell it to open Facebook or Reddit in one browser, and Trello or LinkedIn in another.
- Write rules to open urls in any browser
- Rewrite and replace parts of urls before opening them
Table of Contents
- Installation
- Example configuration
- API Reference
- Issues
- Questions
- License
- Support development
- Building from source
Installation
- Install Finicky:
- Download the latest release, unzip and put
Finicky.app
in your application folder.
- Create a file called
.finicky.js
with configuration (examples) in your home directory. - Start Finicky. Please allow it to be set as the default browser.
- And you're done. All links clicked that would have opened your browser are now first handled by Finicky.
Example configuration
Basic configuration
module.exports = {
defaultBrowser: "Google Chrome",
handlers: [
{
// Open apple.com and example.org urls in Safari
match: finicky.matchHostnames(["apple.com", "example.org"]),
browser: "Safari"
},
{
// Open any url including the string "workplace" in Firefox
match: /workplace/,
browser: "Firefox"
}
]
};
Wildcard matching
module.exports = {
defaultBrowser: "Safari",
handlers: [
{
// Open google.com and *.google.com urls in Google Chrome
match: finicky.matchHostnames([
"google.com", // match google.com domain as string (to make regular expression less complicated)
/.*\.google.com$/ // match all google.com subdomains
]),
browser: "Google Chrome"
}
]
};
Opening preferred browser
module.exports = {
defaultBrowser: "Safari",
handlers: [
{
match: finicky.matchHostnames(["example.com"]),
// Opens the first running browsers in the list. If none are running, the first one will be started.
browser: ["Google Chrome", "Safari", "Firefox"]
}
]
};
Rewrite urls
module.exports = {
defaultBrowser: "Google Chrome",
rewrite: [
{
// Redirect all urls to use https
match: ({ url }) => url.protocol === "http",
url: ({ url }) => ({
...url,
protocol: "https"
})
},
{
// Avoid being rickrolled
match: [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/watch?v=oHg5SJYRHA0"
],
url: "about:blank"
}
]
};
Advanced usage, settings
module.exports = {
defaultBrowser: "Google Chrome",
options: {
// Hide the finicky icon from the top bar
hideIcon: true
},
handlers: [
{
// Open any link clicked in Slack in Safari
match: ({ sourceBundleIdentifier }) =>
sourceBundleIdentifier === "com.tinyspeck.slackmacgap",
browser: "Safari"
},
{
match: ["http://zombo.com"],
browser: {
name: "Google Chrome Canary",
// Force opening the link in the background
openInBackground: true
}
},
{
match: ["http://example.com"],
// Don't open any browser for this url, effectively blocking it
browser: null
}
]
};
Keyboard modifiers
module.exports = {
defaultBrowser: "Google Chrome",
handlers: [
{
// Open links in Safari when the option key is pressed
// Valid keys are: shift, option, command, control, capsLock, and function.
// Please not that control usually opens a tooltip menu instead of visiting a link
match: ({ keys }) => keys.option,
browser: "Safari"
}
]
};
Configuration ideas
See the wiki page for other configuration ideas
API Reference
Issues
Bugs
Please file an issue for bugs, missing documentation, or unexpected behavior.
Feature Requests
Please file an issue to suggest new features. Vote on feature requests by adding a 👍.
Questions
Have any other questions or need help? Please feel free to reach out to me on Twitter.
License
Support development
If you want to help support further development of finicky, feel free to buy me a coffee on ko-fi.
Building from source
Install XCode and XCode command line tools and then run commands:
git clone https://github.com/johnste/finicky.git
cd finicky/Finicky
xcodebuild
When complete you'll find a freshly built Finicky app in
build/release
.