Getting started
How it works
Every operating system has one default browser: the program that receives a link when you click it outside a browser. LinkUnbound takes that place, but it…
The idea
Every operating system has one default browser: the program that receives a link when you click it outside a browser. LinkUnbound takes that place, but it isn’t a browser. It’s a switchboard: it receives the link, decides (or asks you) which real browser should open it, and hands it over. The browser opens as if you had clicked the link in it.
That’s why nothing changes in your browsers. Your extensions, sessions, bookmarks and profiles stay exactly where they were.
From your click to the browser
flowchart TD
A[You click a link in any app] --> B[The system sends it to its default browser: LinkUnbound]
B --> C[Unwrap: Microsoft SafeLinks and Edge-only links]
C --> D[Note which app was in front]
D --> E{Is there a rule for it?}
E -- Yes --> F[Open in that browser at once]
F --> G[Small notice: A rule decided for … · Undo]
E -- No --> H[The picker appears next to the cursor]
H --> I[You pick a browser, and optionally a reach]
I --> J[Open in that browser and profile]
I -. reach chosen .-> K[(rules.json)]
- The link arrives. Windows starts LinkUnbound with the link, or macOS hands it over as a system event. If LinkUnbound is already running, which is the usual case, the new copy passes the link to the running one and exits at once.
- It’s unwrapped. Microsoft wraps many links: SafeLinks in Outlook (
…safelinks.protection.outlook.com/?url=…) and themicrosoft-edge:links some Windows features use. LinkUnbound takes out the real destination, so your rules seegithub.com, not Microsoft’s wrapper, and the picker shows it too. It only trusts wrappers actually served by Microsoft: a page that merely looks like one is left alone. - It notes where the link came from. Neither Windows nor macOS says which app opened a link, so LinkUnbound takes the app that was in front at that moment (
slack,ms-teams,com.tinyspeck.slackmacgap…). Only its name and identifier are read, never its windows or contents. This is what makes “everything from Slack in Brave” possible. See Privacy. - The rules are checked. If one matches, the link opens straight away in that browser, and a small notice in the corner says which rule decided, with an Undo for six seconds. The notice never takes the keyboard from you. How rules compete is in Rules.
- Otherwise, the picker. It appears next to the cursor with the address, the app the link came from, and your browsers with their profiles. Details in The picker.
- The browser opens. LinkUnbound starts the browser you chose with the link, adding the profile (
--profile-directory=…for Chromium browsers) and the private-window switch if you asked for one. If you chose a reach, the rule is saved.
Links clicked while the picker is open wait their turn, so nothing is lost if you click three links quickly.
Local documents
If you choose LinkUnbound for local web documents, double-clicking one goes through the same rules and picker:
- Windows:
.html,.htm,.xhtml,.pdf,.svg,.mhtml,.shtml,.webpand similar. - macOS:
.html,.htmand.xhtml(and.svgif you choose it in Finder).
Two programs, one app
LinkUnbound is two small programs installed together:
| Part | What it does | When it runs |
|---|---|---|
| The resident | Receives links, shows the picker and the notice, owns the tray or menu bar icon | All the time, quietly. It’s written in Rust and drawn with Slint so it stays light and the picker opens instantly |
| The settings window | Rules, browsers, preferences, registration, updates, the diagnostic report | Only when you open it. It’s built with Tauri and React |
Closing the settings window frees its memory; the resident keeps working. Only Exit in the tray menu stops it.
What it can’t intercept
Some Microsoft apps (parts of Teams, Outlook, Windows widgets and search) can send a link straight to Edge through a channel of their own, skipping the default browser. Windows 11 doesn’t allow another app to stand in the middle of that channel, so no browser picker can catch those clicks. Most of the time you can avoid it with a setting in the app itself: see Troubleshooting.
Why this way
- No browser extension. An extension only sees links inside its own browser. The links that matter most here come from outside: chat, email, documents.
- No rules language. Some pickers are configured by writing code in a file. LinkUnbound learns rules from the choices you already make in the picker, and the Rules page lets you write one without code.
- Local and quiet. The routing happens in memory, on your machine. There is no history of links, and no server involved. See Privacy.