No description
  • TypeScript 61.5%
  • JavaScript 14.5%
  • CSS 14%
  • HTML 10%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Arshdeep 2166b4ba03 Drop the em dashes from the hub comments
Three of them, in a file written the same day the rule was broken nine
times elsewhere. The rule covers code comments too, not just prose.
2026-07-28 20:36:25 +05:30
public/veil Bring veil onto the same shape, and fix its stray empty block 2026-07-28 19:33:58 +05:30
src Drop the em dashes from the hub comments 2026-07-28 20:36:25 +05:30
.gitignore cipherdrop: zero-knowledge file and text drops 2026-07-02 17:33:51 +05:30
LICENSE add MIT license 2026-07-02 17:38:37 +05:30
next.config.mjs add veil: hide encrypted messages inside images at /veil 2026-07-02 21:07:59 +05:30
package-lock.json add code paste mode with client-side syntax highlighting 2026-07-02 19:19:30 +05:30
package.json add code paste mode with client-side syntax highlighting 2026-07-02 19:19:30 +05:30
postcss.config.js cipherdrop: zero-knowledge file and text drops 2026-07-02 17:33:51 +05:30
README.md raise upload cap to 100MB 2026-07-02 18:34:42 +05:30
tailwind.config.ts Hold cipherdrop to its own material: one face, one sharp radius 2026-07-28 19:14:48 +05:30
tsconfig.json cipherdrop: zero-knowledge file and text drops 2026-07-02 17:33:51 +05:30

cipherdrop

Zero-knowledge file and text drops. Everything is encrypted in your browser before it leaves; the key rides in the URL fragment (#...), which browsers never send to a server. All the server ever stores is ciphertext it cannot read.

How it works

  1. You paste text or pick a file. The browser generates a random AES-GCM 256 key and encrypts the payload (filename and mime included) locally.
  2. Only the ciphertext is uploaded. The server hands back a short id and never sees the key.
  3. Your link is /{id}#{key}. The part after # is the key and stays client-side by design.
  4. The recipient opens the link, the browser reads the key from the fragment, fetches the ciphertext, and decrypts it in place.

Drops carry an expiry (1 hour, 1 day, 7 days) and an optional burn-after-read that deletes the blob on first successful fetch. Expired blobs are swept off disk.

Run it

npm install
npm run dev

Blobs live on disk under data/ (gitignored). Max upload is 100 MB.

Stack

Next.js 14, TypeScript, Tailwind, Web Crypto (crypto.subtle, AES-GCM). No database, no accounts. Built to self-host behind nginx + PM2.

MIT.