Meet NanoCo, maintainers of NanoClaw: we raised $12M to give every member of your team a professional assistant →
Skills
Messaging Official

DeltaChat

Add DeltaChat as a messaging channel — email-based chat with end-to-end encryption, driven natively through the DeltaChat core library.

What it does

  • Native adapter — drives the DeltaChat core over JSON-RPC, no Chat SDK bridge
  • Email-based messaging with Autocrypt/OpenPGP end-to-end encryption
  • File attachments, inbound and outbound
  • Invite link plus QR code written on every startup for the SecureJoin connect flow
  • Connectivity watchdog that restarts IO if IMAP goes quiet
  • /set-avatar command to change the bot's avatar at runtime (admin/owner only)

What you'll need

  • NanoClaw installed and running
  • A dedicated email account (check compatibility at providers.delta.chat)
  • IMAP/SMTP hostnames and an app password if the provider enforces 2FA

Install

/add-deltachat

How it works

The /add-deltachat skill connects NanoClaw to DeltaChat, an email-based messenger with built-in end-to-end encryption. Unlike the Chat SDK channels, this is a native adapter: it drives the @deltachat/stdio-rpc-server JSON-RPC subprocess directly, running pure Node.js against the DeltaChat core library. Every message travels over ordinary email with Autocrypt/OpenPGP encryption, so any DeltaChat-compatible mailbox becomes a private channel.

The skill copies src/channels/deltachat.ts and its registration test in from the channels branch, appends the import './deltachat.js'; self-registration line to src/channels/index.ts, and installs the pinned adapter package. It then builds the project and runs the registration test to confirm the channel is wired up. Importing the adapter is safe — it only instantiates the RPC client in setup() at host startup, never at import time. End-to-end delivery is verified manually once the service is running.

Setup

A dedicated email account is strongly recommended, since it accumulates DeltaChat-formatted messages and stores encryption keys. Not every provider works well with DeltaChat, so check providers.delta.chat before committing to one.

Add your mailbox credentials to .env:

DC_EMAIL=bot@example.com
DC_PASSWORD=your-app-password
DC_IMAP_HOST=imap.example.com
DC_IMAP_PORT=993
DC_IMAP_SECURITY=1        # 1=SSL/TLS (default), 2=STARTTLS, 3=plain
DC_SMTP_HOST=smtp.example.com
DC_SMTP_PORT=587
DC_SMTP_SECURITY=2        # 2=STARTTLS (default), 1=SSL/TLS, 3=plain

The defaults are IMAP over SSL/TLS on port 993 and SMTP over STARTTLS on port 587. Security settings are re-applied on every startup, so adjusting them and restarting takes effect without wiping the account. Sync the file to the container with mkdir -p data/env && cp .env data/env/env, then restart the service. On first start the adapter configures the account and calls configure(); later starts skip straight to startIo().

Wiring chats to agents

DeltaChat contacts can’t be added by email address alone. To open a chat, the user must run the SecureJoin handshake by opening the bot’s invite link or scanning its QR code. On every startup the adapter logs the https://i.delta.chat/... invite URL and writes a QR SVG to dc-account/invite-qr.svg. That URL is stable across restarts. Once the first message arrives, the router auto-creates a messaging_groups row; run /init-first-agent to create the agent and wire the DM in one step, or /manage-channels for groups and existing agents.

Tips

  • All six core variables (DC_EMAIL, DC_PASSWORD, DC_IMAP_HOST, DC_IMAP_PORT, DC_SMTP_HOST, DC_SMTP_PORT) must be present or the adapter logs “Channel credentials missing” and skips startup.
  • Providers that use SMTP port 465 need DC_SMTP_SECURITY=1 and DC_SMTP_PORT=465.
  • Send an image captioned /set-avatar to change the bot’s avatar without editing the service file.
  • DeltaChat has no threads, and reactions, message editing/deletion, and read receipts are not supported.