Skip to content
Dialova

IRC Documentation · Advanced

Message tags: the metadata of IRC messages

Message tags add metadata before the rest of an IRC message. They can carry a time, an account, or a batch reference. An unknown tag can be ignored in the interface, but its format must be correctly parsed.

Dialova Team · Verified on

Reading the tags area #

Server frame with two tags
@time=2026-10-29T10:00:00.000Z;account=alice :Alice!u@cloak.example PRIVMSG #atelier :Bonjour

The area begins with @ and ends at the first unescaped space. Tags are separated by ;. Each key can have a value after =. Their order is insignificant, and keys are case-sensitive. Do not cut the message parameters before isolating this area.

Decode values only once #

Sequence on the threadDecoded value
\Semicolon
\sSpace
\\Backslash
\rCarriage Return
\nNewline

Escaping concerns the tag value, not the entire message text. Tag values are in UTF-8. An empty value and the absence of a value are equivalent in this mechanism; an interface should not invent a semantic difference.

Generic capability and specialized extensions #

message-tags announces support for the full format and enables, in particular, tags reserved for clients as well as TAGMSG. Extensions like server-time, account-tag, and batch also rely on the tag format, without requiring their negotiation to be confused with the generic capability.

Dummy client tag: no functional effect assumed
C: CAP REQ :message-tags
S: :irc.example CAP Alice ACK :message-tags
C: @+example.org/note=bonjour\sici TAGMSG #atelier

The + prefix denotes a client tag. It does not transform a client's assertion into information certified by the server. A server-announced account and arbitrary text sent by a participant must remain distinct.

Bounded metadata, not infinite messages #

Tags have a distinct size budget separate from the historical message portion. Their presence does not allow the PRIVMSG text to be considered unlimited. Unknown tags, invalid sequences, and repeated keys are handled according to the specification; avoid a parser that rejects any evolution or indefinitely retains unbounded data.

Sources & Verification

Examples use pseudonyms and fictional domains, except for explicitly documented connection points. Network-specific extensions and settings are noted in the text.