Skip to content

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)]
  1. 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.
  2. It’s unwrapped. Microsoft wraps many links: SafeLinks in Outlook (…safelinks.protection.outlook.com/?url=…) and the microsoft-edge: links some Windows features use. LinkUnbound takes out the real destination, so your rules see github.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.
  3. 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.
  4. 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.
  5. 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.
  6. 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, .webp and similar.
  • macOS: .html, .htm and .xhtml (and .svg if you choose it in Finder).

Two programs, one app

LinkUnbound is two small programs installed together:

PartWhat it doesWhen it runs
The residentReceives links, shows the picker and the notice, owns the tray or menu bar iconAll the time, quietly. It’s written in Rust and drawn with Slint so it stays light and the picker opens instantly
The settings windowRules, browsers, preferences, registration, updates, the diagnostic reportOnly 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.

Edit on the wiki