Permissions & network

Effective 18 September 2026 · Technical annex to the Privacy Policy

The Privacy Policy covers the data itself — what we collect, where it lives, how long it is kept. This page covers the implementation: which permissions the extension asks the browser for, what each one is for, and when it makes a network request. They are split because this is technical description rather than contractual terms — merged together, it turns a privacy policy into a list nobody finishes reading.

1. What each browser permission is for

The extension declares a handful of permissions in its manifest, each tied to one concrete feature. There are no reserved permissions, and nothing is requested that isn't used.

PermissionWhat it is for
storageKeeping settings, your sign-in credentials and short-lived undo records on your machine
unlimitedStorageHolding clip text and the bytes of images you save. Individual images are capped at 8 MB and 8 per clip, and the default quota is easy to exceed
contextMenusThe two right-click items: “Add to Gray Hole: selected text” and “Add to Gray Hole: this image”
sidePanelShowing the library in the browser sidebar, so it doesn't interrupt the page you are reading
activeTabWhen you click the toolbar icon deliberately, reading the current tab's title and address to record where the clip came from
clipboardWriteFormatting clips as Markdown and copying them to the clipboard so you can paste them elsewhere
http://*/*
https://*/*
(content script match patterns)
Showing the selection bar on web pages. This is the precondition for the core feature — to read the passage the moment you select it, the extension has to be able to reach page content. It reads only the passage you select, and only when you select or right-click it yourself; until you hit save, nothing is written to the library and nothing is sent to any server

The content script runs inside a closed Shadow DOM, so a page's own scripts cannot reach clip text, and the extension exposes no save API for pages to call. Browser-internal chrome:// pages don't allow extensions to inject at all, so we can't read those either.

Chrome warns at install time that the extension can “read and change all your data on all websites”. That warning follows from the match patterns above and is unavoidable for any clipper — it describes precisely what the extension is able to reach, while what it actually reads is limited to the passage you select yourself.

2. Every network request

Below is the complete list of network requests Gray Hole can make. There are no others.

WhenRequest targetTrigger
Backing up an image The image's original URL You deliberately saved an image. The request uses credentials: omit and referrerPolicy: no-referrer, so it carries no login cookie and no referrer. The image server can still see your IP address
Sign up / sign in / password reset / clip sync *.supabase.co You registered an account and use cloud sync. Purely local use produces none of these
Browsing this site grayhole.tech You visit the website. The site loads no third-party resources
Website anonymous funnel events The funnel_events table on *.supabase.co (write-only, not readable) When you open a page on this site or click one of its key buttons, the page writes one row itself. Fields and boundaries are in Section 5 of the Privacy Policy. Nothing is sent when Do Not Track is enabled. The extension has nothing of the kind.

3. What cloud sync writes

With cloud sync on, the following fields are mirrored to the cloud row by row, written only for you. With cloud sync off, these tables hold nothing of yours at all.

TableFields
clips Clip text and its Markdown copy, title, source information (platform, vendor, page title, page address), position anchors, collection membership, tags, starred and archived state, trash marker, content type, content fingerprint, image links and metadata, creation and modification times
collectionsCollection names, matching keywords, creation and modification times
profilesUser ID, display name, registration time
assetsCloud copies of image bytes. The table exists but is not enabled in the current version; images remain as local copies across your devices

4. What is stored locally

Without an account, the items below are the entirety of Gray Hole's data, and none of it leaves your browser.

ContentLocation
Clip text, titles, tags, collections, source informationThe extension's IndexedDB, database tata-clipper-v1, table clips
The bytes of images you savedSame database, table assets, stored as Blobs
Interface preferences, theme, demo seed markerSame database, table settings
Access token (exists only after you register)Extension: chrome.storage.local; website: this site's localStorage

5. One detail worth knowing: source URLs

Source URLs can contain private information. So that a clip can find its way back to the original page, we keep the page address. If that address carries a session ID, query parameters or a one-time token, those are stored along with it. This is true both locally and in the cloud.

Treat exported JSON backups and the cloud mirror as content that is not safe to share publicly. We do not add application-layer encryption to these fields — encryption at rest is provided by the hosting platform.

Back to the Privacy Policy

For what we collect, where it is stored, how long it is kept and how to delete it, see the Privacy Policy; for licence and liability, see the Terms of Service.

If anything on this page is unclear — including which line here corresponds to the permission warning you saw in the Chrome Web Store — write to [email protected].