DarkIRC protocol and data reference
This page describes the current DarkIRC-specific data placed in the Event Graph and the IRC surface exposed to local clients. The underlying peer protocol is documented in the Event Graph network protocol.
Event content
Each chat event serializes the following Privmsg structure:
| Field | Type | Current meaning |
|---|---|---|
version | u8 | Format version; newly emitted messages currently use 0. |
msg_type | u8 | Message subtype; newly emitted messages currently use 0. |
channel | String | Channel name, or an encrypted dummy value for a DM. |
nick | String | Sender nickname, or an encrypted dummy value for a DM. |
msg | String | Message body or encoded ciphertext. |
Nicknames and channel names are limited to 24 bytes. Message bodies and topics are limited to 512 bytes. The IRC input buffer is limited to 1024 bytes.
Public channels
Without a configured channel secret, channel, nick, and msg are stored as
plaintext. Public channel history should be treated as public and persistent.
Encrypted channels
For a [channel."#name"] with a secret, DarkIRC constructs a
crypto_box::ChaChaBox from that 32-byte base58 secret. The channel name,
padded nickname, and message are encrypted independently and encoded with
base58. Every participant must configure the identical secret.
[channel."#project"]
secret = "BASE58_32_BYTE_SECRET"
topic = "Private project channel"
Generate a secret with darkirc --gen-channel-secret.
Direct messages
For a configured contact, DarkIRC encrypts dummy channel and nickname fields and encrypts the message with the contact ChaCha box. Contact configuration requires the contact’s public key and the local secret key:
[contact."Bob"]
dm_chacha_public = "BOBS_BASE58_PUBLIC_KEY"
my_dm_chacha_secret = "ALICES_BASE58_SECRET_KEY"
See encrypted direct messages for the two-party setup and security limitations.
Local IRC interface
DarkIRC currently handles these IRC commands:
ADMIN, CAP, INFO, JOIN, LIST, MODE, MOTD, NAMES, NICK,
PART, PASS, PING, PRIVMSG, REHASH, TOPIC, USER, and VERSION.
It provides the custom client capabilities no-history and no-autojoin.
NickServ commands are sent with PRIVMSG NickServ ... when RLN is enabled.
DarkIRC does not claim complete RFC 2812 compatibility; commands that depend
on conventional centralized IRC server state may be absent or have P2P-specific
semantics.
Reloadable configuration
REHASH reloads autojoin, [channel.*], and [contact.*] from the active
configuration file. P2P, datastore, history, archive, RPC, listener, password,
and RLN settings require a daemon restart.