Encrypted links for passwords, keys, notes and files
Send a secret our server can't read.
It's encrypted in this tab. The key rides in the part of the link after #, which browsers never send to a server.
⌘Enterto seal.No account. Need a password, a title or a read limit? Open the full note tool
Eight tools
Pick the right tool.
Each one does a single job, and all of them encrypt in your browser before anything is sent. The limits listed are the ones the code enforces.
Share
- Secure noteWhen you need to send a password or a private note that should open onceBurn after readingLink key or passwordUp to 30 days
- EnvShareWhen you need to hand a teammate a .env file or a set of API keys1–100 readsUp to 30 days
- File dropWhen you need to send contracts, exports or a zip without a cloud drive25 MB per drop1–100 downloadsUp to 30 days
- Secret requestWhen you need to get a credential from someone who doesn’t use any of thisEncrypted to your keyOne replyUp to 30 days
Free tools
How it works
Two paths. We only see one of them.
The ciphertext goes through our server. The key goes around it, inside the link you send yourself. Neither half is any use without the other.
- text
- "db: hunter2-but-longer"
- key
- Rk3n9Vx2Lq7Tz4Yb8Wm1…
- blob
- q3Jk8xV0bTn2LwYc9PZ4…
- hash
- 7h2Lq9Xc4Vb8Nm1Zp6Rt…
- key
- never received
- key
- from #k= in the link
- text
- "db: hunter2-but-longer"
https://protectedshare.me/notes/x7Kp2Qa9Lm#k=Rk3n9Vx2Lq7Tz4Yb8Wm1Pc6Hd0Js5Ga2Fe9Ku3No7
The link goes the other way: you send it yourself, over Signal, Slack or email.
- text
- "db: hunter2-but-longer"
- key
- Rk3n9Vx2Lq7Tz4Yb8Wm1…
- blob
- q3Jk8xV0bTn2LwYc9PZ4…
- hash
- 7h2Lq9Xc4Vb8Nm1Zp6Rt…
- key
- never received
- key
- from #k= in the link
- text
- "db: hunter2-but-longer"
https://protectedshare.me/notes/x7Kp2Qa9Lm#k=Rk3n9Vx2Lq7Tz4Yb8Wm1Pc6Hd0Js5Ga2Fe9Ku3No7
#k=…Everything after # never reaches a server. Browsers keep the fragment to themselves; it isn't part of the request.01
It’s sealed in your browser
Your browser makes a random 256-bit key and encrypts with AES-256-GCM. The text never leaves the tab in the clear.
02
We store ciphertext
The server keeps the ciphertext, its IV and salt, and a hash it uses to check that a reader holds the key. None of that decrypts anything.
03
They open the link
Their browser takes the key from after the #, proves it has it, downloads the ciphertext and decrypts locally. A burn note is deleted on that read.
No fine print
What we store, exactly.
Tool by tool, with nothing rounded off. If it isn't listed under “stored on our server”, it isn't there. Read the full security model.
Ciphertext, IV, salt, the KDF mode, a hash of the read token, the expiry, and the burn flag or reads left.
Your text, the key, and your password if you set one.
On the burning read, the last allowed read, or at expiry.
Encrypted chunks (in Cloudflare R2), an encrypted manifest, the total encrypted size, chunk count, downloads left, expiry, and a hash of each download's session token.
File names, types, sizes and contents (names sit inside the encrypted manifest), and the key.
Once the last allowed download finishes or its session lapses, on revoke, at expiry, or 6 hours after an upload that never finished.
Your public key, the encrypted label, the encrypted reply, and hashes of the respond and inbox tokens.
Your private key (only in your inbox link), the reply in the clear, the label key (only in the sender link).
When you collect the reply, or at expiry.
Encrypted messages with timestamps, optional per-message expiry, a room auth hash, and presence: a random client id, a typing flag, last seen.
Messages in the clear, the room key or password.
Messages when everyone has left, or when they expire. Rooms after 7 idle days.
A SHA-256 of your username, the encrypted vault, a password proof, save times, and a check-in for each open tab. Local mode stores nothing with us.
Your notes and your password.
When you delete the workspace.
Kind, id, status, read count, and created, expiry, first-read and last-read times. A hash of the manage token.
The links in My links. The manage token is kept there too, and sent only to check status, revoke, or switch notifications on or off.
30 days after the share expires.
Only if you turn them on, for up to 5 browsers per link: each browser's push address, the keys that encrypt messages for it, and the link's kind and id.
The link, its key, and your label for it.
When the link is used up, revoked or expired, or you switch them off.
Abuse reports
The link's kind and id, a reason, and any details (up to 500 characters) and email you add.
The link's key. A report that contains one is refused.
After 180 days.
Usage counts
One number per day for each kind of link: how many were created. No ids, no content.
Nothing extra. Creating a link just adds one to that day's count.
After 400 days.
Nothing of its own. Links it creates are stored exactly like the website's.
With the local server: your text, link keys and passwords. The remote connector receives the text and makes the link key, in memory only, and stores and logs neither.
The MCP server keeps nothing. Its links follow the rules above.
Nothing. They never send your data to us.
Everything. The breached-password checker sends only the first 5 characters of a SHA-1 hash, to Have I Been Pwned.
Nothing to delete.
Keys travel inside the link you share, after the #, which browsers don't send. Around every request: API calls pass through the web app's host to Cloudflare, which runs the API, and both see IP addresses, request metadata and the ciphertext going by, like any host would. Workers logs are on. Rate limits count wrong passwords per link and new links per IP address, without storing the address, and a password-protected link that gets too many wrong guesses locks for 10 minutes. Google Analytics and Cloudflare Web Analytics load only if the operator sets them up, and never on pages that open or hold a share. The contact form stores the name, email, company and message you send. Expired rows are purged every 30 minutes, and reads past expiry are refused.
Open source
Read the code. Or run your own.
A security tool you can't inspect is a promise. This one is MIT licensed: the API is a Cloudflare Worker with a D1 database, the web app is Next.js. Run both on your own account and nothing touches ours.
$ docker pull ghcr.io/kunalsiyag/protectedshare-web:latestComing from somewhere else?
Feature-by-feature notes, written from public docs. Not audits.
- ProtectedShare vs PrivnoteOne-time notes, side by side.
- ProtectedShare vs OneTimeSecretExpiring secrets and passphrases.
- ProtectedShare vs Bitwarden SendEncrypted sends, without an account.
- ProtectedShare vs Password PusherExpiring links, encrypted in your browser.
- ProtectedShare vs WeTransferSensitive files, encrypted before upload.
- ProtectedShare vs EnvShare.env sharing with read limits.
Can ProtectedShare read what I send?
No. Notes, EnvShare secrets, files, requests and chat messages are encrypted in your browser with AES-256-GCM before anything is sent. The server stores ciphertext and a hash it uses to check that a reader holds the key. The key itself is in the part of the link after #, which browsers don't send to servers. Like every web app that encrypts in the browser, you are trusting the JavaScript the site serves; the code is open source so you can check it or run your own copy. One exception: the remote Claude connector encrypts what you give it on our MCP server, in memory, without storing or logging it; the local MCP server encrypts on your computer.
What is the #k= part of the link?
It's the 256-bit key that decrypts your share. Anyone with the full link can open it, so send it the way you'd send a key. If you'd rather the link alone not be enough, the Secure Note tool can use a separate password instead, or both.
What happens after someone opens my link?
A burn-after-reading note is deleted from the database on the read that opens it. An EnvShare secret loses one read each time and is deleted at zero. A file drop uses one download as soon as a download starts; the server counts it, and cancelling doesn't give it back. When the last download finishes, the drop is deleted. Anything left is deleted at its expiry, which is at most 30 days; a cleanup job runs every 30 minutes and expired links are refused before then.
Can a link preview in Slack or iMessage burn my note?
Previews fetch the page without the part after #, so they don't have the key and can't produce the token the server asks for before it hands over a note. The note page also waits for the recipient to choose to open it.
Can I tell whether my link was opened?
Yes, from the browser that created it. Links you make are listed in My links, kept only in that browser. Each one holds a manage token that lets you see the status, the read count and when it was first and last opened, or revoke it. For a file drop, opened means a download started. The server keeps that receipt, with no content, until 30 days after the link expires. You can also ask for a browser notification when the link is first opened and when it's used up: your browser's push service delivers it, encrypted, and the server keeps the push address only until the link is used up, revoked or expired.
How do I share API keys or a .env file safely?
Open EnvShare, paste the keys or the whole file, pick an expiry up to 30 days and how many times it can be read, from 1 to 100. Send the link. When the last read happens, the row is deleted.
How big a file can I send?
Up to 25 MB per drop, across one or more files. Files are encrypted in 1 MiB chunks in your browser. File names and types are encrypted too; the server only sees the total encrypted size and the number of chunks.
Is it free? Do I need an account?
It's free and there are no accounts. There is no paid plan on the hosted site. Organizations that want a separate deployment can ask about a dedicated instance.
Can I host it myself?
Yes. The code is MIT licensed on GitHub. The API runs on Cloudflare Workers with a D1 database (file chunks go to an R2 bucket, or to D1 if you skip it), and the web app runs on any Node host or from the Docker image ghcr.io/kunalsiyag/protectedshare-web.
How is this different from Privnote or OneTimeSecret?
The same job, one-time secrets that expire, done with the key in the link fragment so our server never receives it. It also covers .env files with read limits, file drops, secret requests, an encrypted chat room and a notepad. The comparison pages go through the differences one by one.
The next password you send doesn't have to live in a chat log.
Free, no account, deleted on read.