The client can stay while the system changes.
Parley accepts ordinary IRC clients, then connects independent instances through DNS discovery, well-known identity documents, signed HTTPS events, and automatic peering. A user can address another person as user@domain without installing a client plugin.[1]
The project is concrete. It has tagged releases, a published container image, protocol documentation, and a scripted two-instance demo. We pulled the official image at commit 52118a9 and confirmed that its binary reports version v0.5.0-18-g52118a9. The project's own README still calls it a working proof of concept that is not hardened.
Compatibility is a route, not a badge.
One protocol name hides several contracts.
The IRC front door handles client commands and capabilities. IRCv3's draft CHATHISTORY extension defines retrieval operations such as BEFORE, AFTER, and LATEST. It also depends on other capabilities, including batches, server timestamps, and message tags.[2]
Parley adds its own contracts behind that front door. DNS and well-known documents locate an instance and publish its key. Signed HTTP events move messages between instances. SQLite history, read markers, queues, and catch-up logic keep state across clients and outages.[1]
A green IRC login tests only the first contract. It says nothing about a remote identity, signature rejection, missed-message recovery, or read-marker convergence.
Old controls create a sharp test target.
A stable client protocol can reduce interface churn. It also gives an operator a clean differential test. Run the same client action against local and remote users, disconnect one peer, reconnect it, and compare the visible transcript with the signed event and stored record.
Parley's v0.5.0 notes document why this matters. A remote-user separator looked harmless, but strict clients interpreted the prefix as a server name. Messages still appeared while roster events disappeared. The release changed the separator and now advertises it through PARLEYSEP instead of asking clients to hard-code it.[3]
Review four routes before adoption.
- Client route: prove the commands and negotiated capabilities that your chosen client uses.
- Identity route: prove domain discovery, user lookup, key rotation, and failure behavior.
- Transport route: prove signature rejection, retry rules, duplicate handling, and peer-version mismatch.
- Continuity route: prove history order, offline catch-up, read markers, and state after restart.
Keep the proof-of-concept label until those routes pass in the environment that will carry real conversations.