Drop-in encrypted filesystem for Node.js. Zero dependencies. AES-256-GCM. One line to integrate.
$ npm install dark-envelope
Coming Q2 2026
var fs = require('fs'); fs.writeFileSync(path, userData); var data = fs.readFileSync(path); // ❌ Plaintext on disk. Exposed.
var defs = require('dark-envelope')(userId); defs.writeFileSync(path, userData); var data = defs.readFileSync(path); // ✔ AES-256-GCM encrypted. Per-user keys.
Same API. Now encrypted.
Everything you need to encrypt user data at rest. Nothing you don't.
writeFileSync auto-encrypts. readFileSync auto-decrypts. Your code doesn't change.
require('dark-envelope')(userId) — each user gets their own keyspace. Zero cross-contamination.
Military-grade authenticated encryption. Tamper detection built in.
Node.js crypto only. No npm supply chain risk. Nothing to audit but our code.
Same API as Node's fs module. Swap one require() and you're encrypted.
Every user gets a unique fingerprint (PB-XXXX). Safe for logs. Reveals nothing about the key.
| Feature | Dark Envelope | crypto (raw) | node-forge |
|---|---|---|---|
| Drop-in fs replacement | ✔ | ✘ | ✘ |
| Per-user key isolation | ✔ | Manual | Manual |
| Zero dependencies | ✔ | ✔ | 20+ |
| Ghost fingerprints | ✔ | ✘ | ✘ |
| Tamper detection | Built-in | Manual | Manual |
| Key rotation API | Pro+ | DIY | DIY |
Every envelope carries a fingerprint, timestamp, IV, ciphertext, and auth tag. A sniffer sees noise. Your users see their data.
What your encrypted data looks like on disk. The d field is the mystery — the thing no one can read.
Dark Envelope secures every byte of user data across 14 specialized bots on PinkyBot.io.
Not a proof of concept. Battle-tested in production.
Download Dark Envelope →