Skip to content

Cookie Policy

This page lists every cookie books.dev sets, everything the service keeps in your browser, how long each thing lasts, and how to get rid of it. Section 1 states the uncomfortable part on the record rather than leaving you to find it in a network log.

books.dev is operated by NewGen Books LLC, a limited liability company formed in the State of Wyoming, United States, at 30 N Gould St Ste N, Sheridan, WY 82801, USA.

If you are in the EEA or the United Kingdom, the mandatory rights of your own country stay with you. Nothing here limits them.

1. The part usually left out

1.1. books.dev runs two analytics tools, and they do not behave the same way. Google Analytics 4 loads with the first page you open. Its cookies are written at that moment — before you have read the banner, and before you have touched it. PostHog, the second tool, loads only if you press "Continue" on the banner: until then it sets no cookie and sends nothing.

1.2. So the banner does two jobs, and only one of them is asking. For PostHog it is a real choice — allow it and it starts, refuse it and it never runs, and you can change your mind later. For Google Analytics it is a notice: it tells you the script has already run and records that you saw it. It turns Google Analytics neither on nor off.

1.3. That is a decision, not an accident, and it has a legal cost we are not going to hide. Under the ePrivacy Directive as the Court of Justice read it in Planet49 (Case C-673/17), consent for analytics cookies must come before the cookie is set, by an active and specific choice. A notice shown after the script has run does not meet that standard for readers in the EEA and the UK, so we do not call the banner consent for Google Analytics. Section 7 is how to actually stop the tracking; the /privacy gives the basis we rely on and how to object.

2. Cookies and local storage, briefly

2.1. A cookie is a short piece of text a site asks your browser to keep. The browser returns it with every later request, which is how a server knows the request comes from someone already signed in.

2.2. Local storage is browser memory too, but nothing is sent anywhere automatically: the data sits on your device and only the page itself reads it (section 5).

2.3. So: cookies travel to a server on every request; local storage stays with you until you clear it.

Cookie or keyWhat it doesLifetimeSet by
sb- followed by our project reference, then -auth-token (sometimes split into parts ending .0, .1)Keeps you signed in, as a guest or with an account: it holds the session tokens400 daysus, through the Supabase sign-in library
ui_langThe interface language you chose365 daysus
nl_onboardingThat you finished the first-run setup, and the level you chose there, until both move into your profile365 daysus
nl_consentYour answer on the cookie banner: PostHog allowed or refused365 daysus, when you press a banner button
_gaGoogle Analytics visitor identifier — tells one browser from another400 daysGoogle, on your first page view
_ga_ followed by our measurement IDGoogle Analytics session state400 daysGoogle, on your first page view
ph_phc_ followed by our project key, then _posthogPostHog visitor identifier — recognises the same reader from one session to the nextPostHog's defaultPostHog, and only if you allowed it

3.1. The first four are strictly necessary for things you asked for: staying signed in, the site in your language, not repeating the first-run setup, and not asking again a question you have answered.

3.2. The next two belong to Google Analytics 4. They are first-party cookies — they carry our domain, not Google's — which matters, because a setting that blocks only third-party cookies will not stop them. Google sets their lifetime; in our own check it was 400 days. There is no _gid cookie: it belongs to the older Universal Analytics, which we do not use.

3.3. The last one belongs to PostHog and exists only if you pressed "Continue". It is first-party too, it is written at the moment you allow PostHog, and it goes away when you withdraw. Its lifetime is PostHog's default; our code does not set it.

3.4. That is the whole list. Google Analytics and PostHog are the only outside scripts on books.dev that write a cookie, and PostHog writes one only with your permission.

4. What analytics actually sees

4.1. Google Analytics 4 — traffic measurement. We use it to see which pages are opened, how people arrive and which features go unused. Google LLC operates it and processes the data in the United States, under Google's Ads and Analytics Data Processing Terms, which incorporate the Standard Contractual Clauses; Google is also certified under the EU-U.S. Data Privacy Framework. It starts with your first page view, before the banner, on the basis of our legitimate interest in knowing how the service is used, and there is no way to refuse it inside the service — section 7 gives the ways that do work. Our Analytics property deletes user-level data after 14 months.

4.2. PostHog — product analytics and error reports. It shows us how a feature is actually used and sends us the errors the page runs into, so a broken screen gets found and fixed. PostHog, Inc. is a United States company, but our project runs on PostHog Cloud EU: Amazon Web Services in eu-central-1, Frankfurt, Germany, and your browser sends events to eu.i.posthog.com. PostHog handles the data as our processor, on our instructions and under a data-processing agreement, and publishes its own list of sub-processors. It loads only after you press "Continue", and it stops when you withdraw.

4.3. The full vendor list is at /subprocessors.

4.4. What does go to analytics from your reading. An earlier version of this page promised that nothing did; the code never kept that promise, so we are correcting the page rather than pretending. Both tools receive: the word you tapped and the word you saved to your vocabulary; which book you opened, started and finished, and at what level; roughly how far through you were at the moment the service offers to take you back to an unfinished book; and the page address — which carries your catalogue search, if you used one. If you are signed in with an account, your account identifier goes too (a guest's does not): it is what tells one reader on two devices apart from two different readers. It is a random string; it holds no name and no email address. Google Analytics also receives your interface language, your account type (guest or registered) and your reading level once it is known.

4.5. What never goes is the text of a book — neither ours nor one you uploaded: not a sentence, not a paragraph. One caveat we state plainly, because it concerns your own files: a single word you tap inside a book you uploaded travels exactly as a word from ours does. The file itself is never transmitted anywhere, but a tap on a word is the same event in both books. Beyond that, analytics gets the ordinary shape of a web visit: page addresses, referrer, approximate location from the network, device and browser, the order of events in a session, and how fast the page loaded on your device. Both tools receive error reports, and they receive different things: Google gets only the name of the failure and a short description, PostHog also gets the place in the code where it happened.

5. What we keep in your browser

5.1. Local storage holds settings and small flags for this browser. Some settings are also copied to your profile on our servers, as a guest or with an account, so they follow you:

PurposeKeyWhat it keeps
Readingngr:reader-settingsFont, size, theme and layout of the reader; also saved to your profile
Readingngr:last-seenWhen the site was last open in this browser, so it can offer to take you back to your book
Readingngr:reader-hint-seenThat the first-run hint in the reader has been shown
Narrationngr:ttsVoice and speed; also saved to your profile
Narrationngr:audio-outThe audio output device you picked; this browser only
Pricesngr:currencyThe currency prices are shown in; also saved to your profile
Analytics__ph_opt_in_out_ followed by our project key, and entries starting ph_PostHog's own state; only if you have ever allowed PostHog

5.2. Session storage lives only as long as the browser tab:

PurposeKeyWhat it keeps
Sign-innl_auth_codeThe email address you are signing in with and when the code was sent, so a reload does not lose the step
Vocabulary testnl_vocab_test_draftThe test in progress and your answers so far
Studyngr:learn-idsThe words picked for the current study session
Texts from your wordsngr:gen-jobThe text being generated right now

5.3. Local-storage entries have no expiry date: they stay until you clear site data for books.dev. Session-storage entries go when you close the tab. Only pages on books.dev can read either. Your session itself lives in the cookie in section 3, not here.

5.4. Nothing is kept for reading offline: there is no offline mode, and no book text is stored in your browser. Your reading position and progress are not in the browser either — they are saved on our servers, in your account, guest or registered.

6. What is not here

6.1. No third-party advertising or tracking cookies: no retargeting pixels, no ad networks, no data brokers.

6.2. No session recording, no heatmaps, no replay of your mouse or your scrolling.

6.3. No separate error-monitoring or crash-reporting vendor. Error reports go to the same two analytics tools, and they get different things: Google Analytics receives only the name of the failure and a short description, truncated to 300 characters, with no location in the code; PostHog receives the full report with the stack, in its EU region, and only if you allowed PostHog. Nothing about the page you are reading goes to any other diagnostics vendor.

6.4. No Yandex Metrica, and no third-party chat or support widget.

6.5. If any of that changes, this page says so first (section 9).

7. How to refuse

7.1. PostHog: the banner is the switch. Refuse it there and the script never loads, so no cookie is written and no event is sent. Allow it and change your mind afterwards with the analytics switch in your account settings, and it stops and its cookie goes. Nothing else is needed, and refusing costs you nothing.

7.2. Google Analytics: browser controls are the real switch. Every major browser lets you see what a site has stored, delete it, block cookies for that site, or clear everything when you close the window — under Privacy and security in Chrome and Edge, Privacy & Security in Firefox, Privacy in Safari. Deleting site data for books.dev removes the Analytics cookies, and the PostHog one, along with ours.

7.3. Google's own opt-out works everywhere. Google publishes a Google Analytics opt-out browser add-on at https://tools.google.com/dlpage/gaoptout for desktop browsers. Installed, it stops Analytics from sending data on books.dev and everywhere else. It is the option we would pick ourselves.

7.4. A content blocker also works: anything that blocks requests to googletagmanager.com, google-analytics.com or eu.i.posthog.com stops that script loading. We do not detect blockers and will not ask you to switch one off.

7.5. Inside books.dev there is no switch for Google Analytics. This edition of the service has no in-product control that stops the Google Analytics script, and the banner is not one — the banner governs PostHog and nothing else. If we build one, this page will say so.

7.6. "Do Not Track" and Global Privacy Control signals are not acted on by the analytics we load. Use one of the methods above instead.

8. What stops working if you refuse

8.1. Sign-in is the one that genuinely breaks. Block cookies entirely, or for books.dev, and you cannot stay signed in, as a guest or with an account: the session cookie is how the server recognises you between requests, so the sign-in page accepts your code or your Google sign-in and then behaves as though nothing happened. Your library, saved words, progress and uploads sit behind that session and are unreachable while cookies are blocked. Browsing the public catalogue still works.

8.2. The interface language resets to the default on every visit, and the banner returns each time, because the cookies that remember those answers are gone.

8.3. Clearing site data also clears local storage: reader and narration settings return to defaults until you sign in again and they come back from your profile; the audio output device has to be picked again. Progress lives in your account and comes back when you sign in. If you read as a guest, clearing site data also loses the guest session, and with no email or Google account attached to it there is no way to sign back into it.

8.4. Refusing analytics costs you nothing. No feature is limited, you will not be asked again, and there is no paid "no analytics" tier. We simply see less about how the site is used.

8.5. Account data lives on our servers, not in your browser. Clearing cookies does not delete it; deletion is covered in the /privacy.

9. Changes

9.1. We update this page when we add a cookie, change what one is for, change a lifetime, or change the analytics provider.

9.2. For a change that affects you, we give 30 days' notice by email, on the terms set out in the /terms. We will not treat a banner you dismissed in the past as covering something new.

9.3. The current edition is always at /cookies, dated on the last line of this page.

10. Contacts

10.1. Cookies and personal data: privacy@books.dev. Legal notices: legal@books.dev. Everything else: support@books.dev.

10.2. Postal address for legal mail: NewGen Books LLC, 30 N Gould St Ste N, Sheridan, WY 82801, USA.

10.3. What we collect and who receives it: /privacy. The vendors behind the service: /subprocessors. The rules for using it: /terms.

Effective 17 October 2026

NewsTermsPrivacyCookiesNewGen LLC© 2026All rights reservedBeta. You can read and save words now; paid plans are not on sale yet.