First tagged GitHub release for heidrun-protocol. Notes span the recent admin line (rc22 → rc24); the headline is over-the-wire administration — the cross-platform NIO client and the heidrun CLI both gained full admin powers.
The package ships three products, pure Swift 6, macOS + Linux:
HeidrunCore — Hotline wire format, value types, codecs, the Network.framework HotlineNetworkClient, and the tracker client.
HeidrunNIOClient — cross-platform Hotline transport on SwiftNIO.
heidrun — text-only Hotline CLI ("modern HX") built on HeidrunNIOClient.
🔑 Over-the-wire admin on HeidrunNIOClient (rc22)
The SwiftNIO client gained the six account-admin transactions, byte-for-byte mirroring the Network.framework client: createLogin, deleteLogin, openLogin, modifyLogin, kick (with optional ban), and broadcast. This is what unblocks cross-platform (Linux) administration. Wire quirks honoured: openLogin (TX 352) sends the login plain while every other auth/admin transaction XOR-obfuscates it; modifyLogin password is tri-state (nil omits, "" sends a single 0x00, non-empty obfuscates); privilege bytes match the classic bitfield.
🖥 heidrun CLI admin surface (rc23)
The CLI exposes those operations two ways, sharing one set of tested argument parsers:
REPL slash commands (need the matching server privileges):
/newuser <login> <pass> <nick> [priv,…]
/getuser <login>
/moduser <login> <nick> [priv,…] [pass]
/deluser <login>
/kick <socket> [ban]
/broadcast <message>
One-shot scripting flags — connect, do one operation, exit with a status code (non-zero on a usage or server error), no REPL:
heidrun <host> -l admin -p <pw> --create-user bob secret Bob readChat,sendChat
heidrun <host> -l admin -p <pw> --modify-user bob Bobby readChat --user-password newpass
heidrun <host> -l admin -p <pw> --kick 5 --ban
heidrun <host> -l admin -p <pw> --broadcast "back in 5"
heidrun <host> -l admin -p <pw> --delete-user bob
Privileges are comma-separated names (e.g. readChat,sendChat,postNews), backed by a new public PrivilegeNames name↔bit helper in HeidrunCore (40 named bits).
🆕 Discoverability + versioning (rc24)
/version (/ver) — prints the CLI version and the negotiated protocol versions (client advertises vN, server reports vN). //version still asks the server for its own version string, so nothing is lost.
/privs (/privileges) — lists the valid privilege names in the REPL, so you don't have to read source or crib off /getuser.
heidrun --version and heidrun --list-privileges — both work offline (no <server> argument needed).
- Version source of truth:
HeidrunProtocolInfo.version in HeidrunCore.
Pinning
Pre-release tags compare lexically, so pin with exact:, never from::
.package(url: "https://github.com/franckjej/heidrun-protocol.git", exact: "1.0.0-rc24")
GPL-2.0. No breaking API changes — additive throughout.