Skip to content

About

Choose which browser opens each link on Windows and macOS. Ask every time, or let a rule decide by site, profile or the app the link came from. Open source, local, no telemetry.

Topics

Resources

Contributing

Security policy

Stars

10 stars

Watchers

1 watching

Forks

Latest commit

 

History

189 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LinkUnbound, free open source browser picker for Windows and macOS

LinkUnbound — Free Open Source Browser Picker for Windows and macOS

Choose which browser opens every link. Rules per site, per app and per browser profile, and a small picker beside your cursor for everything else.

No accounts. No subscriptions. No telemetry. Everything stays on your computer.

Latest Release Platform: Windows Platform: macOS License GPL-3.0 Sponsor on GitHub Buy Me a Coffee

LinkUnbound browser picker: you choose which browser opens every link. A GitHub link clicked in Slack opens a picker beside the cursor listing Google Chrome, Mozilla Firefox and Vivaldi with their profiles

Download LinkUnbound

Get LinkUnbound browser picker from Microsoft Store   Install LinkUnbound browser picker via Homebrew on macOS

Prefer a direct download? GitHub Releases has standalone installers — Windows (.exe) · macOS (.dmg, one per chip)

Site and docs: www.linkunbound.app · Wiki


LinkUnbound is a free, open source browser picker for Windows and macOS — a small tool that makes itself the default browser and then asks you which real browser should open each link. Click a link in Teams, Outlook, Slack, Discord, a PDF, a terminal, anywhere: if you have a rule for it, the right browser opens at once; if not, a little browser chooser pops up next to your cursor and you pick with a click or a key.

It is the missing piece for anyone who lives with more than one browser: work in one, personal life in another, a client's tools in a third profile. Instead of changing the system default every week, you set a rule per site, per subdomain, per exact address or per app — "everything from Slack in Brave", "docs.google.com in the work profile of Chrome" — and the rest goes through the picker.

Why people choose LinkUnbound over other browser pickers:

  • Windows and macOS, one app — the same rules, the same picker and the same settings on both systems
  • Rules by the app a link came from — not only by its address: everything Teams sends can open in your work browser
  • Browser profiles, found on their own — every Chromium profile becomes its own choice, with private windows for every browser
  • Truly free — no premium tier, no trial, no feature held back. GPL-3.0
  • Private by design — no account, no telemetry, no cloud. Your rules are a small JSON file on your own disk
  • Signed automatic updates — or through the Microsoft Store and Homebrew, if that is where you got it

Table of Contents


Why I Built This

There is no company behind this. I am one developer who got tired of the operating system deciding which browser opens a link. Work lived in one browser, personal life in another, and every link clicked in a chat or an email landed in whichever one the system had been told was the default.

So I built the browser selector I wanted, for myself, and put it out for whoever has the same itch. That shapes everything about it: no ads, no telemetry, no analytics, no accounts, no subscriptions, no cloud, no data collection — the only thing it ever asks the network is whether a new version exists, and you can turn that off. Your rules live in a small JSON file on your own disk, and you can read every line of the code that touches them.


Who Is This For?

Anyone who keeps more than one browser or more than one browser profile and wants every link to land in the right one without thinking about it:

  • People who keep work and personal browsing apart, with a browser or a Chrome profile for each
  • Developers who test in several browsers and keep their daily one clean
  • Consultants and freelancers with a browser profile per client
  • Anyone whose links arrive from Teams, Outlook, Slack or Discord and should not all open in the same place

If you only ever use one browser, LinkUnbound has nothing to choose between, and that is a fair reason to walk away.


Getting Started

LinkUnbound, free and open source browser picker for Windows and macOS, available from the Microsoft Store, Homebrew and GitHub Releases

Requirements

  • Windows 10 or 11, or macOS 13 (Ventura) or newer
  • At least two browsers installed

Installation

Windows — Microsoft Store (recommended): Get it from Microsoft Store — one click, auto-updates, no security warnings.

Windows — standalone installer: download from GitHub Releases.

macOS — install via Homebrew (signed and notarized):

brew tap rgdevment/tap
brew install --cask linkunbound          # stable
brew install --cask linkunbound-beta     # pre-release

Or download the .dmg directly from GitHub Releases. There are two: aarch64 for Apple Silicon and x86_64 for Intel — Apple menu › About This Mac says which one yours is. Homebrew picks by itself.

Windows standalone: security warnings

Since LinkUnbound is an independent open source project, the installer is signed with a self-signed certificate. Windows and your browser may show security warnings — this is normal and expected.

  • Browser: Chrome/Edge may block the download — click Keep or Keep anyway.
  • SmartScreen: Click More info → Run anyway (only happens once).
  • Why? Code signing certificates cost $200–800/year. The code is 100% open source — you can inspect every line.

Setup

Windows:

  1. Run the installer; it registers LinkUnbound as a browser, starts it, and offers to remove a 1.x install if it finds one
  2. In the settings window, under Links, click Open Settings beside Choose LinkUnbound in Windows — Windows Settings opens on LinkUnbound; make it the default
  3. Done — every link now goes through LinkUnbound. The same page lets you pick it for .html, .pdf and other documents

macOS:

  1. Launch LinkUnbound from Applications (or Spotlight); the settings window opens
  2. In Links, click Set under Set as the default browser
  3. macOS asks you to confirm the change → Use "LinkUnbound"
  4. Done — every link now goes through LinkUnbound. Local .html and .xhtml files go through it too; .svg only if you choose it for them

Coming from 1.x? Remove it before installing 2.0 — the Windows installer offers to — so the two do not fight over the same registration. The details are under How It Works.


What It Does

A link is clicked inside a desktop application; the browser picker opens beside the cursor naming the address and the application it came from, and the link opens in the browser chosen

It becomes your default browser and asks. LinkUnbound registers as the default browser on Windows and macOS, so every link clicked anywhere on the system reaches it first. The picker names the address and the application the link came from, and each browser carries the profile it will open in. It waits in the system tray (or the menu bar on macOS), starts at sign-in and stays out of the way.

A browser picker in two looks

Choose with the mouse or the keys 1–9. The picker opens beside your cursor as a classic list or as a mosaic of tiles that shows every profile at a glance. Hold Shift for a private window, Ctrl+C copies the address, Esc puts it away. Links clicked while it is open wait their turn.

The browser picker in its two looks, a list and a mosaic of tiles, for a GitHub link that came from Slack: press 1, 2 or 3, hold Shift for a private window, and remember the choice for one time, a site or an app

Rules per site, per app and per browser profile

Set it once and never choose twice. The picker remembers your choice at the reach you pick — this exact URL, this subdomain, the whole site, or everything a given app sends — and the Rules page lets you write one for a site you have not visited yet. When a rule decides, a small notice says which one, with an Undo for six seconds; it never takes the keyboard.

Browser rules in LinkUnbound: Microsoft Teams, Slack, atlassian.net and figma.com open in Vivaldi's work profile, github.com and Google Sheets in Chrome's personal profile, and Proton Mail and YouTube in Firefox

A rule covers one of four reaches: an exact address, a host (mail.google.com), a whole site (google.com, which covers mail.google.com, drive.google.com and the rest), or everything a given application sends. The narrowest reach that matches wins, and a rule scoped to an app wins over any domain rule — naming the origin is a deliberate statement, and a generic domain rule should not override it silently. Between two rules of the same reach, the one higher in the Rules page answers. A rule can also ask for a private window, if the browser has one.

Microsoft SafeLinks are unwrapped before any rule looks at them, so rules see the real destination, and the picker names it rather than the wrapper.

Every browser, every profile

Nothing to configure. LinkUnbound finds the browsers installed on your system and reads the profiles of every Chromium-based browser — Chrome, Edge, Brave, Vivaldi and the rest — so each profile is its own choice. Each one opens a private window with the switch its browser family expects. Anything it does not find, you add by hand with its path and its arguments.

The Browsers page in LinkUnbound: Google Chrome with two profiles, Mozilla Firefox and Vivaldi detected automatically, each able to open a private window, and a form to add any other browser by hand

Light, dark, English or Spanish

It looks like it belongs. Light, dark or the system's theme; English or Spanish, detected on its own; the classic list or the mosaic; start at sign-in; a global shortcut to open Settings; and update checks in the background, which you can turn off.

LinkUnbound settings: light and dark theme, English and Spanish, classic or tiles picker, launch at system startup, a global shortcut and quiet automatic updates

And the rest

  • Takes links from your other apps — an application can send a link to linkunbound://open?url=… and it goes through your rules, even when LinkUnbound is not the default browser
  • Opens local documents when you choose it for them — .html, .pdf and the rest on Windows, .html and .xhtml on macOS
  • Updates itself — looks at the release feed in the background, says so in the picker and in Settings, and one press installs it; a Microsoft Store copy updates through the Store
  • Tells you when links are not arriving — Settings explains why and offers the repair

Privacy and Security

Everything stays local. LinkUnbound is built on a single, non-negotiable principle: your data never leaves your computer.

LinkUnbound's bear, private by design: nothing leaves your computer. No accounts, no subscriptions, no telemetry, no ads, no server, GPL-3.0, and rules and links stay local

  • Local-only storage — browser list, rules and preferences stay on your machine
  • No link history — links are routed in memory and never kept; errors go to a local, redacted log you share only if you choose to
  • No tracking — no telemetry, no analytics, no hidden collection
  • No accounts — no sign-up, no login, no profiles
  • Web links only from other apps — linkunbound:// accepts an http or https link and nothing else, and tells the sender nothing back
  • One network request — a read-only check of the release feed the project publishes on GitHub for updates (no user data sent, works offline)

By design, LinkUnbound will never have: accounts, subscriptions, ads, cloud sync, or data collection of any kind.

For responsible disclosure and security contact info, see SECURITY.md. Full privacy details in PRIVACY.md.


How It Works

Link click with a rule: the browser opens at once, and a small notice in the corner says which rule decided, with an Undo for six seconds. The notice never takes the keyboard.

Link click without a rule: a picker appears near your cursor, showing where the link comes from and the app it was clicked in. Pick a browser with the mouse or 1–9. Hold Shift (or pin it with the Private pill) to open a private window. To remember the choice, pick a reach first — this URL, this subdomain, the whole site or from this app — with the arrows or the pills, then pick the browser. Ctrl+C copies the address; Esc puts the picker away. Links clicked while it is open wait their turn.

Settings (tray): double-click the tray icon or right-click → Settings. Six pages:

  • Links — whether the system sends links here, what is wrong when it does not and the button that fixes it; on Windows, the associations held
  • Rules — every rule, the most precise one deciding; change where each opens, add one, remove one
  • Browsers — what was detected, with profiles; hide, duplicate, or add a custom one with its arguments, and look for browsers again after installing one
  • Application — theme, language, picker look, start at sign-in, the global shortcut, background update checks
  • Maintenance — the two that destroy something: reset the configuration, and remove LinkUnbound from the system's list
  • About — version, licence, the update button, the candidate-versions switch, the diagnostic report when something goes wrong, and support links

Updates. Every six hours the resident asks the release feed, without a window. A newer version shows up as a strip atop the picker and in About; Update downloads the signed installer and runs it, and the resident comes back on its own. A copy from the Microsoft Store updates through the Store; a Homebrew copy updates itself the same way as a downloaded one (the cask says auto_updates), and brew upgrade works as well. Turn the background check off under Application if you prefer to ask by hand.

From another app. An application can send a link to LinkUnbound even when it is not the default browser: open linkunbound://open?url= followed by the whole link encoded as one component — what encodeURIComponent does, or utf8_percent_encode(url, NON_ALPHANUMERIC) in Rust — linkunbound://open?url=https%3A%2F%2Fexample.com%2Fa%3Fb%3D1. Every :, /, ?, &, =, #, % and + has to be encoded: an unencoded & or # cuts the link and an unencoded + arrives as a space. It goes through the same rules and picker as a click. Only http and https links are accepted; anything else is dropped. Ask the system whether the scheme exists before using it, and open the plain link when nothing answers: on Windows ask AssocQueryStringW(ASSOCF_IS_PROTOCOL, …, L"linkunbound", L"open", …) twice: ASSOCSTR_EXECUTABLE answers for the downloaded copy, and ASSOCSTR_APPID for the Microsoft Store one, which has no executable to name. Treat OpenWith.exe as no answer: that is Windows offering to choose an app; on macOS NSWorkspace.urlForApplication(toOpen: URL(string: "linkunbound:")!) is not nil while the app is installed.

Architecture. Two binaries, one package: a resident that receives the links and draws the picker, and a settings window opened on demand. How they talk to each other on each system is in CONTRIBUTING.md.

Coming from 1.x

2.0 is not compatible with the settings of the 1.x line, and does not promise to carry them over: it starts from what it can read and keeps the rest out of the way. On Windows it reads the rules and browsers of a standalone 1.x install where they are, and keeps a copy of the originals as rules.1x.json and browsers.1x.json before writing its own format; a copy installed from the Microsoft Store kept its files inside its package and they are not read. Going back to 1.x means restoring those copies over rules.json and browsers.json. Remove 1.x before installing 2.0 — the installer offers to — or the two fight over the same registration; a Store copy of 1.x has to be uninstalled by hand. On macOS 2.0 ships under the bundle identifier dev.rgdevment.linkunbound; 1.x was com.rgdevment.linkunbound, kept its files under that name, and nothing of it is read. macOS treats them as two applications: quit 1.x, remove it, then open Settings and set LinkUnbound as the default once more, and remove the old entry under System Settings → General → Login Items if one is left behind.


FAQ

Is LinkUnbound free? Yes. Completely free and open source. No premium tiers, no subscriptions, no paywalls — ever. That covers using it anywhere, including across a company. Only redistributing it inside a product of your own needs separate terms.

Does it track my browsing? No. LinkUnbound does not track or transmit anything. Links are routed in memory and never logged. An address reaches the disk only inside a rule you asked it to remember for that exact address.

Does it need internet? No. LinkUnbound works fully offline. The only network request is a lightweight update check against the release feed the project publishes on GitHub — no user data sent. The app works perfectly without a connection.

Where is my data stored? Everything stays on your machine — %LOCALAPPDATA%\LinkUnbound\ on Windows, ~/Library/Application Support/LinkUnbound/ on macOS. Browser list (browsers.json), rules (rules.json), preferences (preferences.json), what the last update check found (update.json) and extracted icons. Removing the program keeps the rules and browsers unless you ask otherwise.

Does it work with any browser? Yes. LinkUnbound detects all browsers registered with the operating system. You can also add custom browsers manually with any executable path and arguments.

Can I use it with Microsoft SafeLinks? Yes. LinkUnbound unwraps SafeLinks before matching rules, so your rules work on the actual destination — and the picker names it, not the wrapper.

Why do Teams and Outlook still open Edge? Both carry a setting of their own that sends links to whatever your default browser is, and that is the first thing to change: in Teams it lives under Settings → Files and links, and in classic Outlook under File → Options → Advanced → «Open hyperlinks from Outlook in». Microsoft moves these menus about, so look for «link open preference» or «hyperlinks» if they are not where this says. Set that way, their links reach LinkUnbound like anybody else's.

What is left after that is a channel of Microsoft's own that hands links straight to Edge, skipping the default browser altogether, and Windows 11 no longer lets another application stand in the middle of it. When one of those arrives wrapped in a SafeLink it is unwrapped; the rest is Microsoft's to change.

I do not see the tray icon on Windows. It is there, in the hidden icons behind the ^ at the right of the taskbar: Windows keeps every new application's icon in that overflow until you drag it onto the bar, or promote it under Settings → Personalization → Taskbar → Other system tray icons. Closing the settings window never stops the resident; only Exit in the tray menu does.

Does the picker have a keyboard? Yes: 1–9 open a row, Shift holds a private window, Ctrl+P pins it, the arrows or Tab walk the reaches, Ctrl+C copies the address and Esc closes. A global shortcut (default Alt+Shift+L) opens Settings.


Alternatives

Other browser pickers, so you can pick the one that fits. Platform and licence checked against each project in September 2026; everything else changes, so go and look.

Project Platform Licence
Finicky macOS MIT
Browserino macOS GPL-3.0
Browserosaurus macOS GPL-3.0, no longer maintained
BrowserPicker Windows MIT
Browser Tamer Windows, Linux Apache-2.0
Junction Linux GPL-3.0
Switchbar Windows, macOS Freemium, closed source
Choosy macOS Paid
Velja macOS Free, closed source

What LinkUnbound does that most of these do not: one build for Windows and macOS, rules that match the app a link came from and not only its address, browser profiles detected on their own, and signed automatic updates. Finicky is configured in a file and is macOS only; Junction is Linux only; Browserosaurus now points its own readers at Browserino, which is macOS only too.


Localization

LinkUnbound supports English and Spanish with automatic language detection. You can override the language in Settings.

Language Tag Status
English en Complete
Spanish es Complete

Want to add your language? See the translation guide in CONTRIBUTING.md.


Other Tools by the Same Author

Same idea, same terms: free, open source, no ads, no telemetry, everything local. If you like LinkUnbound, you might also find these useful:

Tisty the beaver, mascot of Tisty, free open source notes, documents and tasks Tisty — Notes, documents and tasks kept as plain files on your own disk, readable without the application. Windows and macOS.
CoPanda the panda, mascot of CoPanda, free open source clipboard manager CoPanda, formerly CopyPaste — A local-first clipboard manager that keeps a searchable history and ignores what comes from a password manager. Windows and macOS.

Support the Project

LinkUnbound is free and will always be free. No ads, no premium tiers, no paywalls. If it saves you time and you want to support continued development, sponsor it on GitHub or buy me a coffee:

Sponsor on GitHub   Buy Me a Coffee

Every contribution helps keep these tools alive and maintained. But if you can't or don't want to donate — that's completely fine. Star the repo, share it with someone, or just use it. That's enough.


Want to Help?

Contributions are always appreciated:

  • Write Code — Fix bugs or add features. See CONTRIBUTING.md.
  • Translate — Add your language.
  • Report Bugs — Open an issue.
  • Share Ideas — Tell me what you wish this browser picker could do.

License

LinkUnbound — A free, open source browser picker for Windows and macOS. Copyright (C) 2026 Mario Hidalgo G. (rgdevment)

This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Distributed under the GNU General Public License v3.0. See LICENSE for details.

LinkUnbound is dual licensed. The GPL-3.0 covers everyone using, deploying, auditing or forking it — which is almost everybody, and it costs nothing. Redistributing it, or shipping it inside a product you distribute, needs separate terms: see COMMERCIAL.md.

Contributions require a one-time CLA; you keep the copyright on your work.

What ships inside the binaries, each under its own licence, is listed in THIRD-PARTY-BUNDLED.md; npm run notices writes it from the lockfiles, together with THIRD-PARTY-LICENSES.md, the licence text of every crate. The application carries both inside its own binary, under About → Third-party notices and About → Licence texts, wherever it was installed from and with no network.


I built LinkUnbound because I was tired of my OS not letting me choose which browser opens a link. This is a personal tool, built from a real need, shared because others might need it too. Free to use, free to inspect, free forever.


Acknowledgements

The picker is drawn with Slint, and the settings window runs on Tauri.

Made with Slint

Project health

Build Status Quality Gate Mutation score Window mutation score Coverage

About

Choose which browser opens each link on Windows and macOS. Ask every time, or let a rule decide by site, profile or the app the link came from. Open source, local, no telemetry.

Topics

Resources

Contributing

Security policy

Stars

10 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages