$ plaintxt --security
security
what we built, what it protects against, and where the limits are. no marketing, just facts.
// encryption model
key exchange: ECDH P-256
key derivation: HKDF-SHA-256
message encryption: AES-256-GCM
key generation: browser WebCrypto API (non-extractable private key)
private key storage: IndexedDB, device-local only
forward secrecy: per-message ephemeral key pairs
each message uses a fresh ephemeral sender key pair. even if a private key is eventually compromised, past messages encrypted with prior ephemeral keys remain protected.
// what we protect against
// honest limitations
we document what plaintxt does not protect against. security claims that omit limitations are marketing, not engineering.
// infrastructure
API: Cloudflare Workers — edge-deployed, no persistent application servers
database: Cloudflare D1 — stores ciphertext, timestamps, public keys only
attachments: Cloudflare R2 — encrypted at rest, deleted on burn
WebSocket: Cloudflare Durable Objects — stateless relay, no message storage
CDN: Cloudflare Pages — static assets only, no server-side rendering of private data
// responsible disclosure
found a vulnerability? contact us at plaintxt.app/contact. we respond to all credible security reports. we do not have a bug bounty program at this stage, but we take every report seriously and will credit researchers who help us improve.