All features

Link hover cards, rules and integrations

Try the real interface

Explore this workspace.

Real Torbie UI · mock sessions
Tab bar
Loading Torbie…
Technical background

Hovering a link opens a card that says where it goes, what a click will do, and offers Open, Copy and Show in folder. A Link Tooltip settings page holds rules that customise the card per pattern, and an Integrations page runs declarative integration.json manifests that fetch a preview of what a link actually refers to — a ticket's status, a message, a session. Doing this also repaired Tabby's linkifier, which could never make a file path or a bare IP clickable at all.

The problem

A terminal prints links all day — URLs, file paths, issue keys, IP addresses — and a terminal's answer to all of them is the same: underline it, and open it if you Ctrl+click. You cannot tell where a link goes without following it, you cannot tell what a ticket key refers to without leaving the window, and Tabby could not make a file path or a bare IP clickable at all.

How it works

Hovering a link opens a card that names the link, shows the path or URL it will really open, and offers Open, Copy and Show in folder. A Link Tooltip settings page holds rules — a pattern, and what the card should do for anything matching it. An Integrations page runs declarative integration.json manifests: a manifest says how to recognise a reference, how to fetch it, and which fields to show, so hovering a ticket key shows its title, status and assignee without a plugin being written for it. The manifest format is tabby-links/INTEGRATIONS.md, and the built-in manifests are kept interchangeable with the Windows Terminal fork this was ported from.

Try it
  1. Open Settings → Link Tooltip and leave enabled on.
  2. Print something with a link in it and hover it — a URL, or a path such as ./package.json.
  3. Add a rule with the Add rule button to change the delay, the width, or which buttons that kind of link gets.
  4. Open Settings → Integrations, enable one, and fill in its credential. Hover a reference it claims.
Settings
  • linkTooltip.enabled: true

    Master switch for the hover card. Detection stays on.

  • linkTooltip.detectLinks: true

    Whether links are detected and made clickable at all.

  • linkTooltip.showDelay: 250

    Milliseconds of hover before the card appears.

  • linkTooltip.hideDelay: 400

    Milliseconds before it goes away.

  • linkTooltip.maxWidth: 640

    Upper bound on the card's width — further limited by the pane.

  • linkTooltip.showButtons: true

    Show Open / Copy / Show in folder on the card.

  • linkTooltip.safeSchemes: []

    Extra URI schemes that open without a confirmation dialog.

  • linkTooltip.rules: []

    The rule list. Each rule is a pattern plus the overrides it applies.

  • linkTooltip.integrations: {}

    Per-integration state, keyed by manifest id.

Details
  • Tabby's linkifier was broken for file paths and bare IPs. @xterm/addon-web-links filters every match through an internal isUrl() — new URL(text) must parse — so UnixFileHandler, WindowsFileHandler and IPHandler never produced a clickable link. Our provider vendors that addon's LinkComputer minus the filter, which fixes all three.
  • A rule pattern is a remotely triggerable freeze. It runs synchronously on the mouse-move handler against text a remote host printed, and (a+)+b on thirty as takes about twelve seconds. Patterns are probed at increasing input lengths and refused both on save and on compile, so a rule hand-written into config.yaml is covered too.
  • Credentials live in <config dir>/integration-credentials.json, encrypted through the OS keystore — never in config.yaml, which Config Sync uploads verbatim.
  • An unconfigured integration still gets Open and Copy link. Resolving a ticket key to a URL needs only the matcher; only previewing needs a credential.
What this does not claim
  • The first version of the ReDoS probe used fixed 64-character inputs and took 127 seconds on (a+)+b — it reproduced the freeze it was meant to prevent. The probe escalates input length now, which is also why Tabby's own default handler regexes survive: they contain nested quantifiers and are simply fast, so a static syntax check would have refused them.
  • The punycode/IDN homograph annotation the reference fork has was silently dropped by this port and only added in a second pass. Several other keys degraded the same way — see Field groups, tabs, actions and detected patterns.
In upstream Tabby

Upstream ships tabby-linkifier, which detects links and opens them; it has no hover card, no rules and no integrations. Its Open and Show in folder use openExternal('file://' + p), which yields file://C:\foo on Windows — an existing upstream bug this fork sidesteps with platform.openPath() and showItemInFolder().

Source commits
LinksAdded 2026-09-0356 files+6,984 / −33 lines