Privacy Policy
1. Summary
Gopher stores data about your Patreon memberships on your own device. Gopher does not send this data to a server, because Gopher has no server. Gopher does not use analytics software. Gopher does not use a beacon or a tracker.
Gopher sends network requests only to Patreon and to the content-delivery networks of Patreon. It sends requests only to fetch content that your membership already gives you the right to read. For the disclosure form of the Chrome Web Store, the correct answer is that Gopher does not transmit your data. This section explains why the correct answer is not “does not collect”: Gopher does collect and store data, but only on your device. It never leaves your device.
2. Where Gopher stores data
Gopher stores data in two places, both inside the storage area of the extension. No other extension and no website can read this storage area.
- IndexedDB, through Dexie (
lib/db.ts). This is the one store for entity data: your memberships, the campaigns of your creators, and the posts of those campaigns. - The Cache API (
lib/media-cache.ts). This store holds media bytes: the pictures, the audio files, and the video segments that Gopher has already fetched. It exists so that a repeat view does not fetch the same bytes again. This store is off by default. Gopher asks you for permission before it fetches the media servers of Patreon and turns this store on.
Gopher also keeps a small amount of interface state in browser.storage.local. This is your
chosen language, the open filters, the search text, and the membership you last had open. This state
holds no financial or membership data. browser.storage.session holds the short-lived counters
that pace requests to Patreon (see request limits). The browser
erases this store on its own when the extension goes idle.
3. What Gopher keeps, and for how long
The tables that lib/db.ts declares hold this data, in plain text, with no expiry date and no
automatic deletion:
- The pledge amount of each membership, in cents, with its currency.
- The title of the reward tier of each membership, and the patron status (active, declined, former).
- The identity of each creator you support: the campaign name, the creator name, the avatar picture, and whether the creator marks the campaign NSFW.
- The full body of each post you have read: its title, its text, and whether the post itself carries an NSFW flag.
Be plain with yourself about what this means. Neither Chrome nor Firefox encrypts IndexedDB at rest. A person with access to your device can open the profile of the browser. This includes a shared computer or a second account on the same machine. They can read which creators you pay and how much, until you clear the cache (Section 5). This is a real exposure, and Gopher does not hide it from you. Gopher keeps this data on your device only, and never on a server. That is the one way Gopher can give you full control over it.
4. What Gopher deliberately does not read
The account that signs in to Patreon has its own name, e-mail address, and account id. Gopher
never puts these values into its stores. normalizeCurrentUser
(lib/patreon/normalize.ts) reads only the member and the campaign entities of the Patreon
response. It does not read the user entity that carries your identity. This is not a filter
that runs after the fact — the code has no path that could carry those fields into
lib/db.ts.
5. Your control over this data
The panel has one command, Clear cached data (cache.clear in the panel, handled by
clearData() in entrypoints/background.ts). This command deletes:
- Every table in IndexedDB (campaigns, memberships, posts, and media records).
- Every entry in the Cache API (the media bytes, if you turned that store on).
- The request-pacing state in
browser.storage.session.
The command does not clear your interface preferences in browser.storage.local (your language
and your open filters), because that state carries no membership or payment data. Removing the
extension deletes every store Gopher has, including that one.
6. Network requests Gopher makes
Gopher makes a network request only when it fetches content on your behalf. It uses a device you already control and the Patreon session you are already signed in with. Three places in the code make such a request. Each goes only to Patreon or to a content-delivery network of Patreon:
- The runner (
entrypoints/patreon.content.ts) fetches your memberships and your posts from the Patreon API. It runs in thepatreon.comorigin, so it carries the session you are already signed in with. Gopher never reads your password, your cookie, or your session token. - The byte cache (
lib/media-cache.ts) fetches media bytes from the content-delivery network of Patreon, only after you turn this store on (Section 2). - The video player (
components/media.tsx) fetches video segments from the same content-delivery network, through thehls.jslibrary, when you play a video.
None of these requests carries a referrer, a cookie beyond the Patreon session itself, or a
tracking identifier that Gopher generates. Gopher does not read chrome.cookies, and it does
not construct a request to any server that Gopher itself operates, because Gopher operates no
server.
Third-party video. Patreon also embeds video from YouTube and Vimeo. Gopher cannot show that video inside the panel. Chrome and Firefox do not send a referrer for an extension-origin frame, and the video providers require one. Gopher instead opens that video in a new browser tab, on the site of the provider. Opening that tab tells the provider — not Gopher — that you watched the video. This is the same as visiting the video on any other website.
7. Children’s privacy
Gopher does not knowingly serve, or collect data about, children. Gopher shows only the content that your own Patreon membership already gives you a right to read.
8. Changes to this policy
A change to this page carries a new lastUpdated date in its frontmatter. There is no other
version of this policy.