Skip to content

feat(security): add end-to-end encrypted sharing - #291

Open
ThisIs-Developer wants to merge 1 commit into
mainfrom
feat/encrypted-sharing
Open

ThisIs-Developer wants to merge 1 commit into
mainfrom
feat/encrypted-sharing

Conversation

@ThisIs-Developer

Copy link
Copy Markdown
Owner

Adds end-to-end encryption for newly created Share Snapshots, managed attachments, and Live Share rooms to strengthen content privacy. Encryption and decryption run on the device; complete share-link fragments carry the keys, which are never sent to the storage or relay APIs.

  • Encrypt snapshot Markdown, titles, and access mode, plus managed image/GIF/video payloads, with AES-256-GCM.
  • Encrypt live document and Review updates, names, presence, cursors, and controls. Add role-based signatures, replay checks, separate host controls, hashed connection capabilities, and a 24-hour lifetime for new rooms.
  • Preserve existing snapshot/media reads and existing rooms without rewriting records, bulk deletion, or extending their original expiry.
  • Block automatic external resources and remote rendering in encrypted shared previews; decrypt attachments locally and include them in portable exports. Sharing requests bypass the offline asset cache.
  • Add creator-side snapshot deletion, complete-link guidance, pinned local Yjs, browser/desktop/Docker packaging, and protocol, privacy, compatibility, and rollout documentation.

Validation: npm run build and the full unit suite passed (272 tests), followed by 14 focused encryption/real Cloudflare relay checks after final cache hardening. All 14 targeted Chromium browser tests passed, covering actual local Miniflare/Yjs collaboration, snapshot compatibility and missing keys, encrypted media/export, private rendering, Review feedback, split-view/native uploads, and startup. Desktop resource preparation and final static checks passed. npm audit reported zero vulnerabilities.

Rollout requires the updated Durable Object Worker, Pages Functions, and browser assets together; older clients should refresh before creating new shares. Existing links keep their original lifetime. Complete links remain bearer credentials, and operational metadata and recipient copies are outside the encryption boundary. Details are in docs/ENCRYPTED_SHARING.md.

@vercel

vercel Bot commented Nov 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
markdown-viewer Ready Ready Preview Nov 14, 2026 4:22am UTC

This branch was successfully deployed

1 active deployment
Preview — 5141100e Deployed Nov 14, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant