Browser Tamer – Windows Multi-Browser Link Redirector & Profile Switcher

Looking for a way to automatically open links in the right browser or browser profile on Windows? Do you juggle Chrome, Firefox, Edge, Brave, Arc, private/incognito windows, work vs personal profiles, or Firefox Containers?

Browser Tamer is a super‑lightweight, open-source browser proxy / link router for Windows that intercepts clicked links and instantly redirects them to the correct browser, profile, container, mode, or even a totally different app—based on flexible rules you control.

Configure redirection using URL domain, path, protocol, file extension, source window title/process, regular expressions, or even custom Lua scripting. Perfect for separating work/personal, isolating social media, forcing banking into hardened profiles, or sending meeting links straight to a minimalist frameless window.

TL;DR: Stop copy‑pasting links or manually switching default browsers. Let rules decide.

Automatically route links to the correct browser, profile, or container on Windows using Browser Tamer

Why Use Browser Tamer?

  1. Eliminate friction in multi-browser workflows.
  2. Strengthen privacy & security by isolating categories of sites.
  3. Keep work distractions quarantined (e.g. send social media to a muted profile).
  4. Debug web apps with targeted dev profiles.
  5. Preserve focus—links just open where they belong.

Features at a Glance

Installing

If you want to always be up-to-date, the best way to install BT is heading to the GitHub Releases section and downloading the latest version. If you want a painless option, use winget, available since version 5.0.5:

winget install aloneguid.bt

For manual installation, look for a file with .zip extension, like bt-version.zip (i.e. bt-3.5.2.zip).

Unpack .zip to any folder you like, and you are ready to run it.

Pro Tip: When installing manually, you can optionally enable portable mode.

MSI installer is available for compatibility purposes, however you should prefer using WinGet or manual installation instead.

Portable Mode

BT fully supports “portable mode”. However, you have to manually enable it as it is uncommon. Portable mode assumes that application will be run from a portable medium, such as USB stick, mapped drive, or anything removeable. In this mode, all the application files and configuration will be stored in the same place, so they can be moved between computers without loss of configuration.

Before you start, make sure that:

BT will check if .portable file exists in the same folder as bt.exe is located. And if it does, config.ini and “Rule Hit Log” (when turned on) will be placed alongside bt.exe.

You can create .portable file either manually in any editor, or using the following PowerShell snippet:

New-Item .portable -Type File

When editing config.ini manually (which is not recommended), you can use relative paths in the icon property for both browser icon and/or profile icon like so:

[browser:...]
icon = ./logos/my_browser.png

This will cause BT to look for logos/my_browser.png in the same folder as bt.exe is located. This is useful if you want to keep all your icons in the same folder as the application.

Initial configuration

Once launched first time, BT will display a message that you have no browsers configured. This is expected, as you need to set up at least one browser to start using the tool.

big

Press “discover system browsers” to populate the list of browsers installed on your system. This will also set the first browser found as the default one.

Once done, you should see health dashboard flashing up.

On every subsequent launch, BT will perform a quick self-check and warn you which actions need to be performed by you for links to be properly proxied by it.

Health status is also available in the bottom status bar (green and red heart).

1. Register as proxy browser

This is required in order for Windows to think that BT is just another browser. It affects the OS dialogs allowing you to pick Browser Tamer from the list of various browsing options.

2. Set as HTTP(S) protocol handler

Required in order for Windows to offer protocol handling (http and https links) by BT. This also checks that Browser Tamer was indeed set as the default handler.

For security reasons, BT does not automatically fix this issue, but rather opens a Windows dialog with default handlers, where you need to do it yourself.

The instructions are:

  1. Press the Fix button, which will open the Windows Defaults window.
  2. Search for “HTTP” which should display the current default handler, like Microsoft Edge or Google Chrome.
  3. Click on it, and select “BT”.
  4. Go back to BT, press “recheck”. If you have done it correctly, the check will pass.

Configuration

Default browser

By default, BT takes the first browser it finds and opens all the links in it.

You can change the default browser by clicking the “heart” button on the tab of the profile you want to set as default. This will also be reflected in the browser list.

Additionally, status bar will show the default browser:

Custom arguments

Both user-defined and system (auto-detected) browsers have an additional argument added. This is “extra arg”. BT does not allow modifying arg to avoid breaking basic functionality.

Most browsers will not apply settings like chromium flags until you restart the browser completely.

Bring your own browser

You can add your own browser definition by clicking the Add button above the browser list.

BT will ask you for the path to the browser executable, and then go to the customization screen.

You can change display name, arguments, icon and whether to hide the UI when launching this “browser”. The last option is useful if you want to add a custom script or application that does not have a UI, like in the example above, which simply launches powershell to execute a command to copy URL to clipboard. Without “hide user interface”, a console window would be shown briefly.

Auditing

BT can now optionally log rule hits to a .csv file. It can be enabled by checking the General -> Log clicks to hit_log.csv.

And the file path can be found in “File” menu.

The file itself has all the information about the rule hit event:

Rules

All the links that do not match any configured rules will open in the default browser, however, that’s not very interesting and not why you installed this utility in the first place.

To open a link in another browser, you need to create a rule.

A rule is just a text. It simply says that if a link (or application title, or process name) contains the text you’ve typed in, then open the specified browser. It is case-insensitive so a line mydomain will match mydomain.com, MyDomain.com or https://blabla.mydomain.com just the same.

To add a rule, simply press add button in browser parameters, and then type the rule text.

You can keep adding as many rules as you want, they are always case-insensitive and by default match any part or the URL.

You can test rules as you type with the Pipeline debugger utility.

Scoping

You can also match a part of the URL with scoping restriction, which allows you to be more specific about where in the URL the rule should apply. There are three matching scopes you can select from.

Regular expressions

Regular expressions are for advanced use case only and deserve a long topic by themselves. If you have never heard of Regular Expressions, I’d strongly discourage you from using them here.

To turn on regular expression, switch on the appropriate button next to the rule text:

Internally BT uses std::regex to validate URL against expressions.

When typing in an expression, it has to match an entire input and not just a substring inside it. Here is an example.

InputExpressionMatch?
https://github.comhub
https://github.com.*hub.*
https://github.comhttp?://github\.com/.*

By default, a regular expression has to match an entire URL, however, scoping applies during matching stage as well.

Matching locations

By default, rules are matched based on input URL. However, since v3.6.0 you can also optionally match on application title and process name. Pipeline debugger and auditing support these options as well.

When selecting title or process, you can, just like URL matching, use regular expressions or plain substring. Note that scoping is only applicable to URL matching.

“Lua script” is a special case and is covered in the Scripting section.

Match by process (application) name

To open a link when it’s invoked by a specific application, you need to create a rule with “Process” matching location:

In this field, you need to type name of the process you want to watch. Let’s say, for example, I want to open all the links from Thunderbird in a specific browser.

Considering that Thunderbird is running, I can find out the process name by opening Task Manager (Ctrl+Shift+Esc) and looking for the application in the list. Then, expand the process and choose “Go to details” to see the process name:

In this case, the process name is thunderbird.exe. So, I can create a rule with this process name:

Close BT settings, or press “File” -> “Save” to apply the changes.

Frameless windows

Part of rule definition is attempt to open an URL as “frameless window”. Frameless windows have no browser toolbar, url, or any other controls and try to behave like dumb apps. If your browser supports frameless windows (currently Chromium-based only) you will have a button to test this behavior (1) and also rule definitions will have a button to enable frameless window triggers (2).

You can also open a link in a frameless window with Picker.

Reordering

Rules can be reordered using Up and Down keyboard arrow keys. Focus on rule text and press the keys to move the field up or down the list.

When inside rule text, you can press Tab to move to the next rule’s text, or Shift+Tab to move the the previous rule’s text.

URL Processing

URL Processing was introduced in v3.7.0 as a way to customize URL processing even further and streamline the process of URL un-shortening and unwrapping that already existed.

The functionality is available from the Pipeline menu.

To understand how URL processing works, let’s see how BT processes URLs:

stateDiagram-v2
    direction LR
    RP: Rule processor
    B: Open browser
    state Pipeline {
        O365 --> Unshorten
        Unshorten --> Substitute
        Substitute --> Scripts
    }
    [*] --> Pipeline
    Pipeline --> RP
    RP --> B
    B --> [*]

Every time you click on a link, it first goes via a “Pipeline” that makes optional transformations on it. This includes unwrapping Office 365 links, un-shortening URLs, and applying substitutions, all described below. Since v4.1.0 you can also run custom scripts on the URL.

Rule processor then applies rules to the URL and opens the browser based on the rule.

Un-shortening

Internet access is required for this feature to work. If internet is not available, shortened URLs will be opened as is.

Since v3.5.0 URL un-shortening is enabled by default due to the fact shortened URLs mask target link and make it impossible to apply a rule to it.

For instance pressing https://bit.ly/47EZHSl will actually open https://github.com/aloneguid/bt, allowing potential attackers to evade configured rules.

BT supports the most popular URL shorteners, the list of which you can find here. If it’s not in the list, fire up an issue or a PR.

Office 365 links are unwrapped for rule matching, but for security reasons wrapped URL is open. For instance,

https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.google.com

will apply rules to http://www.google.com but still open the original URL.

Link unwrapping is applied to any URL whose domain name ends with .safelinks.protection.outlook.com or equals to statics.teams.cdn.office.net (MS Teams links).

Substitutions

Substitutions works as you would expect - finds a substring in the incoming URL and replaces it with another substring.

For instance, if you want to replace google.com with bing.com, you would do the following:

  1. Open “Substitutions” window.
  2. Add a new substitution by clicking Add button.
  3. Enter google.com in the Find field.
  4. Enter bing.com in the Replace field.

For more advanced scenarios, you can use regular expressions.

To test substitutions, use the “Test” section on the top. It will show you the result of the substitution as you type in real time.

Scripts

Since v4.1.0 BT can run custom scripts on the URL. This is a powerful feature that allows you to manipulate the URL in any way you want. For instance, you can add a query parameter, remove a query parameter, or even change the domain name. The possibilities are endless. Learn more in the Scripting section below.

Pipeline debugger

Pipeline debugger is introduced in v4.1.0 and provides a way to get an overall picture of how BT processes URLs and what rules are applied to them as a single unified picture.

The debugger is available from the Tools menu.

Top part of the debugger allows you to enter a URL, and optionally window title and process name. This is useful for debugging rules that are based on these parameters.

The bottom part shows several sections:

Picker

Picker is a visual prompt that asks which browser you want to open a link in specifically, instead of matching a rule.

It can be invoked either manually or automatically, or both. To set this behavior, invoke the “Picker” menu from the main window:

Manual invocation

For manual invocation, one of the following key combinations can be used, if configured.

Automatic invocation

For automatic invocation, picker will be displayed in the following situations:

You can also invoke picker from the command line.

Making a choice

The picker interface is dead simple - it’s a menu with a list of browsers and profiles you have configured in BT, excluding the ones you have hidden explicitly.

You can make a selection by clicking on the profile you want the current link to be opened in.

Before making the choice, you can also change the URL that will be opened by the browser. This is useful if you want to open a different URL than the one you clicked on, or if you want to modify the URL in some way. To change the URL, simply modify it in the input field above the radial menu. URL display can be turned off in main window’s options.

There are also a couple of “micro apps” always available, which are displayed as smaller icons:

Currently the options are:

Keyboard navigation

You can navigate the wheel using the keyboard. The following keys are supported:

Other options

The top of the Picker menu has more customisation options that are worth mentioning:

Close on focus loss
If enabled, the picker dialog will close when it loses focus. This is useful if you want to quickly switch to another window without having to close the picker dialog manually. This essentially cancels picker dialog if you switch to another window.
Always on top
If enabled, the picker dialog will always be on top of other windows, regardless which application is active. This is useful if some of your applications prevent Picker from being on top.

More visual customisation options are available when picker is shown by pressing the gear icon in the top row. Most of these options are self-explanatory and interactively apply when changed:

Toast

Toast was added in 5.1.1 to visually notify which browser and profile was used to open a link. This makes you aware that BT is working, and which browser/profile was chosen, especially when using automatic rules.

Toasting is enabled by default, but can be disabled in the main window’s options. You can also configure several options related to toast.

Scripting

For total flexibility, BT supports user scripting. Scripting allows you to customize two things:

  1. URL processing - write your own custom scripts to process URLs before they are opened in the browser.
  2. Rule matching - write your own custom rules to match URLs.

Scripts are written in Lua, a lightweight, high-level, multi-paradigm programming language designed primarily for embedded use in applications. Lua is very fast, very low overhead language, and is very easy to learn. The sections below explain how to write scripts for BT.

Watch a YouTube overview showing a demo on how Lua scripting is integrated:

To write and test scripts, you should first open the Script editor from the Tools menu:

URL processing

Let’s write a simple pipeline step that checks that if the URL starts with https://meet.google.com/ it will append authuser=1 to the query string. This is useful if you have multiple Google accounts and want to force a specific account to be used. Here is the Lua code for this functionality:

function ppl_gmeet()
    if string.find(p.url, "https://meet.google.com/") == 1 then
        return p.url .. "?authuser=1"
    end
    return p.url
end

The function ppl_gmeet is called by BT for every URL that is about to be opened, after all the other built-in steps like unshortening, unwrapping, and substitutions.

This is how the function works:

  1. It checks if the URL starts with https://meet.google.com/ by using string.find function against p.url variable.
  2. If it does, it appends authuser=1 to the query string.
  3. It returns the modified URL.
  4. If the URL does not start with https://meet.google.com/, it returns the URL as is.

To use this script in BT:

  1. Paste the script into the “Lua script” editor.
  2. Press “Save” to save the script.
  3. Select the function name to run from the dropdown list. At this point you should have only one function, ppl_gmeet.
  4. Type a URL to test, for instance https://meet.google.com/mtg/.
  5. Press “Run”.
  6. The result will be displayed in the “Terminal” section.

The value of p

The p variable is always available from any function, and contains the following fields:

The variable p is read-only, and any modifications are ignored.

Rule matching

Let’s write a simple rule that matches any URL that starts with https://meet.google.com/ and is opened from Slack desktop application.

We already know how to check the first part, but for the second the solutions also simple - if the process name is slack.exe. Process name can be retreived from the p.pn variable. Here is the Lua code for this functionality:

function rule_gmeet_from_slack()
  if string.find(p.url, "https://meet.google.com/") == 1 and string.lower(p.pn) == "slack.exe" then
    return true
  end
  return false
end

This is how the function works:

  1. It checks if the URL starts with https://meet.google.com/ by using string.find function against p.url variable.
  2. It checks if the process name is slack.exe by using string.lower function against p.pn variable.
  3. If both conditions are met, it returns true.
  4. If any of the conditions are not met, it returns false.

To use this script in BT:

  1. Paste the script into the “Lua script” editor.
  2. Press “Save” to save the script.
  3. Select the function name to run from the dropdown list. At this point you should have two functions, ppl_gmeet and rule_gmeet_from_slack.
  4. Type a URL to test, for instance https://meet.google.com/mtg/.
  5. Type process name to test, for instance slack.exe. You will notice that switching to a function prefixed with rule_ will add extra fields for test input.
  6. Press “Run”.
  7. The result will be displayed in the “Terminal” section.

You might notice an interesting behavior in the terminal - message “pipeline changed URL to ‘https://meet.google.com/?authuser=1'" - this is because the pipeline step ppl_gmeet was executed before the rule was checked. This is the expected behavior, as the pipeline steps are executed before the rule matching.

To use this rule in BT, you need to add it to the rules list. This is done by pressing the “Add” button in the “Rules” section of an appropriate browser or prifile, selecting “Lua script” and then selecting function name in the dropdown list:

To test, use Pipeline debugger and type a URL that starts with https://meet.google.com/ and process name slack.exe. You will see that the URL goes through the pipeline step ppl_gmeet

and then the rule rule_gmeet_from_slack is matched.

Printing to the terminal

BT allows you to print messages to the terminal from the script. This is useful for debugging purposes. To print a message, use the built-in Lua print function, and the message will be displayed in the “Terminal” section.

Command line

BT can be controlled from the command line. This is useful for scripting, automation, or for advanced users.

Launch configuration editor

Invoking BT with no arguments will launch the configuration editor user interface.

bt.exe

Open URL

The most basic case is to just invoke BT with a URL as an argument. This will behave exactly as you would click a link in an external application and follow the usual process of handling rule, invoking picker and whatever else you have configured.

bt.exe https://www.google.com

Open picker for any URL

If you want to open the picker for any URL, you can use the pick command.

bt.exe pick https://www.google.com

Terminal commands

You can also use terminal commands to control BT, this does not pop up any UI.

List browsers and profiles

bt browser list

Returns a long list of all currently configured browsers and profiles.

browsers: 3

msedge
  name:     Microsoft Edge
  cmd:      C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
  system:   yes
  hidden:   no
  features: system chromium
  profiles: 3
    > id:        Default
      name:      Personal
      args:      "url" "--profile-directory=Default" --no-default-browser-check
      hidden:    no
      icon:      C:\Users\alone\AppData\Local\Microsoft\Edge\User Data\Default\Edge Profile Picture.png
      incognito: no
    > id:        Profile 1
      name:      Work
      args:      "url" "--profile-directory=Profile 1" --no-default-browser-check
      hidden:    no
      icon:      C:\Users\alone\AppData\Local\Microsoft\Edge\User Data\Profile 1\Edge Profile Picture.png
      incognito: no
    > id:        InPrivate
      name:      InPrivate
      args:      "url" --inprivate
      hidden:    no
      incognito: yes

firefox
  name:     Mozilla Firefox
  cmd:      C:\Program Files\Mozilla Firefox\firefox.exe
  system:   yes
  hidden:   no
  features: system firefox
  profiles: 4
    > id:        Profile0
      name:      No container
      args:      "url" -P "default-release"
      hidden:    no
      incognito: no
    > id:        Profile0+c_2
      name:      Isoline
      args:      "ext+bt:container=Isoline&url=url" -P "default-release"
      hidden:    no
      incognito: no
    > id:        private
      name:      Private
      args:      -private-window "url"
      hidden:    no
      icon:      C:\Program Files\Mozilla Firefox\firefox.exe
      incognito: yes

aadb3a96-6f1b-444b-955d-ac5f7d451f7f
  name:     Tor Browser
  cmd:      C:\software\tor\Browser\firefox.exe
  system:   no
  hidden:   no
  profiles: 1
    > id:        default
      name:      Tor Browser
      hidden:    no
      incognito: no

{collapsible=“true” collapsed-title=“Example output”}

Get default browser

bt browser get default

Will print the default browser in format <browser_id>.<profile_id>. You can view these ids using bt browser list commands.

Set default browser

bt browser set default <browser_id>.<profile_id>

Will set the default browser to the specified browser and profile. You need to specify correct browser and profile ids, which again can be retreived from bt browser list command.

Browser extensions

They do two things:

  1. Add a toolbar button to open current page via BT.
  2. Add a context menu to open a link on a page via BT.

Supported browsers

Extensions are available for the following browsers:

Mozilla Firefox

Mozilla Firefox is fully supported by BT in the sense that:

Containers

Firefox Containers is an amazing extension by Mozilla itself (it’s even open-source), which “lets you keep parts of your online life separated into colour-coded tabs. Cookies are separated by container, allowing you to use the web with multiple accounts”. This extension is extremely popular amongst Firefox users today, and in a way that’s one of the reasons I use Firefox myself. Fair enough, Chrom(e/ium) browsers do allow you to create separate profiles, but visually they always run in separate windows, and this is not something to everyone’s liking.

Therefore, containers are fully supported since v3.3 in both Firefox and Waterfox browsers. By default, container support is switched off to stay compatible with older versions, and you have to enable it. Also, Firefox does not provide means to open a link in a container, therefore at the moment this is possible only by installing a supporting extension.

To enable containers, go to Settings->Firefox Container Mode and choose either:

The choice is yours. The second extension is more versatile when it comes to handling containers, and the first one is native to BT, so it not only handles containers but can forward links to BT as explained later on this page.

In terms of container support, there is no difference for BT which extension to use in terms of functionality.

Once you switch the mode, go to Tools->Rediscover Browsers in order to detect configured containers.

You can do that as many times as you want, or any time you add, delete, or rename a container in Firefox/Waterfox itself. BT will show the list of available containers as tabs.

Then it’s configuring rules as usual.

Install Extension

And the last thing to do is install the extension you have chosen. Depending on your choice, use the following links:

FAQ

Q: What does Browser Tamer do? A: It intercepts links you open (from any Windows app) and routes them to the correct browser, profile, container, or custom app based on your rules.

Q: Does it replace my default browser? A: It temporarily becomes the system default to make decisions, then hands off to the target browser silently.

Q: Is it safe and private? A: Yes. It’s native, open-source, does not phone home, and does all processing locally.

Q: Does it support Firefox Containers and Chrome profiles? A: Yes—both automatic detection and manual configuration.

Q: Can I script complex logic? A: Yes, via embedded Lua for URL transformation and rule evaluation.

Q: Will it slow down opening links? A: No. It’s written in highly optimized C++ and is effectively instantaneous for typical rule sets.

Contribute / Source Code

Star it or file issues on GitHub: Browser Tamer repository. Contributions, ideas, and new rule examples are welcome.

Statistics

Active users are defined as unique users who have continuously used the application over at least 7 days, indicating sustained engagement rather than one-time downloads. As you can see, the growth has been steady, reflecting increasing adoption and satisfaction among users managing multiple browsers and profiles on Windows.


To contact me, send an email anytime or leave a comment below.