A macOS app for customizing which browser to start

Overview

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 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.

  • Decide what urls to open in what browser or app
  • Edit urls before opening them
  • Complete control over configuration using JavaScript

GitHub start GitHub release

Finicky screenshot

Table of Contents

Installation

  1. Installation alternatives:
  1. Create a file called .finicky.js with configuration (examples) in your home directory OR generate a basic configuration with Finicky Kickstart

  2. Start Finicky. Please allow it to be set as the default browser.

  3. And you're done. All links clicked that would have opened your browser are now first handled by Finicky.

Example configuration

// ~/.finicky.js

module.exports = {
  defaultBrowser: "Google Chrome",
  rewrite: [
    {
      // Redirect all urls to use https
      match: ({ url }) => url.protocol === "http",
      url: { protocol: "https" }
    }
  ],
  handlers: [
    {
      // Open apple.com and example.org urls in Safari
      match: ["apple.com/*", "example.org/*"],
      browser: "Safari"
    },
    {
      // Open any url that includes the string "workplace" in Firefox
      match: /workplace/,
      browser: "Firefox"
    },
    {
      // Open google.com and *.google.com urls in Google Chrome
      match: [
        "google.com/*", // match google.com urls
        "*.google.com/*", // match google.com subdomains
      ],
      browser: "Google Chrome"
    }
  ]
};

See the documentation for all the features Finicky supports.

Documentation

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 all available, APIs and options as well as detail information on how to match on urls.

Configuration tips

See the wiki page for other configuration tips by users of Finicky.

Alternatives

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!

Building Finicky from source

If you'd like to build Finicky from source, you can do so by installing Xcode, Xcode Command Line Tools, and yarn, and then running the following:

# build the source
make

# run the compiled app
make run

Support development

If you want to help support further development of finicky, feel free to buy me a coffee on ko-fi.

Buy Me a Coffee at ko-fi.com

Issues

Bugs

Please file an issue for bugs, missing documentation, or unexpected behavior.

See Bugs

Feature Requests

Please file an issue to suggest new features. Vote on feature requests by adding a 👍 .

See Feature Requests

Questions

Have any other questions or need help? Please feel free to reach out to me on Twitter.

License

MIT

Issues
  • Finicky appears in the dock and in

    Finicky appears in the dock and in "recent applications"

    Hi, this request is similar to https://github.com/johnste/finicky/issues/41.

    In my case though I'd like to leave the menu bar item displayed and instead rather have a config option to hide the dock item. Since the menu bar item is visible by default and allows access to the app, the dock item is redundant. Would it be possible to implement this? Thank you.

    bug help wanted 
    opened by andersennl 38
  • add support for browser profiles

    add support for browser profiles

    Allows selecting profile of target browser. Adds support for Google Chrome, Brave Browser and Mozzila Firefox.

    Apologies in advance for not following any Swift/Javascript conventions correctly. I don't don't have much experience in either.

    You can specify which browser profile target by defining the profile property on the browser object in the config file.

    Sample Config

    module.exports = {
        defaultBrowser: {
            name: "com.brave.Browser",
            appType: "bundleId",
            profile: "Personal",
            openInBackground: false,
        },
        handlers: [
            {
                match: ({ sourceProcessPath }) =>
                    sourceProcessPath && sourceProcessPath.startsWith("/Applications/Slack.app"),
                browser: {
                    name: "com.brave.Browser",
                    appType: "bundleId",
                    profile: "Work",
                    openInBackground: false,
                }
            },
        ]
    };
    
    opened by bhedavivek 30
  • Configuration parsing fails inconsistently

    Configuration parsing fails inconsistently

    I'm migrating my old config to the new format but am seeing a notification about an error parsing config. In order to try to isolate the problem, I copied the config from the "Advanced usage, settings" section of the README in order to start adding my old configuration bit by bit.

    As expected, when I copy over everything intact to .finicky.js I see that a notification that the file was loaded, but if I save again (with no changes to the stock config) it appears to fail maybe half the time. Closing and reopening Finicky does not change this behavior.

    This was seen on RC0 (in About: Version 2.0-RC0 (1)).

    In RC1 which appears to have been uploaded as I was writing out this issue, I get some slightly better output, though it is still failing around half of the time:

    2019-05-21 13:06:58 - Error parsing config: "TypeError: undefined is not an object (evaluating 'object[key]')"
    

    Again, this is with the stock config:

    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.chatlyio",
          browser: "Safari"
        },
        {
          match: ["http://zombo.com"],
          browser: {
            name: "Google Chrome Canary",
            // Force opening the link in the background
            openInBackground: true
          }
        }
      ]
    };
    
    bug 
    opened by stackptr 19
  • Focusing behavior when opening link from menu bar app

    Focusing behavior when opening link from menu bar app

    Thank you for creating a niche but super useful app! I have a problem with Finicky when opening links from menu bar apps such as Fork, Dropbox.

    expected behaviour

    1. Uses app like Xcode
    2. Open menu bar app and click on a link
    3. Open link in a web browser keeping its window frontmost.

    actual behaviour

    1. Uses app like Xcode
    2. Open menu bar app and click on a link
    3. Nothing happened (actually, Finicky opened the link in the web browser but instantly focused back to the previously used app (Xcode))

    Technically, can we distinguish whether the link was opened from the menu bar app or not? If so, we can fix this issue.

    1. if the link is opened from a menu bar app -> open the link in the web browser
    2. otherwise, open the link in the web browser and focus back to the previously used app

    Refs

    https://github.com/johnste/finicky/blob/6ac7b97f143579e41904ed486e30e0a17bd0faa7/Finicky/Finicky/AppDescriptor.swift#L37

    bug Next release 
    opened by uetchy 18
  • Specify browser by path

    Specify browser by path

    Implements #98

    I tested it with the following minimal config:

    module.exports = {
      defaultBrowser: "com.google.Chrome",
      handlers: [
        { match: /apple/  , browser: "com.apple.Safari"         },
        { match: /mozilla/, browser: "/Applications/Firefox.app"}
      ]
    };
    

    As expected:

    • https://apple.com opens in Safari
    • https://google.com opens in Google
    • https://mozilla.org opens in Firefox

    I implemented the bundleId and appPath as String?. This makes the code a bit ugly in a few places as the compiler can't guarantee that one of the two is non-nil. Is there a better way to do this in Swift? Some kind of Either type, perhaps?

    opened by ldub 17
  • Support for Google Chrome Profiles

    Support for Google Chrome Profiles

    I was wondering if it's possible to use this to launch Google Chrome using a specific chrome user profile? Example: https://superuser.com/a/377195/147810

    feature request 
    opened by hatzopoulos 16
  • #40 : Support for Google Chrome Profile

    #40 : Support for Google Chrome Profile

    This PR fixs #40. Now you can add your profile of Google Chrome Profile Just add you Chrome profile directory name like this:

    // without profile
    browser: 'Google Chrome'
    
    // with profile
    // On Mac OS X, the directories are located in ~/Library/Application Support/Google/Chrome
    browser: 'Google Chrome#Profile 1'
    
    // with Default profile
    browser: 'Google Chrome#Default'
    
    

    # is separator.

    It uses --profile-directory option.

    I just want to share something about this issue. With the --profile-directory option

    • open command with bundle id doesn't open that profile
    • Run Chrome using /Applications/Google Chrome.app/Contents/MacOS/Google Chrome opens that profile properly.

    I try to find the way to use profile directory name. But I couldn't.

    opened by yomybaby 13
  • Finicky may not have authorization to properly resolve short URLs

    Finicky may not have authorization to properly resolve short URLs

    Hello!

    We pass around short URLs in our development workflow. The right browser is opened, but it goes to the wrong URL, the site's homepage rather than our development service (GraphiQL specifically). This is because the resolved URL is redirected to an unauthenticated homepage.

    I would expect that the unresolved URL is passed to the browser, so that redirects that depend on authorization can succeed.

    Repro:

    1. Create a bit.ly or other short URL to an address that requires authorization of some sort. For some services, when not authorized, there will be a redirect to another URL, like a home page.
    2. Observe that Finicky opens the resolved, redirected URL in your browser of choice. This redirected URL may be the homepage rather than the contents

    Expected:

    1. Finicky uses the resolved URL to decide which browser to open and passes the short URL to the browser for the browser to resolve, because the browser may have authentication which changes the resolved URLs.
    bug 
    opened by johnjensenish 12
  • "Open in Active Browser" App (finicky lightweight)

    First, thank you for this app - it's almost what I have been looking for for a long time! As a web developer, I use many different browsers, and often times clicking a link, opens instead of the active browser the currently set default browser (sometimes started with 100s of tabs) which is super annoying. It's great that I can set to open links with the most recent active browser (and the JS API is also nice), yet the setup with config files is a bit of a hassle and I think it could be more simple & elegant.

    It would be great if you could make a lightweight version, where all it does is use the last active browser for links, and which is just a single simple app.

    opened by MentalGear 11
  • No standard browser under macOS Big Sur

    No standard browser under macOS Big Sur

    Hi everyone,

    after the update to macOS Big Sur, Finicky is no longer offered as an option for the standard browser (System Preferences > General)...

    ...is there a solution for this? :(

    Thanks in advance!

    Regards Martin

    bug help wanted 
    opened by MartinWe13 11
  • Bump tmpl from 1.0.4 to 1.0.5 in /config-api

    Bump tmpl from 1.0.4 to 1.0.5 in /config-api

    Bumps tmpl from 1.0.4 to 1.0.5.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Add custom Finicky app icon path to config

    Add custom Finicky app icon path to config

    Describe the solution you'd like

    • add an additional option to config, that can change app icon by icon path
    • in-app use something like NSApplication.SharedApplication.ApplicationIconImage = <image from path>

    Can resolve https://github.com/johnste/finicky/issues/186 for those who need.

    feature request 
    opened by wcoder 0
  • # Character getting in correctly encoded in URL

    # Character getting in correctly encoded in URL

    When I click on a link that redirects to a link that contains a "#" character, e.g. https://t.co/z8dkkfKVBu?amp=1 -> https://independentaustralia.net/politics/politics-display/the-us-state-department-sought-to-control-australian-workers,15395#.YRSBll8l2cM.twitter Finicky replaces the # character with a %023 which causes the URL to return a 404 on the website: https://independentaustralia.net/politics/politics-display/the-us-state-department-sought-to-control-australian-workers,15395%23.YRSBll8l2cM.twitter

    I have a rewrite clause in my config, but it shouldn't be applying in this case, and hopefully wouldn't be encoding characters in URLs either:

    rewrite: [
    	{
    		match: ({ url }) => url.host.endsWith("twitter.com"),
    		url: ({ url, urlString }) => {
    			return {
    				...url,
    				host: "",
    				protocol: "tweetbot",
    				pathname: url.pathname.replace(/^\/+/g, '')
    			}
    		}
    	}
    ],
    

    If I change my browser to be Firefox instead of Finicky, I do not have the issue.

    bug 
    opened by jtrott 0
  • Slack help!

    Slack help!

    Have you tried creating configuration for this application? I've gotten all my "somecompany.salack.com" links to open in desktop Slack, but I can't get parameters to pass through.. how can I achieve this?

    What application are you trying to set up Any Slack link clicked opens to the conversation/thread/channel etc instead of only opening Slack

    help with app 
    opened by mmowris 0
  • Bump path-parse from 1.0.6 to 1.0.7 in /config-api

    Bump path-parse from 1.0.6 to 1.0.7 in /config-api

    Bumps path-parse from 1.0.6 to 1.0.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Finicky does not match RegEx in handlers

    Finicky does not match RegEx in handlers

    I'm no MacOS Mojave (10.14.6). I've been using Finicky for a couple weeks only to redirect all traffic to a default browser, however today I tried making a handler to redirect only one domain to another browser, and discovered the rule has no effect, apparently.

    I generated my config file from the Finicky Kickstarter applet. Here is what I've got:

    // ~/.finicky.js
    
    module.exports = {
      defaultBrowser: "Firefox",
      rewrite: [
        {
          // Redirect all urls to use https
          match: ({ url }) => url.protocol === "http",
          url: { protocol: "https" }
        }
      ],
    handlers: [
        {
          match: /^https?:\/\/.*postman\.co\/.*$/,
          browser: "Postman GUI.app"
        },
        {
          match: /^https:\/\/.*$/,
          browser: "Firefox"
        }
      ]
    };
    

    Is there something wrong with any part of my config file?

    EDIT: My apologies. It looks like Finicky is behaving (mostly?) correctly, and Postman is the problem.

    Basically, I am learning web development and just got set up with Postman today. I downloaded the "desktop" app, but it is now just an agent that connects your computer's filesystem to their web app. I wanted to run the web app in its own copy of Firefox, so I set it up, and set up Finicky to redirect any Postman URLs to the Postman Firefox app I made. That is actually working correctly.

    However, for some reason, if I click the button in the status bar for the Postman agent, and then click "Open Postman", the Postman agent app opens https://www.postman.co/ in my regular copy of Firefox, which is really weird because normally, without Finicky, due to the way my browsers are set up, links will open in a different one of my browsers, so I don't know how the Postman agent status bar app is managing to open its URL in my regular copy of Firefox.

    So, I don't know if that's the fault of the Postman agent app using some non-standard method to launch a URL or if Finicky just isn't written to handle such instances of a URL launch, but just wanted to update this post when I realized Finicky is at least partially working for me.

    bug 
    opened by SwineBurglar 3
  • finicky does not work on Mojave 10.14.6

    finicky does not work on Mojave 10.14.6

    Hello and thanks for finicky,

    is this configuration correct? When I click on a google or youtube link in Safari, the url is opened in Safari and not Chrome.

    module.exports = {
      defaultBrowser: "Safari",
      handlers: [
        {
          match: [
            ".*youtube.com.*",
            ".*youtu.be.*",
    	".*google.com.*",
          ],
          browser: "Google Chrome"
        }
      ]
    }
    
    
    opened by paoloboschini 2
  • Support for ssh links

    Support for ssh links

    I use a password manager (1Password) and would like to open the ssh links stored there (ssh://[email protected]) in iTerm. It would be great if Finicky would support such ssh links.

    feature request 
    opened by ElMorito 0
  • feature request: capture file://* links and perform action (regex, ..)

    feature request: capture file://* links and perform action (regex, ..)

    Is your feature request related to a problem? Please describe. I need to parse links in the form file://* (and parse them through a regex-replace script to open in a browser), as my mac is not able to open these links natively.

    Describe the solution you'd like I would like to be able to parse file://* links (and subsequently perform a regex script that rearranges parts of the url to open in a browser).

    Describe alternatives you've considered Applescript, Automator, ... but got referred to this wonderful app through https://apple.stackexchange.com/a/391486

    Additional context As a newbie, I tried out some scripts to see if the app could be able to parse these links. Observation at the moment: Finicky seems currently unable to parse these links (the console mentions Finicky only understands https:// and http:// urls.

    Any ideas if this would be possible, and how to implement it? Thanks in advance for the feedback and your thoughts!

    test script:

    module.exports = {
      defaultBrowser: "Safari",      
      handlers: [
        {
          match: /^file?:\/\/.*$/,
          browser: "Safari"
        }
      ]
    }
    
    feature request 
    opened by floriandierickx 0
  • Bump ws from 7.4.2 to 7.5.0 in /config-api

    Bump ws from 7.4.2 to 7.5.0 in /config-api

    Bumps ws from 7.4.2 to 7.5.0.

    Release notes

    Sourced from ws's releases.

    7.5.0

    Features

    • Some errors now have a code property describing the specific type of error that has occurred (#1901).

    Bug fixes

    • A close frame is now sent to the remote peer if an error (such as a data framing error) occurs (8806aa9a).
    • The close code is now always 1006 if no close frame is received, even if the connection is closed due to an error (8806aa9a).

    7.4.6

    Bug fixes

    • Fixed a ReDoS vulnerability (00c425ec).

    A specially crafted value of the Sec-Websocket-Protocol header could be used to significantly slow down a ws server.

    for (const length of [1000, 2000, 4000, 8000, 16000, 32000]) {
      const value = 'b' + ' '.repeat(length) + 'x';
      const start = process.hrtime.bigint();
    

    value.trim().split(/ *, */);

    const end = process.hrtime.bigint();

    console.log('length = %d, time = %f ns', length, end - start); }

    The vulnerability was responsibly disclosed along with a fix in private by Robert McLaughlin from University of California, Santa Barbara.

    In vulnerable versions of ws, the issue can be mitigated by reducing the maximum allowed length of the request headers using the --max-http-header-size=size and/or the maxHeaderSize options.

    7.4.5

    Bug fixes

    • UTF-8 validation is now done even if utf-8-validate is not installed (23ba6b29).
    • Fixed an edge case where websocket.close() and websocket.terminate() did not close the connection (67e25ff5).

    7.4.4

    ... (truncated)

    Commits
    • e3f0c17 [dist] 7.5.0
    • 1d3f4cb [doc] Fix anchor tags for error codes
    • 6eea0d4 [doc] Fix typo
    • bb5d44b [doc] Sort error codes alphabetically
    • c6e3080 [minor] Attach error codes to all receiver errors (#1901)
    • 074e6a8 [fix] Don't call ws.terminate() unconditionally in duplex._destroy()
    • 8806aa9 [fix] Close the connection cleanly when an error occurs
    • 05b8ccd [doc] Fix broken link (#1897)
    • 03a7078 [doc] Remove unsafe regex from code snippet
    • 7ee3115 [doc] Add logo to coverage badge
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v3.4.0)
  • v3.4.0(Mar 8, 2021)

    image

    New feature

    This latest release contains new abilities to manage the configuration file. Big thanks to @leonspok for helping out (pull request https://github.com/johnste/finicky/pull/142)

    Bug fixes

    • #171 Fixed a bug where Finicky crashed when it couldn't get the name or bundle identifier from the opening application
    • #126 Attempt at fixing an issue where Finicky couldn't tell if the browser was intended to be opened in the background or foreground
    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.54 MB)
  • v3.3.1(Feb 1, 2021)

  • v3.3.0(Jan 30, 2021)

    Some new APIs!

    New features

    • #138 finicky.getSystemInfo now available in config. This returns a map of information about the current system. See getSystemInfo documentation

    Example:

    finicky.getSystemInfo() // returns {"localizedName":"John’s Mac mini","name":"Johns-Mac-mini.local"} for me
    
    • Adding opener option to all config callback functions, replacing sourceProcessPath and sourceBundleIdentifier, see Parameter documentation for more info.

    Example:

      "opener": {
        "pid": 1337,
        "path": "/Users/user/Applications/Example.app",
        "bundleId": "com.example.app",
        "name": "Example app"
      }
    
    • Added a new option logRequests that will log all incoming urls to the console to simplify debugging. Docs

    • Finicky.log now accepts multiple arguments

    Bug fixes

    • #126 Added an attempted bugfix for a browser activation issue
    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.53 MB)
  • v3.2.0(Jan 28, 2021)

    This update contains some cool new things. Big thanks to @skoshy for helping out a lot!

    New features

    • Profile support added for Brave Beta, Edge, Edge Beta and Vivaldi Browsers

    • #160 Ability to send custom arguments to browsers/apps (Docs TBD).

    • finicky.getKeys now available in config. This will eventually replace the keys key (https://github.com/johnste/finicky/wiki/Function-parameters) to make the parameters slightly less crowded.

    • #129 Url shorteners urlShorteners can now be a function so you can append/remove from the list as you please. Example:

    module.exports = {
      defaultBrowser: "Safari",
      options: {
      	urlShorteners: (list) => [...list, "zombo.com"]
      }
    };
    

    Bug fixes

    • #84 Incorrectly formatted urls would create issues with redirects. Finicky will now escape urls before parsing them to avoid this issue.
    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.56 MB)
  • v3.1.3(Nov 21, 2020)

    This is a another small release to fix some compatibility issues with macOS Big Sur. It is also built for Apple Silicon though no attempts at testing it on that platform are available to me.

    Features:

    • #133 - Open config menu item from menu Thank you @leonspok!

    image

    Bug fixes:

    • #146 - Finicky didn't appear as a default browser choice in macOS general preferences
    • #140 - When using VS Code sometimes the configuration file appeared to be empty when reloaded

    Thank you to @MartinWe13, @alejandroivan, @xiaobq, @jeff-dagenais and @dndrsn for submitting issues and helping with troubleshooting!

    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.55 MB)
  • v3.1.1(Sep 4, 2020)

    This is a small release which is intended to fix an annoying bug where Finicky shows up in the dock and "recent applications". Published as a pre-release until I get confirmation it fixes the issue.

    No new features. Contains some refactoring.

    Bug fixes:

    • #78 Finicky appears in the dock and in "recent applications" Thanks to @notDavid and @alejandroivan for helping with testing.
    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.27 MB)
  • v3.1.0(Aug 21, 2020)

    Finicky now has support for launching specific Chrome and Brave profiles. Huge thanks to @bhedavivek for working on this!

    New features

    • Chrome and Brave profile selection

    You can now optionally specify a profile to activate when using Chrome or Brave browsers.

     {      
       match: "example.com/*",
       browser: { 
         name: "Google Chrome",
         profile: "Default", 
       },
     },
    {      
       match: "example.org/*",
       browser: { 
         name: "Google Chrome",
         profile: "Profile 1", 
       },
     },
    

    A note on profile names

    The profile name you supply to Finicky must match the folder name of the profile. For Chrome, the folders are located at ~/Library/Application Support/Google/Chrome. Folder names are called "Profile 1", "Profile 2", etc.

    ⚠️ Please note ⚠️ If you supply a folder name of a profile that does not exist, e.g. "Avocado", Chrome and Brave will create a new profile using that folder name. This appears to work pretty well, but I would advise against this since there is a risk corrupt your Chrome configuration. In the future, I want to add some verification to avoid this possibility, so it might stop working.

    Bug fixes:

    • #122 The console doesn't display "fancy quotes" now. Thanks to @pichfl
    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.27 MB)
  • v3.0.0(Jun 10, 2020)

    Finicky v3.0.0 is here, and it's easier to use than ever. ⚡

    This release tries to make a lot of common use cases simpler in Finicky, by adding useful shortcut features like wildcards, partial url objects and direct url rewriting in handlers.

    New features

    • Wildcard matching

      Instead of using a regular expression to match incoming urls you can now use wildcards which match zero or more characters:

      // Before (this still works!)
      match: /https?:\/\/example\.com.*/,
      // After (this matches both http and https urls, no need to specify procotol)
      match: "example.com*",
      
    • Simpler url rewrites

      Before you had to return the full url object (usually by using object spread) when you wanted to change a url. Now, you can just return the properties you want to change:

      // Before (this still works!)
      url: ({url}) => ({ ...url, protocol: "https" })
      // After
      url: { protocol: "https" }
      
    • Support for url rewriting directly in handlers You can now add a url rewrite to your handlers directly instead of having a rewrite and a browser handler.

       // Before (this still works!)
       rewrite: [{ 
         match: "http://google.com*", 
         url: "http://ecosia.com" 
       }],
       handler: [{ 
         match: "http://ecosia.com", 
         browser: "Safari" 
       }]
       // After
       handler: [{ 
         match: "http://google.com*", 
         url: "http://ecosia.com", 
         browser: "Safari" 
       }]
    

    Other improvements

    • Application is now notarized by Apple. You should see fewer warnings when running it for the first time. #68
    • Refactor update checking, let me know if you get annoyed by unnecessary notifications!
    • Fix a bug where browsers didn't open in the background properly #111
    • New logo #115

    Watch out for breaking changes! ⚠️

    This release contains a few updates that might break your setup! With the addition of wildcard matching for strings if you are using direct string matching on urls containing asterisks * Finicky will now match more strings since it now treats the asterisk as a wildcard.

    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.27 MB)
  • v2.4.0(May 5, 2020)

    New features:

    • You can now start browsers by file path: e.g. /Applications/Slack.app. Useful when you have multiple apps share the same name or bundle id. Big thanks to @ldub for adding this feature!
    • Finicky now checks for new versions on startup. You can disable this by adding the options.checkForUpdate: false in your config.
    • The console window now displays log messages with the latest message at the bottom of the window.
    • There is a now 'clean console' button in the console window

    Note:

    • The feature to open up incognito windows in Chrome from the 2.3 alpha did not make it into this release.
    • Finicky now listens to finicky:// and finickys:// urls, which enables using finicky directly from other apps. This could enable browser extensions to use finicky directly.
    • Thanks to @erkekin for some refactoring and updating tests
    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.18 MB)
  • v2.2.3(Nov 18, 2019)

  • v2.3-alpha(Oct 29, 2019)

    This is an early version of incognito support for Google Chrome. Only use if you want to test this early version of the feature.

    Adds the private property to the Browser option in handlers:

    module.exports = {
      defaultBrowser: "Google Chrome",
      handlers: [
        {
          match: "http://example.com",
          browser: {
            name: "Google Chrome",
            private: true
          }
        }
      ]
    };
    

    When using this feature you need to give Finicky access to controlling Chrome: image

    Note that due to a bug it is currently not possible to open Chrome in the background (Due to this bug #71), and the incognito mode feature doesn't support it at all.

    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.18 MB)
  • v2.2.2(Oct 23, 2019)

    Now url handlers receive sourceProcessPath, a string of the path to the process that triggered Finicky. Should help with issues like #80. It's pretty new so let me know if it works for you!

    {
      // Open links where the path contains "Franz.app" in Safari (Experimental!)
      match({ sourceProcessPath }) {
        return sourceProcessPath.includes("Franz.app");
      },
      browser: "Safari"
    }
    

    Release also contains an attempted bugfix where the Finicky icon was visible in the dock in Catalina #78 (Let me know if you try it!)

    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.17 MB)
  • v2.2.1(Aug 21, 2019)

    You can now:

    • Supply an array of preferred browsers to open the first active one. Works for both the default browser and in handlers. #53
    • Avoid opening any browser by supplying null as browser name.

    Other changes:

    • Added an alias matchHostnames for matchDomains function since the name is a bit misleading #73
    • Fixed a bug where finicky didn't open file urls correctly.
    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.27 MB)
  • v2.2.0(Aug 19, 2019)

    You can now:

    • Supply an array of preferred browsers to open the first active one. Works for both the default browser and in handlers.
    • Avoid opening any browser by supplying null as browser name.

    But get v2.2.1 instead, it's better!

    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.27 MB)
  • v2.1.0(Jun 15, 2019)

  • v2.0(Jun 11, 2019)

  • v2.0-rc.3(Jun 3, 2019)

  • v2.0-rc.2(May 25, 2019)

  • v2.0-rc.1(May 21, 2019)

    Fixes these bugs:

    #51 Finicky crashes when testing short urls matching short url providers. #52 Time logged in console was using 12 hr clock without/prefix. It now uses 24 hr.

    This update also requires short urls to use https since accessing http urls is a security risk.

    If you are having issues with this version, the 0.5 version is more stable.

    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.26 MB)
  • v2.0-rc.0(May 19, 2019)

    This is the first release candidate of Finicky 2. I've taken great care and have spent a lot of time trying to find issues and bugs, but it's certainly possible there are potential issues in this release. If you find any bugs, missing documentation or unexpected behaviour, please file an issue

    Download here

    Updates:

    Note for users of Finicky 0.5

    A few features from Finicky 0.5 have not been implemented in this release:

    • Opening a url in based on a list of already started browsers.
    • Modifier keys (shift, cmd, etc) are not supplied to the match functions.

    If you miss these and think they should be available in Finicky 2, please file a feature request!

    Screenshot of the console

    Source code(tar.gz)
    Source code(zip)
    Finicky.zip(3.24 MB)
  • v0.5(Aug 25, 2015)

  • v0.4(Aug 9, 2015)

  • v0.3(Jul 31, 2015)

  • v0.2(Jun 30, 2015)

Owner
John Sterling
🤷🏼‍♂️
John Sterling
The desktop vault (Windows, macOS, Linux).

Bitwarden Desktop Application The Bitwarden desktop app is written using Electron and Angular. The application installs on Windows, macOS, and Linux d

Bitwarden 3k Sep 18, 2021
Bitwarden in the macOS menu bar

Bitwarden Menu This project is not associated with the Bitwarden project nor 8bit Solutions LLC. Bitwarden Menu is a simple application for macOS that

Jonas Drotleff 32 Sep 20, 2021
MJML: the only framework that makes responsive-email easy

MJML 4 If you're looking for MJML 3.3.X check this branch | Translated documentation | Introduction | Installation | Usage | Contribute | Translated d

MJML 12.5k Sep 14, 2021
To-do list time tracker for programmers and other digital workers with Jira, Github, and Gitlab integration

Please help us improve the app's usability! Organize your daily tasks in one place while making time tracking a lot less annoying. Super Productivity

Johannes Millan 4.1k Sep 18, 2021
Menu Bar RSS reader for macOS

baRSS – Menu Bar RSS Reader What is it? A RSS & Atom feed reader that lives in the system status bar. Very much inspired by RSS Menu; go ahead and che

Helena Schobs 34 Sep 16, 2021
🔎 macOS productivity tool to launch everything

Spotter Productivity tool to launch everything (e.g. switch the next song, connect bluetooth device, set a timer, etc.) so you can stay focused on you

Denis Z. 519 Sep 23, 2021
KeePassXC is a cross-platform community-driven port of the Windows application “Keepass Password Safe”.

KeePassXC KeePassXC is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePass

KeePassXC 11.1k Sep 23, 2021
A modern, open source password manager for individuals and teams.

Padloc Simple, secure password and data management for individuals and teams (formerly known as Padlock). This repo is split into multiple packages: P

Padloc 1.1k Sep 13, 2021
Free cross-platform password manager compatible with KeePass

Free cross-platform password manager compatible with KeePass This webapp is a browser and desktop password manager compatible with KeePass databases.

KeeWeb 10.3k Sep 14, 2021
Mac Media Keys for the Masses

Common Issues It's asked that anyone with an issue check the Wiki Section before posting a new issue. Users Guide What? BeardedSpice allows you to con

null 2.7k Sep 19, 2021
The missing Desktop application for Pushbullet.

PB for Desktop PB for Desktop is a lightweight open-source Desktop app for PushBullet. Receive native push notifications on macOS, Windows and Linux.

sidneys.github.io 466 Sep 11, 2021
:cat2: webrtc screensharing electron app for mac os (Alpha)

ScreenCat ScreenCat is an open source screen sharing + remote collaboration application. You can share your desktop with someone else while letting th

Max Ogden 3k Sep 16, 2021
A floating browser window for OS X

Helium Helium is a floating browser window that allows you to watch media, browse the web and do much more while you stay productive. Your content wil

Jaden Geller 3.6k Sep 21, 2021
ˈyːbɐˌzɪçt

Übersicht Keep an eye on what's happening on your machine and in the world. For general info check out the Übersicht website. Writing Widgets In essen

Felix 3.4k Sep 15, 2021
Your next meeting always before your eyes in the macOS menu bar

MeetingBar is a menu bar app for your calendar meetings (macOS 10.15+). Integrated with 20+ meeting services so you can quickly join meetings from eve

Andrii Leitsius 2.4k Sep 22, 2021
Web Debugging Proxy Application

This project is in maintenance mode Maintainers or forks welcome: the original James team aren't able to spend the same amount of time on James anymor

null 1.3k Sep 12, 2021
🔓✨🔒 An innovative, convenient and secure encryption app

Crypter An innovative, convenient and secure crypto app. Encrypt unlimited bits. Remember only a bit. Crypter is a cross-platform crypto app that make

Habib Rehman 401 Sep 6, 2021
🌎 18th century Arts for everyone

Artify A macOS X application for bringing dedicatedly 18th century Arts to everyone ?? . Wallpaper • Features • Downloads • Technologies • 3rd Librari

Nghia Tran 147 Sep 12, 2021
Put the output from any script or program into your macOS Menu Bar (the BitBar reboot)

Welcome to xbar xbar (the BitBar reboot) lets you put the output from any script/program in your macOS menu bar. Complete rewrite from the ground up -

Mat Ryer 15.4k Sep 23, 2021