Security policy
September 19, 2026 ยท View on GitHub
Reporting a vulnerability
Use GitHub's private vulnerability reporting:
https://github.com/ThinkyMiner/Winnow/security/advisories/new
Please do not open a public issue for anything that could expose a user's Jev key or page content.
Scope
Things we consider security-relevant:
- Key handling. The Jev API key is stored in
chrome.storage.localunderjev_api_keyand read only by the service worker (src/background/storage.ts). It must never appear in a message reply, a log line, a content script, or aResultobject. Privileged messages (SET_KEY,CLEAR_KEY,SET_SETTINGS,SET_GOALS,CLEAR_CACHE,RESET_READER_STATE) are accepted only fromchrome-extension://senders (src/background/router.ts). - Content-script isolation. Cards and badges render inside shadow roots. Anything that lets host-page script or CSS reach into Winnow's UI, or lets Winnow leak data into the host page, is in scope.
- Network endpoints. The extension is meant to contact only
https://api.typesafe.ai(systemone and models) and, in page mode on YouTube, YouTube's own same-origin endpoints. With "prefetch link text" enabled it also fetches feed link targets withcredentials: "omit". Any other outbound request is a bug. - Excluded hosts.
isExcludedmust keephttp:, loopback and private-range hosts, and the user's exclusion list from ever being judged.
Out of scope: Jev's own accuracy, YouTube changing its endpoints, and issues in Chrome itself.
Response
Best effort. This is a volunteer project with no on-call rotation. We will acknowledge reports as soon as we see them and fix confirmed issues in the next release.
Supported versions
Only the latest release on https://github.com/ThinkyMiner/Winnow/releases receives fixes.