A 100% local, privacy-first Chrome extension that turns dense Terms of Service and Privacy Policies into a plain-English summary. One click, no copy-paste, no accounts, no API keys, no cloud.
Open a policy, click the Breakdown icon, and you get an Overview, a Risk Score, the biggest risks, what data is collected, your rights, the important clauses, and how much reading time you saved. The page text never leaves your device. Analysis is a rule-based legal-clause engine that runs entirely on-device. No GPU, no model download, no network. It is instant.
Popup (activeTab click)
│ 1. injects the extractor into the current tab (activeTab only)
▼
Extractor (detects ToS/Privacy + pulls cleaned main content) ──► Popup
│ 2. cache hit? → render instantly (chrome.storage.local)
▼
Clause analyzer
3. match each sentence against a library of legal-clause patterns
4. score risk, extract data and rights, quote the triggering sentence
→ rendered as cards
Detection is sentence-scoped and rule-based for precision: a clause is only reported when a pattern actually matches, negations like "we do not sell" are excluded, and data types are only counted when they appear next to a collection verb. Every clause card quotes the exact sentence that triggered it as evidence.
src/content— legal-document detection and main-content extraction. The extractor is injected on click viachrome.scripting.executeScript, so nothing runs until you ask, and onlyactiveTabaccess is used (no broad host perms).src/nlp— the analysis engine: a curated clause taxonomy with patterns, negation excludes, and plain-English templates (clauses.ts), data-type and rights lexicons (lexicon.ts), sentence and entity helpers (text.ts), and the orchestrator that builds the summary (analyze.ts).src/components/src/styles— the bento-box card UI, icons, and theme.src/utils— reading-time math, the summary cache, settings, and export.
Everything is TypeScript, Manifest V3, and ES modules, bundled with Vite. There is no machine-learning runtime and no model weights to download.
- Page contents are never transmitted. Analysis is on-device.
- No accounts, no analytics, no tracking.
- No network requests. The analyzer ships inside the extension, so it works fully offline from the first click. (PDF policies are fetched only so their bytes can be parsed locally.)
Node isn't required system-wide. A portable copy lives in ./.tooling and was
used to build this. To rebuild with it (Windows PowerShell):
$env:Path = "$PWD\.tooling\node-v22.23.1-win-x64;$env:Path" npm install # first time only npm run build
Or with your own Node 18+ / npm:
npm install npm run build
npm run build generates the icons, type-checks, runs the tests, and bundles
everything into dist/.
- Go to
chrome://extensions. - Turn on Developer mode (top-right).
- Click Load unpacked and select the
dist/folder. - Pin Breakdown, open any Terms of Service or Privacy Policy, and click it.
Analysis is instant, offline, and works on any machine. Nothing to download.
| Command | What it does |
|---|---|
npm run build |
Icons + type-check + tests + production bundle to dist/ |
npm run build:fast |
Bundle only (skip type-check and tests) |
npm run dev |
Rebuild dist/ on change (reload the extension to see updates) |
npm run typecheck |
tsc --noEmit |
npm run test |
Run the unit tests |
npm run icons |
Regenerate the PNG icons |
There is also a self-test page (selftest.html, built into dist/) that runs the
analyzer on a hostile and a fair sample so you can see exactly what it detects.
- How the analysis works. Breakdown matches the document against a library of known legal clauses (arbitration, class-action waivers, data selling, broad content licenses, auto-renewal, liability disclaimers, and more), scores how one-sided it is, and extracts the data types collected and the rights you have. Each clause comes with a plain-English explanation and the exact sentence from the document as evidence.
- Deterministic, not generative. There is no language model writing prose, so
the explanations are accurate templates rather than freshly written text. The
upside is that it is instant, offline, private, and never invents clauses that
are not in the document. The accuracy lives in the patterns in
src/nlp/clauses.ts; if a real policy is mis-scored, that file is where to tune. - PDFs: PDF policies are supported. The bytes are fetched and parsed on-device with pdf.js. Scanned or image-only PDFs have no extractable text and can't be read.
- Force / "Analyze anyway": if detection is a false negative, the "Not a legal document" screen has an Analyze anyway button to run it regardless.
- Summaries are cached per page (URL + content hash), so revisiting an unchanged policy is instant.
- This is a plain-English summary to help you read faster, not legal advice.
Ctrl+Shift+S (macOS Cmd+Shift+S) opens Breakdown for the current page.