
Parley: a federated chat network built on plain IRC
An open-source Go project called Parley lets anyone run a small chat instance for their own domain and federate with others over signed HTTPS, while ordinary IRC clients such as irssi, WeeChat and Textual connect without plugins.
A chat network with no centre
Parley is an open-source, federated chat network where every person or team runs a small instance for their own domain. Identities look like email addresses: [email protected] lives on foo.com, [email protected] on bar.com. Instances find each other through DNS and well-known identity documents and show the whole network to ordinary IRC clients.
Parley works with stock IRC clients such as irssi, WeeChat and Textual, with no plugins: Bob types /msg [email protected] hi and the message arrives even if the two instances have never heard of each other. The maintainers call it a working proof of concept, not hardened yet. It is written in Go and licensed under MIT.
How federation works
Discovery starts with DNS: a _parley._tcp SRV record points at the instance serving a domain, while https://chat.example.com/.well-known/parley/instance.json publishes its ed25519 key and inbox address. Every event is a JSON document with a detached ed25519 signature in headers, POSTed to the peer's /inbox, and receivers verify it against the key they discovered themselves, so federation is open. Message someone on a new domain and the two instances link up on their own and exchange the peers they know, forming a mesh without configuration.
Channels, history and moderation
#dev is global, replicated across every linked instance and owned by nobody, so it has no topic and no operators; ¬es is local, never leaves the instance and is the one place a topic exists. Since no one owns a global channel, nobody can be kicked out of one, so /ban becomes a block list by mask: /ban *!*@example.com blocks an entire instance. History lives on each instance in SQLite with a full-text index, searchable with parleyctl search, and a peer that reconnects after an outage pulls what it missed.
Running an instance, and what is missing
Deployment is a container from the prologic/parley image plus a domain; the data directory holds the identity key, databases and accounts. Accounts are created with parleyctl, from the admin page, the HTTP API or single sign-on. Version 0.6.0 added a limit of one message per second per account with a burst of 20, bots exempt. The README lists the gaps openly: keys are instance level only, there is no end-to-end encryption, channel modes and operators do not exist, there is no /nick, and a web chat client is deliberately absent.
SiTech — AI-powered web development
We build fast, modern websites and bring AI into real business workflows. Have a project or a question? We'd love to help.