Parle
A browser extension · open source, AGPL-3.0-only · early
Parle shows you what Hacker News and Reddit have already said about the page you are reading. It finds the discussions, puts a small mark on the page when there are any, and — once you connect an AI Provider of your own — summarises what those conversations actually said, with a followable link under every claim.
No account, no server of ours, and it tells you before it sends anything anywhere. It is a Manifest V3 extension for Chrome, Safari and Firefox from one codebase. It works with no account, no server and no AI connected; each of those is an upgrade rather than a requirement.
Status: early. Hacker News and Reddit work end to end; Reddit may refuse requests depending on your network. Read what Parle sends before you install it, and what is not built before you rely on it.
Who it is for
People who read a lot of links and want the argument that already happened underneath them: the correction, the person who built the thing, the benchmark that was disputed six years ago. Parle does not rate pages, score outlets or tell you what to think. It points at the conversation and gets out of the way.
What it does
On a page somebody has discussed, a small round mark appears at the top right carrying a count, and the toolbar icon carries the same one. Clicking either opens the discussions. On a page nobody has discussed, Parle puts nothing at all on the page — no badge, no mark, no node of ours in the document — and the toolbar says so specifically rather than showing an empty list.
The toolbar button is the account of what happened: every place Parle
asked and exactly what each one answered, including the ones that
refused and the ones it chose not to ask. Reddit answers 403
from many addresses; that is reported as a refusal, never as "nothing
found", because those are opposite facts.
A site's front page is a special case and is treated as one. Opening
google.com could otherwise produce 148 rows about 148
unrelated events. On an address that is a site's entrance rather than a
document, discussions older than thirty days are folded behind
one disclosed, counted, one-click line. Nothing is deleted,
nothing is un-asked, and the discussions are already in the panel when
that line is drawn.
What Parle sends, and to whom
Parle sends the address of the page you are reading — and nothing else — to Hacker News and Reddit, to find out whether anyone has discussed it. That is the same thing as pasting the link into their search boxes — it is not anonymous, and those services see it.
It does this automatically on most pages, if you asked it to. It does
not do it on pages matching a built-in skip list —
banks, webmail, health, government, adult sites, social feeds, and
private or internal addresses — or on pages whose address visibly
carries a token or credential. It never sends the part of an address
after the #, and it strips tracking parameters first.
That skip list is a list. It is incomplete, and it will miss things, including services nobody has told us about and short share links that look like ordinary addresses.
Three things this project will not claim:
- Not "your browsing is private." It is not. Every page you read that is not skipped produces requests to other companies carrying that page's address.
- Not "we exclude addresses carrying credentials." The rules catch several common shapes. A short share link that looks like an ordinary path cannot be detected at all.
- Not "we protect sensitive categories." A list of sites cannot cover health, internal company tools or documents, and the best lists available are measurably missing well-known providers.
The skip list is a floor, not a guarantee. That is why there is a global switch to turn automatic lookups off, a per-site pause, and a way to add your own entries.
Precisely what leaves your machine
| Where | What is sent | Credentials |
|---|---|---|
hn.algolia.com |
the page's address, tidied (up to four alias forms of it) | none — no cookies, no key, no account |
www.reddit.com, then old.reddit.com if that is refused |
the same address | your own Reddit cookies on the first attempt, because Reddit answers 403 without them. The fallback is cookie-free. Reddit can be switched off entirely. |
A link shortener — t.co, bit.ly and the like |
only while you are already on Hacker News, Reddit or X, and only on automatic: one HEAD for a shortened link that was on the page in front of you, to learn where it points. Nothing about any other page you have read. Capped at 150 an hour. |
none |
| X | nothing. The code that would ask X is compiled out of this build — the requests are absent from the shipped file, not merely disabled. | — |
Comment bodies — hn.algolia.com/api/v1/items/…, www.reddit.com/comments/….json |
only after you open the panel or ask for a Digest: the busiest discussion is read when the panel opens; another is read when you choose its tab; asking for a Digest reads at most six. Never on a page load. | none for Hacker News; your Reddit cookies for Reddit, as above |
| The AI Provider you connected, if you connected one | on that same press: the page's address and the text of the comments just fetched. The largest thing Parle ever sends anywhere, and the only thing that never happens without a deliberate click. | your own API key or token, which you pasted |
| Any server run by this project | nothing. There is no backend, and the extension contacts none. | — |
The first thing it does is ask
On install, Parle opens one page and asks a question with two answers: look pages up automatically, or only when you click the toolbar button. The disclosure above it is under a hundred words — where the address goes, by name; that the skip list will miss things; and which of the three sites this build cannot contact at all. The long version is one link away.
Until that question is answered, no address leaves your browser at all, on any page, whatever else is configured — and the pages already open in your browser are not read either. That is enforced in code and held by a test that asserts on what actually went out on the wire, not on what the screen said. Close the tab unread and you get an extension that looks nothing up and says so on every page.
What it stores, and where
Everything Parle keeps is in your own browser profile, and one button deletes it. Two things are written, and they differ in kind.
- Your settings. One entry. If you connect an AI Provider with an API key, that key is in it as ordinary text. A Manifest V3 extension has no keychain — there is nothing better available to put a key in than the store every other setting goes in. Anything that can read your browser profile can read it. Use a key you can revoke.
- What Hacker News, Reddit and X showed you. While you are on one of those three sites, Parle records the links on the page you are looking at, with the thread each came from and its score and comment count. It never leaves your machine, and it is why a link you click on Hacker News already has its thread attached before the page finishes loading — with no request to anyone.
What is deliberately not written to disk is anything derived from a lookup. A record built from what you already saw discloses nothing new; a record of every page you looked up would be a dated list of everywhere you had been, sitting on your disk. So the two halves are separated in the code rather than by convention — the half that records what you were already looking at gets a store that can write, and the half that looks pages up gets one whose writes die with the service worker.
The full detail is in the Parle privacy policy, including how to list the entire store yourself in one line.
Digests, and why they need a Provider of yours
Finding discussions needs no AI and never will. A Digest — a set of attributed statements about what those discussions actually said — needs a model, and you supply it. That is where the free/paid line is drawn, so an install with nothing connected is a complete product rather than an upsell wall.
Building one means fetching the comment bodies of the discussions on the page and sending that text to your Provider — far more traffic than the lookups that found them. So it never happens on its own. The panel shows you the sentence first — Parle will read the comments of 3 discussions and send them to your own API key to be summarised. It has not done that yet. — and only a click does anything.
You can connect an OpenAI-compatible API key (including a model running
on your own machine at http://localhost:8080/v1) or your
browser's built-in on-device model, where there is one, in which case the
comments never leave the machine at all. "Log in with ChatGPT" is a
rough edge and is labelled as one: the client is written but there is no
sign-in flow, so it takes a token pasted from elsewhere.
Every Finding cites a comment, and the citation is a link you can follow. A Digest may report a claim as disputed — the only judgement it makes, and always someone else's — on one condition: that you can go and read the objection yourself. A disputed Finding pointing at a whole 640-comment thread is discarded rather than shown. Model output that cites a discussion which was never fetched cannot be constructed at all; that is a type constraint, not a check somebody remembered to write.
What is not built
- X is compiled out of this build. The connector is written, but the endpoint research is unresolved and it would be your own X account at risk.
- Reddit is real code that often gets refused. You will see it reported as a refusal.
- No sign-in flow for ChatGPT, on any platform. See above.
- No offline list of already-discussed pages ships yet, which is exactly why every page you open that is not skipped gets asked about. The toolbar says so in those words. The format is built and tested; nothing builds or serves the list.
- Shared Digests — written once for a popular page and served to readers with no Provider — need a backend, and there is none.
- The Safari build is Manifest V3 and builds, but still needs Xcode or an App Store Connect upload to become an installable app.
Install it
Parle is not in an extension store yet. The Chrome Web Store submission is being prepared — this page exists partly because that submission needs a privacy policy at a public address. Until it is listed, you install it by building it, which takes about a minute.
You need Node 24 or newer and pnpm 9.12.
git clone https://github.com/ziahamza/parle-extension
cd parle-extension
pnpm install
pnpm --filter @parle/extension build
Then, in Chrome:
- Open
chrome://extensions. - Turn on Developer mode, top right.
- Click Load unpacked.
- Choose
apps/extension/.output/chrome-mv3.
A tab opens with the disclosure and the one question. Nothing is looked up until you answer it. Then open a page that has been discussed and wait a second or two.
Firefox and Safari are built from the same source:
pnpm --filter @parle/extension exec wxt build -b firefox
pnpm --filter @parle/extension exec wxt build -b safari
Source, licence, contact
Parle is AGPL-3.0-only, every line of it, including every disclosure on this page as testable code: github.com/ziahamza/parle-extension. The network clause is deliberate: you may deploy the whole stack yourself and point your own install at it; you simply cannot do so privately.
Issues and questions: the issue tracker, or hello@ziahamza.com.
See the Parle privacy policy. If it and the extension ever disagree, the extension is what actually runs — tell us and it gets fixed.
← Back to home