A private message. A passing moment.
Encrypted on your device. Retrieved once. Automatically expires.
Ready for one retrieval.
Anyone with this link can retrieve the message. If you set a passphrase, they will also need it.
Keep this to yourself. Use it to remove the message early.
Write another message →A message for you.
A connection failure during retrieval may cause the message to be lost.
If the passphrase is incorrect, you can try again in this tab. Do not reload.
Only download files from someone you trust. Files are not scanned for malware. Downloads and copies cannot be recalled.
Revoke your message.
Remove the message if it is still on the server. Copies already made by the recipient cannot be removed.
On your device
Encrypted before the message leaves your browser.
One retrieval
No message history. No second retrieval from the server.
No permanent storage
Encrypted data stays in memory until retrieval or expiry.
Support a little more privacy.
If tempmsg is useful to you, consider a small donation. Your support helps cover hosting, maintenance and continued development.
Support is entirely optional. Thank you for helping keep tempmsg going.
What is protected. And where the limits are.
This first version uses AES-256-GCM in your browser. Plaintext and encryption keys are never sent to the server. The full share link is a secret: your clipboard, browser extensions and messenger may access it.
Our application uses no cookies, trackers, external resources or persistent browser storage. The server processes connection data; short-lived IP counters hashed with a rotating key limit abuse. Hosting and network providers may process additional metadata.
We keep daily totals of created, retrieved and expired messages for 90 UTC days, plus a current storage-usage snapshot. These statistics contain no message IDs, content, keys, IP addresses or visitor identifiers. They are accessible only locally to the operator; there is no public statistics endpoint.
A server restart removes unread messages. Recipient screenshots and copies cannot be prevented. Modified web code or a compromised device can read content. Clearing a session does not guarantee forensic erasure from device memory.
Version 1.0. Not independently audited. Operator and hosting disclosures must be completed before public operation.
A secret from browser to browser.
Follow your message from local image cleaning to encryption and one-time retrieval.
- 01YOUR DEVICE
Clean, then lock.
By default, JPG/PNG metadata is removed locally. Your browser then encrypts the message and attachment before upload.
Local image cleaning · AES-256-GCM - 02TEMPMSG SERVER
Keep only the sealed copy.
Encrypted content waits in temporary memory. The secret stays in the share link.
No plaintext or key - 03RECIPIENT’S DEVICE
Unlock it there.
Retrieval removes the server copy. The recipient’s browser then decrypts the message.
One retrieval
The secret is after the #. Your browser does not send that part of the link when loading the page. Keep the full link private: your messenger, clipboard or browser extensions may still see it.
Explore the encryption flow Step by step
Reduced motion is enabled. Use Previous and Next step to explore at your own pace.
Hover, focus or tap a diagram step for an explanation. Illustration only; no real messages or keys.
Show full sequence diagram
Clean images before encryption
With image cleaning enabled (the default), your browser rebuilds JPG and PNG attachments from their pixels as a still PNG, respecting image orientation. Original EXIF, GPS, comments and embedded thumbnails are not copied; extra PNG metadata is removed. A neutral filename is enabled by default and can be switched off independently. The original file stays unchanged. Cleaning errors stop the upload.
PDFs are not cleaned. Turning image cleaning off preserves the original image metadata. Visible names, faces and watermarks remain; colors and file size may change.
Create the secret and encrypt
The browser generates a random 256-bit link secret. Without a passphrase, this is the AES key. Text and any prepared attachment, including its filename and type, are packed locally, padded to 1 KiB blocks and encrypted with AES-256-GCM, a fresh 96-bit nonce and a 128-bit authentication tag.
Add a passphrase, if you choose
PBKDF2-SHA-256 uses 600,000 iterations, the passphrase, a random salt and the link secret to derive the AES key. Both the link and the passphrase are then needed. Share the passphrase through a separate secure channel.
Store the encrypted envelope
Only ciphertext, encryption parameters and the chosen lifetime are uploaded. The server keeps them in process memory alongside the expiry and hashes of separate read and deletion tokens.
Share the link, then retrieve once
The browser builds the link with the message ID, secret and read token after the #. Opening it does not retrieve the message. Clicking “Retrieve message once” sends only the ID and read token to the server, which checks access and expiry, removes the record, and returns the encrypted envelope.
Verify and decrypt locally
The recipient’s browser uses the link secret and any required passphrase to verify and decrypt the content. A wrong passphrase can be retried in the same tab using the retrieved ciphertext. Reloading or losing the response may make the message unrecoverable.
Encryption protects content, not every trace. HTTPS protects transport in production; hosting providers still process connection metadata. Compromised devices or modified web code can expose secrets, and recipients can keep copies.