SendKey turns a password or API key into an encrypted one time link. The first open reveals the secret and destroys it. The key never touches the server, so nobody can read it in between. Not even us.
Your link is ready. It works exactly once.
The part after # is the decryption key. Browsers never
send it to any server, so it stays between you and your recipient.
If you lose the link, the secret cannot be recovered.
AES-256-GCM·key stays in the # fragment·burns on first read
This is not a policy you have to trust. It is how URLs work.
Your browser generates a fresh 256 bit key and seals the secret with it. Only the sealed bytes are uploaded. The key stays with you.
Everything after # in a URL stays inside the browser.
The key lives there, so it reaches your recipient without ever
crossing the server.
Reading and deleting happen as one atomic step on the server. After that, the link is dead for everyone.
Our end to end tests fail the build if the fragment ever appears in a request.
If the database leaked tomorrow, the thief would hold random bytes and no keys.
AES-256-GCM runs on your device. Only sealed bytes ever leave it, and only sealed bytes are stored.
Read and delete are one atomic step. If fifty people click at the same moment, exactly one sees the secret.
Unopened secrets wipe themselves after one hour, one day, or seven days. Nothing waits around.
A second lock, checked on the recipient's device. A typo burns nothing, and there is nothing for attackers to guess against.
No signup, no cookies, no analytics, no third party scripts. The page cannot talk to anyone but this server.
A small Go codebase with zero dependencies, MIT licensed. Audit it in an afternoon, host it anywhere.
One static binary is the server, the site, and the client. A link made in the terminal opens in the browser, and the other way round.
$ go install github.com/realanshuman/sendkey/cmd/sendkey@latest
$ sendkey send "AKIA-EXAMPLE-SECRET-KEY" one-time link (burns after 1 view, expires in 24h): https://sendkey.xyz/s/H6847TzgXETB#HLsZDskZ-NQFE5xolu… $ pass show prod/db | sendkey send -ttl 1h -views 2 $ sendkey get 'https://sendkey.xyz/s/H6847…#HLsZ…' AKIA-EXAMPLE-SECRET-KEY $ sendkey get 'https://sendkey.xyz/s/H6847…#HLsZ…' sendkey: server: this secret has expired or already been viewed
# in
the link, which is the one part of a URL browsers never send to any
server. What we store is scrambled data we cannot open.
sendkey serve and you are live.
Secrets stay in memory, or in Redis when you point it at one. It
also deploys to Vercel unchanged.
Chat history is saved, synced, and backed up forever. A SendKey link opens once and dies.