5.6 KiB
5.6 KiB
Add a privacy policy
Status: design approved on 2026-10-21. The policy isn't written yet, and it will be published after the release that fixes #16. Researched, but not legal advice.
Problem
- The AMO listing has no privacy policy. On 2026-10-21 the API reported
has_privacy_policy: false. - The README has a short "Privacy Policy" section. The website's page for the extension says only "Extension collects zero user information."
- The owner wants a policy that says the extension collects nothing and that data will never be sold: "basically the most privacy respecting as possible".
Goals
- Say in plain English what happens to data, with every claim checkable against the code.
- Make clear that Zavage Software receives nothing and will never sell data.
- Make clear that ChatGPT is a separate service under OpenAI's own privacy policy.
Decisions
- Plain English, organised by where data goes. A one-line "we collect nothing" would hide the hand-off to ChatGPT. A formal GDPR-style template is the legalese Mozilla advises against (Extension Workshop, "Create an appealing listing").
- The extension only. One line says the policy doesn't cover the website or email, although the options page links to the website and its contact form. The policy ends with mat@zavage.net for questions. The owner chose this over also covering messages or the whole website.
- The current version only. The policy describes the current version and says so.
- #16 is fixed first. Up to 1.3, a chat started in a private window can open in a normal window. The owner chose to fix that before publishing rather than disclose it, so the policy doesn't mention it.
- Promises. Nothing is ever sold. Any future collection would be opt-in, and the policy is updated before any version that changes how data is handled.
- No "can't". Nothing in the code sends data to Zavage Software, but that is a fact about the current code. The policy says so and points to the public source instead of claiming the extension is unable to send data.
- No claim that Mozilla agreed. #17 asks whether the manifest's "no data collection" declaration covers the hand-off to ChatGPT, and it is still open. The policy describes what happens and doesn't say Mozilla confirmed anything.
PRIVACY.mdis the only copy. It is pasted into AMO unchanged. The README section shrinks to a summary and a link. AGENTS.md namesPRIVACY.mdas the file every data-handling change must update.- Not packaged.
web-ext-config.mjsignoresPRIVACY.md, so AMO and the repository hold it. - Its own pull request, separate from the license change in #33.
- Review. Three readers: one checks each claim against the code, one checks Mozilla's policies and privacy law, and one reads it cold for plain English.
What each claim rests on
| Claim | Evidence |
|---|---|
| Zavage Software receives nothing | The code has no fetch, XMLHttpRequest, sendBeacon, WebSocket or EventSource, and the manifest has no favicon_url. |
| Settings stay in Firefox and sync only through Firefox Sync | lib/settings.js:37-60 uses storage.sync, the only storage API in the code. |
| Three permissions, and no host access | manifest.json:25: storage, menus and activeTab. |
| The manifest declares no data collection | manifest.json:18 |
| The selection is read only when the toolbar button or shortcut is used | background/background.js:41-50: activeTab and tabs.executeScript. |
| The right-click menu gets the selection, link or page address from Firefox at the click | lib/actions.js:16-21 |
| ChatGPT receives the text in the address of the page the extension opens | lib/build-url.js:11 and :45-47; background/open-chat.js:1-9 |
| Temporary chat and web search are only hints in that address | lib/build-url.js:32-37 |
| Dialogs hold pending text in memory only | background/dialogs.js:1 and :20 |
The gpt search sends nothing until Enter |
manifest.json:58-61 has no suggest_url. |
| No remote code | Manifest V2's default content security policy runs only the extension's own scripts. |
| Links to other sites open only when clicked | options/options.html |
AMO's privacy policy field
- Unlike the license field, it renders a restricted Markdown. The field is
privacy_policy = PurifiedMarkdownField(...)in addons-server'saddons/models.py, as Mozilla's blog post of 3 March 2025 describes. - The allowed tags are
a,abbr,acronym,b,blockquote,code,em,i,li,ol,strongandul. Headings are dropped, so section labels are bold lines. - Tags are stripped before the Markdown is rendered, so anything in angle brackets disappears.
- Bare URLs become links through Mozilla's redirector. The email address may link to AMO's home page, as it does in the license.
Publishing on AMO (untested, 2026-10-21)
Publish after the release that fixes #16.
-
In the Developer Hub, open the add-on's Manage Authors & License page, where the license is set too.
-
Tick "This add-on has a Privacy Policy" and paste
PRIVACY.mdunchanged. -
Save, then check:
curl -s https://addons.mozilla.org/api/v5/addons/addon/search-with-chatgpt/ | jq .has_privacy_policy curl -s https://addons.mozilla.org/api/v5/addons/addon/search-with-chatgpt/eula_policy/ | jq .privacy_policyThe policy then appears at https://addons.mozilla.org/firefox/addon/search-with-chatgpt/privacy/.
Outside the policy
- Point the website's "Extension collects zero user information" at the new policy.
- #17 is still open.
- The Chrome repository has no privacy policy.