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=1andDC_SMTP_PORT=465. - Send an image captioned
/set-avatarto 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.