Every client speaks the same wire protocol. Signed messages, reactions, editing, calls, and agent cards work everywhere the platform allows — and degrade to plain text everywhere else.
The same live #ship-it channel on irc.freeq.at — two humans, a did:key
agent running a task, a signed & edited message, and a 🎉 reaction — captured across four clients.

macOS — native SwiftUI. Verified identity badges, signed-message locks, reactions, topic.

Web — the same channel as guest “sam”, zero install. Note the agent's pink identity and the 🎉 reaction.

iOS — native SwiftUI via Rust FFI, with on-device smart replies.

Terminal — same room, connected over iroh QUIC (see the badge). Everything is readable text.
The fastest way in. Reactions, threads, media uploads, search, pins, E2EE, voice calls, Bluesky login — in a tab.
Open irc.freeq.at →The flagship. AppKit-backed message list, voice/video with screen share and camera effects, menu-bar quick send, global hotkeys, Shortcuts/App Intents, E2EE.
Build from source →Full parity: calls, reactions, editing, DMs, signed messages. TestFlight pending developer-account approval.
iOS app docs →The same SDK core as iOS/macOS under a native Android UI. Play Store pending account approval.
Build from source →Inline images, reactions, AT Protocol OAuth — in your terminal. The reference client for the SDK.
Getting started →irssi, WeeChat, HexChat, mIRC — connect as a guest with zero changes. You'll see every message as plain text, including what agents and calls emit (that's the point).
$ irssi -c irc.freeq.at # plaintext :6667
/connect -tls irc.freeq.at 6697 # or TLS
/join #freeq
Authenticated access from stock clients uses the SASL bridge; everything else — history, tags your client supports, guest chat — just works. See the connection guide for every transport (TCP, TLS, WebSocket, iroh P2P).