The one that sees what the page really looks like.

The Extract tool fetches a page's HTML and stylesheets from the server. That works well for sites that ship real CSS, and comes back nearly empty for sites that style themselves in JavaScript — because a static reader cannot run the script that does the styling.

The extension has no such problem. It runs inside the page you are already looking at and reads getComputedStyle on the rendered tree, which is the ground truth: whatever the framework did, this sees the result.

Four steps, from disk.

It is not on the Chrome Web Store. Loading it unpacked keeps it entirely yours — no listing, no review, no update channel.

  1. Step 1 of 4

    Get the folder

    The extension lives in the `extension/` folder of this repository. Nothing to build and nothing to install — it ships as plain files on purpose.

  2. Step 2 of 4

    Open the extensions page

    Go to chrome://extensions in Chrome, Edge, Brave or Arc. Firefox uses a different packaging format and will not load this one.

  3. Step 3 of 4

    Turn on developer mode

    The toggle is in the top right. Loading an unpacked extension is a developer action, so the browser wants you to say so explicitly.

  4. Step 4 of 4

    Load unpacked

    Click "Load unpacked" and choose the `extension/` folder. The Reeforge mark appears in your toolbar. Pin it if you plan to use it often.

One line to change

The extension's Forge button opens this app. It points at a local dev server by default; if you host Reeforge somewhere else, change APP_ORIGIN at the top of extension/popup.js.

const APP_ORIGIN = 'http://localhost:3000';

Computed styles, not guesses.

Palette

Every applied text, background, border and outline color, ranked by how many elements carry it — with the WCAG ratio and the text color to use on each. Fully transparent values are skipped, because those are browser defaults rather than decisions.

Type and geometry

Font families with their real stacks, the sizes and weights actually in use, corner radii and box shadows. All read off rendered elements, so a size that exists in the CSS but never renders does not appear.

Tokens

CSS custom properties from every same-origin stylesheet, each shown with the value the root element resolves it to — so you see what the token is worth, not just what it was written as.

Why it asks for so little.

The manifest requests activeTab and scripting, and nothing else. There is no host permission for all sites, no background service worker, no network access and no storage.

activeTab grants access to one tab, only when you click the toolbar icon, and only until you navigate away. The extension cannot read any page you have not explicitly pointed it at — which is the whole reason it is built this way rather than with a content script that runs everywhere.

scripting is what lets it inject the collector into that one tab on that one click.

Nothing is transmitted anywhere. The extraction happens in the page, the Design.md is assembled in the popup, and the only outbound action is one you take: clicking Forge opens a new tab pointed at this app with a color in the URL fragment.

What it still cannot do.

  • — It reads the current route, viewport and theme. A different breakpoint or a dark-mode toggle gives a different document, which is correct but worth knowing before you treat one read as the whole design system.
  • — Only rendered, non-zero-sized elements count. A closed menu or an unopened dialog contributes nothing.
  • — Custom properties come from same-origin stylesheets. A cross-origin sheet is readable by the browser but not by script, so its tokens are missed. Colors and type are unaffected, because those come from computed styles.
  • — Browser pages are off limits. chrome:// URLs, the extensions gallery and local files cannot be injected into by any extension.
  • — Element counts are how many nodes carry a style, not visual prominence. One hero heading matters more than three hundred list items.

Or start with the server-side reader.

No install, works on any public URL, and good enough for most sites that ship real CSS.