parley
Federated, decentralised chat that speaks plain IRC.
Spots Federated, decentralised chat that speaks plain IRC.

Parley is a chat network with no centre. Every person (or team) runs a small instance for their own domain. Instances find each other through DNS and well-known identity documents, exchange signed messages over HTTPS, and present the whole federated network to ordinary IRC clients such as irssi, WeeChat or Textual, with no plugins.
Identities look like email: [email protected] runs on foo.com, [email protected] on bar.com. Bob types /msg [email protected] hi and it just works, even if the two instances have never heard of each other before.
Status: working proof of concept. It demonstrates the design end to end and runs a real instance, but it is not hardened yet. See Limitations.
Status: working proof of concept. It demonstrates the design end to end and runs a real instance, but it is not hardened yet. See Limitations. It works with the client you already have Two instances (foo.com and bar.com), two stock irssi sessions. Alice connects to her instance; Bob connects to his:
Bob opens a query with /msg [email protected] and the two instances federate on the spot. Alice sees Bob as bob on bar.com; Bob sees Alice as alice on foo.com: Both join #lobby, a global channel replicated across their instances:
Ordinary IRC in front. Connect with any IRC client. Log in with PASS or SASL PLAIN using your password or an IRC token. IRCv3 server-time, message-tags, echo-message, multi-prefix and setname are offered to clients that want them, and TAGMSG relays client-only tags such as typing indicators, across the federation as well as between clients here. Tags on a message itself are kept, so a +reply is still a reply when it comes back out of history, and draft/multiline makes a pasted paragraph one message rather than eight.
Scrollback that follows you rather than your client. CHATHISTORY pages through channels and private messages alike, a join replays what you have not been shown, and draft/read-marker puts where you have read up to on the account, so marking a channel read on your phone clears it on your desktop and a client is told where to draw the line as soon as it joins.
Accounts you can manage while it runs. Accounts live in the instance's data directory, not in a config file. Create them with parleyctl, the admin page, the HTTP API, or let people arrive through single sign-on: any OpenID Connect provider, or identity headers from a reverse proxy. People mint IRC tokens for their clients on their settings page; bots are accounts with the bot role.
Discovery via DNS + WKID. _parley._tcp.<domain> SRV points at the instance; https://<host>/.well-known/parley/instance.json publishes its ed25519 public key and inbox; /.well-known/parley/<user>.json confirms a user exists. This mirrors how Salty IM finds people.
