Privacy policy - putiorr grab

The extension talks to your server and to the page you clicked. There is nowhere else.

I am ptheofan, and I write putiorr and its putiorr grab Chrome extension on my own, as a personal project. There is no company behind it and no service I run on your behalf: putiorr is software you install on your own machine, and the extension is the browser half of it. This page describes what the extension holds, where it sends things, and why it asks for the permissions it asks for.

Last updated: 27 July 2026.

The short version

  • The extension sends what you grab to your own putiorr server, at the address you typed into its options. Nowhere else.
  • It also fetches the .torrent file you clicked from the site you clicked it on — the request your browser was about to make anyway.
  • Your putiorr username and password, if you set them, are kept in Chrome's local extension storage, deliberately, so they are not carried into your Google account.
  • I receive nothing. There is no server of mine in the path, no analytics, no telemetry, no crash reporting, and no third party at all.
  • Nothing is sold, shared, or used to build a profile of you, because nothing ever reaches me to sell or share.

The whole extension is about 2,000 lines of JavaScript in the extension folder of the repository, under the AGPL. Everything on this page can be checked against it — every network call it makes is a fetch you can find by searching for one.

What it stores

Everything the extension keeps lives in Chrome's extension storage on your own computer. There are two areas, and the split between them is deliberate.

Synced storage

Three settings live in chrome.storage.sync:

WhatWhy it is there
baseUrl The address of your own putiorr, as you typed it — usually a private hostname like http://nas:9091. Without it the extension has nowhere to send a grab.
autoCapture A single true/false: whether ordinary clicks on magnet and .torrent links are captured, or only right-click grabs.
profiles The id and the name of each grab profile, copied from your putiorr the last time you pressed Test connection & load profiles and saved. It is what fills the right-click menu when putiorr cannot be asked in time.

Be aware of what sync means. If you have Chrome Sync switched on, Chrome may carry these three values through your own Google account to your other Chrome installations. That is Chrome's mechanism and your account, not anything I run or can see — but it is real, and it is the reason the next section exists. Of the three, only the profile names say anything about you at all, and they say only what you called your own folders.

Local storage

Two values live in chrome.storage.local, which Chrome never synchronises:

WhatWhy it is there
username The optional HTTP Basic credentials for your own putiorr, for people who put one behind a password. They are sent to your putiorr as an Authorization header and used for nothing else. If your putiorr has no Basic auth, both stay empty and no such header is ever sent.
password

These two are in local on purpose. A password does not belong in storage that a browser may replicate through a cloud account, even your own, so the credentials are kept where Chrome will not carry them off the machine you typed them on. The cost of that choice is that you type them again on each computer, and that is the right trade.

What it sends, and where

The extension makes requests to exactly two kinds of destination. There is no third.

1. Your own putiorr, at the address you configured

Every request below goes to the baseUrl you typed and to nowhere else. It is your server, on your network, holding your data; I have no access to it.

  • When you grab something — the magnet link, or the contents of the .torrent file, and its filename; the address of the page you were on and that page's hostname, so putiorr can work out which of your profiles the grab belongs to; and the profile id, when you picked one from the right-click menu.
  • When you load profiles, or open the toolbar popup — a request asking putiorr to list your grab profiles, so the options page and the popup can show them.
  • When you claim a site from the popup — the hostname shown in the popup's field, which you can edit before clicking, and the profile you picked for it. This adds the site to that profile in putiorr, which is the same edit you could make in the dashboard.
  • With all of the above — your putiorr username and password as an Authorization header, if you set them.

2. The site you clicked the link on

A .torrent link has to be downloaded before it can be handed to putiorr, and on a private tracker that download only works while logged in. So the extension fetches the file from the page you are already on, with that site's own cookies attached — which is precisely the request your browser would have made had the extension not been installed. It goes to the site you clicked, it carries nothing the browser would not have carried, and the file it returns goes to your putiorr and nowhere else.

A magnet link needs no such fetch: it is already the whole thing, and it is read out of the link and sent straight to your putiorr.

Why it needs each permission

PermissionWhat it is for
storage To keep the settings described above. It is the only way an extension can remember your putiorr's address between clicks.
notifications To tell you a grab was sent, or why it failed. A grab happens in the background with nothing on screen; without a notification a failure would be silent.
contextMenus To put Send to putiorr in the right-click menu on a link, with your profiles under it. It is the only way to grab a link that Chrome would otherwise just download, and the only way to override the profile for one grab.
<all_urls> host access To fetch the .torrent from whichever tracker you clicked, and to reach your own putiorr, whose address is a private one only you know.
<all_urls> content script To notice a click on a magnet or .torrent link at all, and to draw the small acknowledgement in the corner of the page.

Why it cannot ship a list of sites instead. Which sites route to which profile is decided in your putiorr, on your profiles, and can change at any time without the extension being touched. The trackers people use are private and live on domains only their members know; your putiorr lives on a hostname only your network knows. Any list I could write into the manifest would be a list of sites I guessed at — wrong for almost everyone, and an odd thing to publish besides. So the extension asks for every site and then does nothing on the overwhelming majority of them: it watches for clicks on magnet and .torrent links, and a page where you never click one is a page it never acts on and never reports.

You can narrow this yourself. Chrome lets you set an extension's site access to On click or to specific sites, from chrome://extensionsDetailsSite access. The extension will then work only where you allow it.

What it does not do

  • There is no server of mine. The extension has no backend, no API of mine to call, no licence check, and no update channel other than Chrome's own.
  • No analytics, no telemetry, no crash reporting. Not disabled by default — absent. There is no code in the extension that could send any.
  • No third-party code, and no third-party requests. The extension bundles no libraries, loads no fonts, scripts, or images from anywhere, and contacts no service. Everything it runs ships inside the extension.
  • It does not read the pages you visit. The content script watches for clicks on links and reads the link you clicked. It does not collect page content, form input, or your browsing history, and it sends nothing about a page you did not grab from.
  • It does not touch your put.io account directly. Only putiorr talks to put.io; the extension talks only to putiorr.
  • I receive nothing, so there is nothing for me to sell, share, or hand over. No data from the extension reaches me, and none can: there is no address in it that points at me.

Removing what it holds

Everything is on your own machine, so removing it is entirely in your hands:

  • Clear the credentials by emptying the Username and Password fields in the options and pressing Save. Saving writes what is on screen, so empty fields overwrite what was stored.
  • Remove everything by uninstalling the extension from chrome://extensions. Chrome deletes an extension's storage with the extension.
  • If Chrome Sync carried the synced settings elsewhere, that copy is in your Google account and under your control there, alongside the rest of your Chrome data.

Whatever your grabs left behind on your putiorr is putiorr's, not the extension's, and it is on your own hardware. This page covers the extension.

Changes to this page

If the extension starts storing or sending something not described here, this page changes with it, in the same commit, and the date at the top changes too. Its history is public: every revision is in the repository's commit log, so you can see for yourself what changed and when.

Contact

Questions about this policy, or something in the code that does not match what is written here, belong in the issue tracker. Asking in the open is better for everyone: the answer stays where the next person can find it, and a claim on this page that turns out to be wrong should be corrected in public.