Privacy & Security
Patchwork is designed from the ground up to keep your system data private. Here’s exactly what lives where, what the server can and cannot see, and how the encryption works.
Core Principles
Encryption-first. Your system data — members, categories, fronting history — is encrypted on your device before it ever leaves it. The server stores only ciphertext it cannot read. Your private key never leaves your device, so there is nothing on the server that can be used to read your data, even by us.
Zero-knowledge storage. The server holds two kinds of encrypted blobs: sealed messages routed between friends, and your encrypted system backup (used to restore your data on a new device). It can read neither. If the server were compromised, an attacker would obtain only ciphertext — unreadable without your private key, which never leaves your device.
No telemetry. Patchwork does not collect analytics, crash reports, or usage statistics. The only network traffic the app generates is authentication (sign-in) and friend messaging (if you use the friend system).
Where Your Data Lives
| Data | Location | Notes |
|---|---|---|
| Member profiles, fronting history, categories | Device + server (encrypted) | Stored locally in the browser (IndexedDB). An encrypted backup is also stored on the server so you can restore on a new device. The server cannot read any of this — it is encrypted with your key before upload. |
| Your RSA private key | Your device | Generated locally on first sign-in. Never leaves your device. |
| Your RSA public key | Server (public) | Shared with friends so they can encrypt messages to you. This is intentionally public. |
| Friend list | Server | The server knows which user IDs are friends with which, in order to route messages. |
| Fronting notifications | Server (encrypted) | Stored temporarily as ciphertext until the recipient fetches them. Server cannot read content. |
| Auth token | Your device | OAuth token from Logto/Discord. Used only to prove identity to the Patchwork server. |
End-to-End Encryption
All content shared between users (fronting notifications) is encrypted end-to-end using a hybrid scheme:
Key generation (one time)
On first sign-in, your device generates an RSA-2048 key pair. The private key is stored locally and never shared. The public key is uploaded to the server so friends can encrypt messages to you.
Encrypting a notification
When you switch fronters, Patchwork generates a fresh random AES-256-GCM key. Your fronting data is encrypted with this key. The AES key is then encrypted with each recipient’s RSA public key separately.
Server routing
The server receives a collection of sealed envelopes — one per friend. It stores them and delivers them when each recipient next fetches their messages. The server cannot open any envelope.
Decryption by recipient
The recipient fetches their envelope. Their device uses their local RSA private key to unwrap the AES key, then decrypts the payload. Decryption happens entirely on-device.
Discord Sign-In
Patchwork uses Discord as an identity provider via Logto OIDC. Here’s exactly what happens and what each party learns:
What Discord knows
That you authorised a third-party app called “Patchwork” to read your basic profile (username and avatar). Discord does not learn anything about your system data.
What Logto knows
Your Discord user ID and the fact that you signed in. Logto issues a JWT token that Patchwork uses to prove your identity to the Patchwork server. Logto does not receive or store your system data.
What the Patchwork server knows
Your user ID (derived from your Discord identity) and your public key. It knows who your friends are (routing metadata). It does not receive your member list, pronouns, history, or any decryptable content.
What stays on your device
Your RSA private key. This never leaves your device under any circumstances. Member data, history, and categories are backed up to the server in encrypted form — but only your device holds the key to decrypt them.
Your Data, Your Control
You remain in control of your data at all times:
- Export your system data at any time from Settings.
- Restore from your encrypted backup on any device by signing in with the same account.
- Clearing your browser storage removes the local copy; your encrypted backup remains on the server until you delete your account.
Deleting your account: Use Settings → Delete Account to permanently remove your presence from the server. This deletes your public key, encrypted backup, friend associations, and any pending encrypted messages. This action cannot be undone.