Chrome extension · Manifest V3 · local-first

https://example.com.secure-billing.invalid/pay

You read the first word.
Your browser obeys the last one.

InertLink puts a badge next to your cursor before you click — naming the site that actually owns the link. Fourteen checks, on your device, with no network at all by default.

The badge on this page is the extension's own code, imported from src/content/badge.js — not a mockup.

00

A quarter of a second

Everything below happens between resting your cursor and deciding to click.

mail

billing@example.com

Your invoice is ready

Hi — your statement for this month is available.

View invoice →
01

Hover. Don't click.

Rest on a link for a quarter of a second. Every link below is inert — none of them go anywhere — but the verdicts are real, computed by the same engine that ships in the extension.

Nothing here resolves. Every hostname uses an RFC 2606 reserved name (example.com, .invalid) or an RFC 5737 documentation IP — the same rule the test fixtures follow.

02

What it catches

Each signal is an independent check that returns a weight and a reason. They stack — no single rule decides a verdict, which is what keeps one bad heuristic from painting the web red.

03

How a verdict is reached

Weights are summed into one score, then read against two thresholds. Drag the score.

0 Safe

Thresholds shown are the balanced setting. Strict flags at 12 / 30, relaxed at 30 / 55 — the whole ramp shifts, so sensitivity is one honest dial rather than a per-check toggle.

04

It doesn't phone home

Zero network by default

Every check runs against data bundled in the extension. A fresh install makes no requests at all — not on install, not on hover, not ever, unless you switch on the optional second opinion.

Hovering never touches the link

We read the URL string. We never follow it. Resolving a shortener to see where it lands would be a request to the attacker's server, from your IP, triggered by a mouse movement you didn't mean as a click.

Hostname only, if you opt in

Turn on reputation checks and only the hostname is ever sent — never the path, never the query string. Results are cached, so a host is never sent twice.

It runs where you allow it

No site access is requested at install. Click the toolbar icon and it works on that tab for that visit; grant a site, or every site, only if you want it always on.

05

Install it

Not on the Web Store yet. Load it unpacked — it takes about a minute.

  1. git clone https://github.com/iAaquibjawed/inertlink.git
  2. npm install && npm run build
  3. Open chrome://extensions and turn on Developer mode
  4. Load unpacked → select the dist/ folder — not the repo folder above it
  5. Open any page, click the InertLink icon, and hover a link
06

Built by