← Back to blog

Why I Built a Local-Only Safari History Search

I kept losing things in my own browser. Not bookmarks — memory. I knew I had read something about a topic last week, but Safari’s history search couldn’t help me find it. That gap is what turned into Retraced: a Safari history extension that indexes what you actually read, with local Safari search and Safari extension privacy baked in from day one.

The problem I couldn’t shake

You know the feeling. A phrase, a statistic, a half-remembered headline — you’re sure you saw it, but when you open History and type a few words, nothing comes back. You scroll. You guess at URLs. You give up and search the web again, hoping Google surfaces the same page.

It isn’t because you’re careless. Safari’s built-in history search only matches titles and URLs. It never looks at the body of the page — the paragraphs, the forum replies, the docs — the stuff that actually stuck in your head. So if the tab title was vague, or the URL was opaque, you were out of luck. I wanted private browsing history search that meant “search what I read,” not “search what the address bar happened to say.”

Non-negotiable: everything stays on the machine

Once I committed to solving that, the next decision was easy and absolute: no cloud, no accounts, no silent sync. The extension must not make network requests for indexing or search. Your history shouldn’t be a product surface for someone else’s API. I wasn’t interested in “we’ll encrypt it in our vault” — I wanted data that never needed a vault because it never left Safari’s sandbox.

That philosophy shaped every tradeoff. If a feature required phoning home, it didn’t ship. If onboarding required an email, I cut it. Local-only isn’t a marketing line for me; it’s the reason the project felt worth building at all.

How it works, in plain terms

Technically, the approach is straightforward. A content script runs on pages you visit (respecting exclusions) and captures text from the document — enough to make pages searchable later, alongside title and URL. That index lives in IndexedDB inside Safari’s extension sandbox. When you open the popup and type, matches come from that local database. Nothing gets uploaded; there’s nowhere for it to go.

It’s the same class of architecture you’d expect from a serious offline app, just scoped to “make my past browsing legible to future me.”

Privacy-first meant defaults, not prompts

Indexing full text is powerful, which also means it’s dangerous if you’re careless. I didn’t want users to discover after the fact that their bank or inbox had been ingested. So Retraced ships with a built-in blocklist of 60+ sensitive domains — banking, email, medical portals, auth and SSO, messaging, password managers, and similar categories. Those sites are auto-excluded from day one. You can adjust the list if you want, but the safe default is “don’t touch that.”

To me, that’s part of what safari extension privacy should mean: not just “we don’t send data out,” but “we don’t even pretend sensitive corners of the web are the same as a blog post.”

What grew out of actually using it

Once local search worked, other pieces fell into place because I was living in the tool every day. A timeline view with human date groupings made it easier to walk back through “what was I doing Tuesday?” Domain clusters helped when I remembered the site but not the exact page. CSV export mattered for backups and analysis without trusting a third party. Pause and resume let me stop capture during sensitive sessions without uninstalling. Auto-deletion gave a sane retention story for people who don’t want a forever archive.

None of those were the original thesis — the thesis was search — but they’re the kind of features that only show up when you dogfood something that’s truly local and fast.

Why local-only still matters when everything is “in the cloud”

We’re awash in sync engines, AI assistants, and “just sign in” convenience. I use plenty of cloud products. But browsing history is about as personal as data gets: it’s a rough map of your worries, your health questions, your politics, your job, your late-night rabbit holes. Handing that to a server — even a well-meaning one — changes the risk profile in a way I’m not willing to ask users to accept for a utility.

Local-only is slower to monetize and harder to hype. It’s also the only model I could build without feeling like I was training myself to normalize surveillance. If you’re looking for a safari history extension aligned with that instinct, you’re who I had in mind.

Retraced is in beta on TestFlight. If this resonates, I’d love for you to try it and tell me what breaks.

Join the TestFlight beta →