Legal
Privacy
NoaLingua has no account and no telemetry. Your cards, settings, dictionaries, review schedule and progress live in your Chrome profile. A small number of things can leave the device, each behind a setting you control, and one thing — a licence check — contacts a server once a day. All of it is listed below.
The extension collects nothing and has no analytics. This website is a separate matter, and it is covered in its own section below. We keep them apart deliberately, because blurring them is how “no analytics” becomes a claim that is not quite true.
What is stored, and where
There is no NoaLingua account, no sign-in, and no synchronisation to our servers. Every item below lives inside your own Chrome profile. The local-first feature page explains why it is built that way and what it costs; the limits page lists the consequences plainly.
| Data | Where it lives | Note |
|---|---|---|
| Settings | chrome.storage.local | Language pair, appearance, every checkbox. |
| Keyboard shortcuts | chrome.storage.local | Kept under their own key rather than inside settings. |
| Your vocabulary | IndexedDB, in the extension | Cards with their sentences, translations, grammar, examples and repetition schedule. |
| Translation cache | IndexedDB, extension and page | So the same sentence is never translated twice. |
| Language packs | IndexedDB, in the extension | Dictionary, grammar, Wiktionary data and the example corpus. |
| Audio clips | Local | Short recordings of sentences, attached to cards, captured from video you played. |
| Per-word counters | IndexedDB, in the extension | Times met, times clicked, times practised. Counted only for words already in your deck. |
| Progress | Local | Day streak, labels, positions in videos, words per video (numbers only), speech scores and missed words (never audio), session counters. |
What can leave your device, and under which condition
Each row is a setting you control. Nothing in this table happens by default except the single-word grammar lookup, which is on out of the box and can be turned off.
| What | To whom | Condition |
|---|---|---|
| Sentence text | MyMemory | Only when you have selected “Cloud, with local fallback” as your translation source. |
| A single word | Wiktionary, Wikidata, Tatoeba | Only while “Look up real conjugation/declension tables and example sentences” is on. Never the sentence, never subtitle text. |
| N-grams to check an expression | Wiktionary API | Only for a language whose offline pack is not downloaded. |
| A sentence, in a new tab | Google Translate | Only when you click “Open in Google Translate”, which itself only appears if you enabled external help. |
| The sound of your voice | Chrome’s speech service | Only with “Online speech recognition” enabled. Nothing else is sent with it. |
| Nothing about you | kaikki.org, WikDict, Tatoeba, Hugging Face | Downloading static dictionary files. The outgoing request carries no information about you. |
| An email address | A mailing list | Only if you type it into the offer that can appear after a finished session. No copy is kept locally. |
Subtitle text without your explicit checkbox. Your watch history. Your saved cards. Your progress. The sound of your voice, unless you turned on online speech recognition yourself — and Say It Back keeps only the score and the words that did not pass, never a recording, under any configuration.
The one server
We would rather tell you this than have you find it in a network tab. Checking whether a paid licence is still valid contacts one endpoint, once a day per device. It is the only part of the extension that talks to a server we operate.
It exists because the check cannot be done honestly inside the extension. Verifying a subscription requires a secret, and any secret shipped inside a browser extension can be extracted from it by anybody who unzips the file. So the check happens somewhere that can actually hold one.
What that endpoint stores: a licence key, a status, and a plan name.
What it does not store: no email address, no name, no customer id, nothing that identifies a person — because answering “is this key live” does not require any of it, and data that is not held cannot leak. Where restoring a purchase by email is concerned, it holds a one-way hash of the address rather than the address, so a complete dump of its storage still contains no way to contact anybody and no list of who pays.
If that check fails or cannot be reached, the extension treats the licence as valid rather than invalid. Somebody who paid and gets locked out by a connectivity problem is a support ticket and a refund; somebody on the free plan who keeps saving costs nothing.
Every Chrome permission, and what it cannot do
Chrome shows permissions as a list of capabilities without context. Here is what each one is actually for, and — more usefully — the limits of what it allows.
Chrome will say NoaLingua can “read and change all your data on all websites”. That is accurate and it is worth understanding rather than glossing: two content scripts do match every site, because selecting text on any page and finding a video on any page are both features. What those scripts actually do is listed below, and neither transmits page content anywhere.
Reading documents is the separate case: on button press, never at install. This is about FILE access for PDFs, and nothing else. Checked Checked on 18 August 2026.
-
storageRequired -
Why it exists. Keeps your settings, saved vocabulary and review schedule on your own machine.
What it cannot do. It grants no network access and no access to page content. There is no remote storage for it to reach.
-
alarmsRequired -
Why it exists. Lets download retries and review reminders survive the browser suspending the extension’s background worker, which it does constantly.
What it cannot do. It cannot read anything. It only schedules the extension to wake itself up.
-
notificationsRequired -
Why it exists. Shows the optional “you have words ready to review” reminder. Off by default.
What it cannot do. It carries no data anywhere. The count is read from your own local queue.
-
contextMenusRequired -
Why it exists. Adds “Translate with NoaLingua” and “Open as bilingual book” to the right-click menu, which is the only way into pages a content script cannot enter.
What it cannot do. It sees nothing until you choose the menu item on a selection you made.
-
Content scripts on <all_urls>At install — this is the broad-access warning you will see -
Why it exists. Two scripts match every site. One waits for you to select text so the word card can open anywhere. The other checks whether the page has a video with a readable caption track, which is how any site other than YouTube and Netflix works at all.
What it cannot do. Both are event listeners that do nothing until you act. The selection script reads nothing until you select something; the video adapter looks for a video element and a caption track, finds neither on the vast majority of pages, and stops. Neither sends page content anywhere. Both can be switched off in Settings.
-
tatoeba.org, download.wikdict.com, kaikki.org, huggingface.co (+2 CDN hosts)Host access, at install -
Why it exists. Downloads the static dictionary, grammar, example and punctuation data that make the product work offline. Each of these serves no CORS header, so only a background fetch backed by a host permission can read them at all.
What it cannot do. These are file downloads. Nothing about you is transmitted with them.
-
<all_urls> host permissionOptional — never granted at install -
Why it exists. Reads a document you have chosen to study. An extension page runs on its own origin, so fetching an ordinary PDF URL is a cross-origin request and almost no document server permits it.
What it cannot do. This is separate from the content scripts above and is genuinely deferred: Chrome asks in its own dialog the first time you press a PDF button, and until you agree the extension cannot fetch a document at all.
A longer walk-through, including what a store reviewer would ask about, is on the permissions page.
This website
Separate from the extension, and stated separately on purpose.
- No analytics of any kind. No Google Analytics, no Plausible, no self-hosted pixel, no server-side visitor tracking beyond the ordinary access logs any web host keeps.
- No cookies. Your theme preference is kept in
localStorage, which is not a cookie and is never transmitted anywhere. That is the only thing this site stores in your browser. - No third-party requests on any page — no fonts, no scripts, no embeds — with exactly one exception: the checkout page loads Paddle’s payment script, because it has to in order to take a payment.
- No consent banner, because there is nothing to consent to. If that ever changes, a real refusable mechanism will appear here rather than a wall.
On the checkout page, Paddle sets what it needs to process a payment and acts as the Merchant of Record. Their handling of your payment data is governed by Paddle’s own privacy policy.
Your rights over your data
A local-first product satisfies most data-protection rights structurally rather than procedurally, because we do not hold the data in the first place.
- Access and portability. Settings → Privacy & data → “Your profile, as a file” exports everything as a single JSON file: settings, every card with its schedule, your streak, labels and progress. It works offline and it is yours.
- Erasure. The same section deletes your translation cache, your saved vocabulary, your settings, or all three at once. Uninstalling the extension removes the profile data with it.
- What we could not delete on request even if asked — because we never had it: your cards, your progress, your watch history or anything about what you study.
- Purchase data. Payment records are held by Paddle as Merchant of Record. Our licence endpoint holds a key, a status and a plan; contact us and it can be removed.
How long any of it is kept
Most privacy policies answer this with a schedule because somebody else is holding the data. Here the honest answer is different, and it cuts both ways.
- On your device — until you delete it. Cards, settings, counters, packs and clips have no expiry and are never deleted on a timer. Nothing ages out behind your back, and equally nothing is tidied up for you. Settings → Privacy & data removes any of it; uninstalling removes all of it.
- The translation cache — until you clear it. It exists so the same
sentence is never paid for twice.
Clear cachein the extension popup, or the same control in Settings, empties both the extension’s copy and the copy in every open tab. - The licence endpoint — while the licence exists. A key, a status, a plan name and a one-way hash of the purchase email, held for as long as that licence is live so the daily check can answer. Ask and it is removed.
- Payment records — Paddle’s retention, not ours. Invoices are held by Paddle as Merchant of Record for as long as tax law requires them, which is longer than a refund window and is not something either of us can shorten.
Children
NoaLingua is not directed at children and collects no personal data from anyone. It has no account system, so there is no age gate to enforce and no profile to build.
Questions or corrections
Email support@noasolutions.org. If anything on this page turns out to be wrong or incomplete, we would rather hear it and fix it than have it stand.
Change log
Material changes to this policy are listed here with the date they were made, oldest last. A policy that can be rewritten silently is not a commitment.
- 19 August 2026. Added this change log, and a retention section stating how long each kind of data is kept — both were required by our own compliance checklist and neither had been written.
- 17 August 2026. First published version.
This page describes the product accurately and in detail. It has not yet been through a formal legal review, and the trader identity required for EU consumer law is still to be added — that work is queued alongside the other formalities before launch.