Replace c2s/s2c/s2s taxonomy with IRC-native structure: - schema/commands/ — IRC command schemas (PRIVMSG, NOTICE, JOIN, PART, QUIT, NICK, TOPIC, MODE, KICK, PING, PONG) - schema/numerics/ — IRC numeric reply codes (001-004, 322-323, 332, 353, 366, 372-376, 401, 403, 433, 442, 482) - schema/message.json — base envelope mapping IRC wire format to JSON Messages use 'command' field with IRC command names or 3-digit numeric codes. 'body' is a string (IRC trailing parameter), not object/array. 'from'/'to' map to IRC prefix and first parameter. Federation uses the same IRC commands (no custom RELAY/LINK/SYNC). Update README message format, command tables, and examples to match.
Message Schemas
JSON Schema definitions (draft 2020-12) for the chat protocol. Messages use IRC command names and numeric reply codes (RFC 1459/2812) encoded as JSON over HTTP.
Envelope
Every message is a JSON object with a command field. The format maps directly
to IRC wire format:
IRC: :nick PRIVMSG #channel :hello world
JSON: {"command": "PRIVMSG", "from": "nick", "to": "#channel", "body": "hello world"}
IRC: :server 353 nick = #channel :user1 @op1 +voice1
JSON: {"command": "353", "to": "nick", "params": ["=", "#channel"], "body": "user1 @op1 +voice1"}
Common fields (see message.json for full schema):
| Field | Type | Description |
|---|---|---|
id |
integer | Server-assigned ID (monotonically increasing) |
command |
string | IRC command or 3-digit numeric code |
from |
string | Source nick or server name (IRC prefix) |
to |
string | Target: #channel or nick |
params |
string[] | Middle parameters (mainly for numerics) |
body |
string | Trailing parameter (message text) |
ts |
string | ISO 8601 timestamp (server-assigned, not in raw IRC) |
meta |
object | Extensible metadata (not in raw IRC) |
Commands
IRC commands used for client↔server and server↔server communication.
| Command | File | RFC | Description |
|---|---|---|---|
PRIVMSG |
commands/PRIVMSG.json |
1459 §4.4.1 | Message to channel or user |
NOTICE |
commands/NOTICE.json |
1459 §4.4.2 | Notice (no auto-reply) |
JOIN |
commands/JOIN.json |
1459 §4.2.1 | Join a channel |
PART |
commands/PART.json |
1459 §4.2.2 | Leave a channel |
QUIT |
commands/QUIT.json |
1459 §4.1.6 | User disconnected |
NICK |
commands/NICK.json |
1459 §4.1.2 | Change nickname |
TOPIC |
commands/TOPIC.json |
1459 §4.2.4 | Get/set channel topic |
MODE |
commands/MODE.json |
1459 §4.2.3 | Set channel/user modes |
KICK |
commands/KICK.json |
1459 §4.2.8 | Kick user from channel |
PING |
commands/PING.json |
1459 §4.6.2 | Keepalive |
PONG |
commands/PONG.json |
1459 §4.6.3 | Keepalive response |
Numeric Replies
Three-digit codes for server responses, per IRC convention.
Success / Informational (0xx–3xx)
| Code | Name | File | Description |
|---|---|---|---|
001 |
RPL_WELCOME | numerics/001.json |
Welcome after session creation |
002 |
RPL_YOURHOST | numerics/002.json |
Server host info |
003 |
RPL_CREATED | numerics/003.json |
Server creation date |
004 |
RPL_MYINFO | numerics/004.json |
Server info and modes |
322 |
RPL_LIST | numerics/322.json |
Channel list entry |
323 |
RPL_LISTEND | numerics/323.json |
End of channel list |
332 |
RPL_TOPIC | numerics/332.json |
Channel topic |
353 |
RPL_NAMREPLY | numerics/353.json |
Channel member list |
366 |
RPL_ENDOFNAMES | numerics/366.json |
End of NAMES list |
372 |
RPL_MOTD | numerics/372.json |
MOTD line |
375 |
RPL_MOTDSTART | numerics/375.json |
Start of MOTD |
376 |
RPL_ENDOFMOTD | numerics/376.json |
End of MOTD |
Errors (4xx)
| Code | Name | File | Description |
|---|---|---|---|
401 |
ERR_NOSUCHNICK | numerics/401.json |
No such nick/channel |
403 |
ERR_NOSUCHCHANNEL | numerics/403.json |
No such channel |
433 |
ERR_NICKNAMEINUSE | numerics/433.json |
Nickname already in use |
442 |
ERR_NOTONCHANNEL | numerics/442.json |
Not on that channel |
482 |
ERR_CHANOPRIVSNEEDED | numerics/482.json |
Not channel operator |
Federation (S2S)
Server-to-server messages use the same command format. Federated servers relay
messages with an additional origin field in meta to track the source server.
The PING/PONG commands serve as inter-server keepalives. State sync after link
establishment uses a burst of JOIN, NICK, TOPIC, and MODE commands.