I'm a generalist. I design, I code, I end up in a lot of places where typography matters but isn't really the job. Reviewing a client's staging site. Onboarding to a codebase I didn't write. Wondering if a page would just read better in a different font face. The question comes up a lot: what's actually being used here, and what would it look like with something else?
DevTools gets you part of the way. But there wasn't a quick way to just try a font on the live page and move on, so Tinkerfont started as a small tool to close that gap.
What Tinkerfont does
Tinkerfont is a browser extension for inspecting, replacing, and testing fonts on live websites.
- Inspect: right-click any text for family, weight, size, color, and contrast. Copy what you need.
- Detect: open the panel and see every font family on the page, with counts.
- Swap: search 1,900+ open fonts from Bunny Fonts, or upload your own
.woff2,.woff,.ttf, or.otf. Apply in one click. - Scope: limit a swap to the nav, a hero, or any area you pick on the page.
- Persist: rules save per hostname. Export and import your setup as JSON.
Free on Chrome and Firefox. No account. Everything stays in local storage on your device.
How the idea grew
The first version was really just font swapping -- pick what's on the page, try a candidate, scroll, decide. That alone covered most of what I kept doing on staging and client work: a quick gut check before a meeting, a screenshot to share, no branch and no CSS edit.
The inspector came later. I'd been using Fontanello for years and wanted that flow built in -- right-click, see the breakdown, copy a value. Huge thanks to Lars and Fredrik for the inspiration there.
A Firefox port followed once the Chrome version felt solid -- same panel, same rules, same local-first model. The website (mighil.com/tinkerfont) is a small lander and docs site: install links, a get-started guide, privacy policy, support form.
Dev notes
Nothing too clever under the hood.
The extension
Manifest V3 on Chrome -- service worker background, content scripts on <all_urls>, a floating panel injected as an iframe.
Roughly:
When a page changes (SPAs, lazy-loaded content), a mutation observer re-applies active rules so swaps don't vanish after navigation.
Custom uploads stay local. The Bunny catalog is a bundled JSON file, refreshed with a small Node script whenever Bunny adds families.
The Firefox build shares almost all the same code -- a thin browser shim, a Firefox-specific manifest (gecko id, data collection declarations for AMO), and a few CSS tweaks where the panel layout differed.
The /tinkerfont website
Next.js, deployed on Cloudflare via OpenNext. Static inner pages, a support form with Turnstile. The landing page has interactive extension previews (HTML iframes), a demo video with a lazy-loaded poster for mobile, and the usual install CTAs for both browsers.
Try it
If you use it for work, I'd love to hear what breaks or what's missing.