commit briefs
branches
readme
Wire is a text-based, line-oriented, UTF-8 chat protocol. It replaces IRC and Discord idioms with orthogonal primitives. It is not backwards compatible with IRC or any derivative.
The design goals, in order:
- Orthogonal - primitives compose, they don't overlap
- Transparent - no hidden state, all context is explicit
- Extensible - features are optional namespaces
- Efficient - one line per logical unit
- Human-legible - minimal clients are first-class citizens, raw wire lines are readable without tooling
The protocol (ELI5 explanation)
Every line follows the same shape:
VERB key=value key=value :optional payload
A few real examples:
MSG cid=01JXYZ456 mid=01JXYZ789 :hello world
REACT mid=01JXYZ789 eid=thumbsup
SUB rid=/wire.example.org/acme/general
ERR code=NOPERM :you are not allowed to do that
Tags are unordered. Unknown tags are silently ignored. No special-casing per verb. IDs are 26-char Crockford base32 ULIDs, user IDs are derived from Ed25519 public keys and are stable across servers.
Transport: TCP with mandatory TLS 1.3. Default port: 6789
Spec
The normative specification is docs/wire_spec-0.8.txt. The implementation notes with Go code examples are in docs/IMPL.md. When in doubt, check the spec.
3rd party Implementations:
Clients:
- cable, by sr.ht/~chld