cryptgeon

n8n community node to create one-time, end-to-end encrypted Cryptgeon notes (in-process encryption, no CLI required)

Package Information

Released: 3 mo ago
Downloads: 23 weekly / 575 monthly
Latest Version: 2.0.2
Author: Minnebaev Marat

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) and max_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 raise MAX_VIEWS in the Cryptgeon server config. Inspect a server's limits at GET <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 version in package.json and run npm publish (you own the n8n-nodes-cryptgeon package on npm). npm run build runs automatically before publish via prepublishOnly.

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

Discussion