Skip to content

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 the patreon.com origin, 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 the hls.js library, 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.