Privacy Policy — Tab Share

Last updated: 2026-09-02

Tab Share is built so that there is nothing to collect. The extension and the viewer have no server, no account, no analytics, and no tracking. The one part with a server is the optional URL shortener, off by default and described below.

What the extension accesses

What can make a network request

Two things, both optional. If site icons are left on, the viewer requests one icon per domain in the link from icons.duckduckgo.com when the link is opened — those domain names go to DuckDuckGo's icon service and nowhere else. If you turn on a URL shortener in the extension, creating a link sends that one generated URL to the service you chose (the first-party s.kaikay.de, da.gd, TinyURL, or a custom endpoint). With site icons and Auto-load live previews both off (both viewer settings), and no shortener set up, neither the viewer nor the extension makes a network request of its own. A page loads only when you open or preview one yourself.

The Tab Share shortener (s.kaikay.de)

s.kaikay.de is a small service run by the Tab Share author, and is also self-hostable. It only does anything if you opt in by choosing Tab Share shortener in the extension's options and turning it on.

When you create a short link, the one full share link is sent to s.kaikay.de and stored so the short link can redirect to it. That long URL holds every page URL and title in the collection (in its # fragment). Any shortener has to store its links' destinations, so the operator can read them; the admin panel shows only the target host until a destination is deliberately revealed, and an instance where the operator genuinely cannot read them is on the roadmap.

When someone opens a short link, the server keeps aggregate day-level counters only: a per-link hit count, a tally of the host that referred the click (e.g. news.ycombinator.com), and a tally of the visitor's browser family and major version (e.g. Firefox 130) reduced from the User-Agent. It does not keep your IP address, geolocation, the full referring URL or page path, the full User-Agent or device, any cookie, or any per-visitor identifier. Kept about 365 days, visible only to the operator through a password-gated admin page. The operator can also, on request, see an aggregate histogram of the domains people bundle (reddit.com, never the specific page) -- computed on the spot, stored nowhere. There is no third-party analytics, advertising or tracking code, and none of it is ever sold or shared. On a self-hosted instance all of this can be switched off.

Password-protected links

When the sender sets a password, the collection is encrypted in the sender's browser (PBKDF2-SHA-256 → AES-256-GCM) before it goes in the link. The password is never stored or transmitted; you type it here to decrypt locally. A lost password means the link can't be opened — there is no recovery.

The share link

When you create a link, the selected page URLs and titles are compressed and placed in the fragment of the link — the part after the #. Per web standards, browsers do not send the fragment to any server. The link is readable by anyone you give it to (and by anyone they forward it to), so treat it like the list of pages it contains.

The viewer page

The recipient opens the link in a normal browser tab. The viewer page is a static file (no backend). It reads the collection from the fragment in the recipient's browser and renders it. It loads no third-party scripts, fonts, or images and sends no data anywhere. "Open all" and "live preview" simply navigate to, or embed, the pages you chose — the same as clicking the links yourself.

If the recipient also has Tab Share installed, the content script described above adds an "Open with Tab Share" button to the viewer's toolbar, offering to open the collection into a window or a tab group, or to save it to the recipient's own on-device history. That choice, and the pages opened, never leave the recipient's device.

Contact

Open an issue at github.com/kaikayy/multi-link-share/issues.