Package Information
Documentation
n8n-nodes-cryptgeon
An n8n community node that creates one-time, end-to-end encrypted notes on a Cryptgeon server and returns a shareable link.
You give it text → it encrypts the text inside n8n → it stores only the ciphertext on the server → you get back a link. The note self-destructs after a number of views or a time limit.
How it works (and why it's safe)
Cryptgeon does client-side encryption: the AES‑256‑GCM key never reaches the server — it lives in the # fragment of the link (/note/<id>#<key>). This node replicates that encryption locally using only Node's built-in crypto module (no external runtime dependencies, byte-for-byte compatible with the Cryptgeon web reader).
- 🔐 Text is encrypted in-process; the server stores only ciphertext.
- 🔗 Output is a ready-to-share link with the key in the URL fragment.
- 👁️ Destroy after N views or after N minutes (mutually exclusive — a Cryptgeon constraint).
- 🔑 Optional password: when set, the link contains no key and the recipient must type the password (key derived via PBKDF2‑SHA512).
- 🧩 No shelling out to a CLI, no extra sidecar container — pure API calls.
Node parameters
| Field | Description |
|---|---|
| Server | Cryptgeon base URL. Default https://cryptgeon.org (the public instance). Point it at any self-hosted Cryptgeon server. |
| Text | The secret to encrypt. |
| Destroy After | Number of Views or Time (Minutes). |
| Views | Reads before destruction (shown for the Views mode). |
| Minutes | Minutes until expiry (shown for the Time mode). |
| Password | Optional. If set, the link omits the key and the recipient enters this password. |
Output
{
"url": "https://cryptgeon.org/note/7T6e4q5i7373#8f8...",
"id": "7T6e4q5i7373",
"server": "https://cryptgeon.org",
"hasPassword": false,
"limitType": "views",
"limitValue": 1
}
Server limits matter. Each Cryptgeon server caps
max_views,max_expiration(minutes) andmax_size, and may disable file notes. Requesting more than a server allows is rejected. Some servers allow only 1 view — in that case use the time limit instead, or raiseMAX_VIEWSin the Cryptgeon server config. Inspect a server's limits atGET <server>/api/status/.
Build
npm install
npm run build # tsc -> dist/, plus copies the icon
This produces dist/nodes/Cryptgeon/Cryptgeon.node.js (+ icon + metadata). There are no runtime dependencies.
Install into n8n
Option A — Community Nodes UI (recommended)
In n8n: Settings → Community Nodes → Install, then enter the package name:
n8n-nodes-cryptgeon
Acknowledge the unverified-package prompt and confirm. The Cryptgeon node then appears in the node panel. After this, any old CLI/sidecar-based workaround can be removed.
This installs the published npm package. To ship changes, bump the
versioninpackage.jsonand runnpm publish(you own then8n-nodes-cryptgeonpackage on npm).npm run buildruns automatically before publish viaprepublishOnly.
Option B — Self-hosted via custom extensions (no npm publish needed)
Mount the built dist/ into the n8n container and point N8N_CUSTOM_EXTENSIONS at it:
n8n:
environment:
N8N_CUSTOM_EXTENSIONS: "/home/node/.n8n/custom"
volumes:
- n8n_data:/home/node/.n8n:Z
- /path/to/n8n-nodes-cryptgeon/dist:/home/node/.n8n/custom:ro,Z
Then npm run build on the host and restart the n8n container.
Example workflow
Set (or any node producing text) → Cryptgeon → output {{$json.url}} is the one-time link to share.
Scope
v1 implements Create text note. Reading/opening notes (decrypt from a link) and file support are intentionally out of scope for now — the encryption layer (nodes/Cryptgeon/crypto.ts) already contains a compatible aesDecrypt/derive so a Read operation can be added later.
License
MIT