VivaHX
[ General News | Software | Archive | Discord ]
Heidrun protocol and CLI
[ Misc ] | 2 releases | Swift | GPL-2.0

Shared Hotline protocol code and the Heidrun command line client.

Hotline-protocol wire format, codecs, and clients for the [Heidrun][heidrun] Mac client and HeidrunServer. Pure Swift 6; the value layer has no Apple-only dependencies, so it builds on both macOS and Linux.

  • HeidrunCore — wire-level value types (PacketHeader, PacketObject, TransactionType, RemotePath, ConnectionSettings), codecs (PacketCodec, FileListEntryCodec, NewsBundleEntryCodec, …), the Network.framework-based HotlineNetworkClient, and HotlineTrackerClient. Apple-only files are #if canImport(Network)-gated so Linux builds skip them cleanly.
  • HeidrunNIOClient — cross-platform Hotline transport on SwiftNIO. Reuses HeidrunCore's codecs and EventBroadcaster.
  • heidrun — text-only Hotline CLI ("modern HX") built on HeidrunNIOClient.

From the project's README.

Source code

( All misc | Edit this page | Edit on GitHub )
What's new: 1.0.0
Released 2026-06-21

First stable release of the Heidrun Hotline protocol package.

Ships HeidrunCore (wire types + Network.framework client), HeidrunNIOClient (cross-platform SwiftNIO client), and the heidrun CLI.

Capabilities negotiated via DATA_CAPABILITIES (0x01F0):

  • Large-file transfers (>4 GiB) — 64-bit sizes, 24-byte HTXF handshake, 64-bit FFO fork headers; single-file and folder.
  • UTF-8 text encoding — opt-in UTF-8 for all strings (chat, names, news, …); macOS Roman otherwise.

Plus Heidrun extensions (0xE000 band): emoji avatars, resource-fork framed downloads. Self-signed TLS, tracker registration/listing, news, file transfers.

The wire format is additive and backward-compatible: every extension degrades gracefully against peers that don't negotiate it. See docs/PROTOCOL-EXTENSIONS.md.

( Release page )
News about Heidrun protocol and CLI
1 post
( All news )
heidrun-protocol 1.0.0-rc24
Released 2026-06-18

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.

( Release page )
 Links
- Home
- Hotline HQ Discord
- Software
- News Archive
- Server Tracker
- Hotline Wiki
 Clients
- Heidrun 1.5.1
- GtkHx v1.4.0
- Invigoration v2.3.2
- Hotline Navigator v0.3.0
- Mobius Client v0.3.1
 Servers
- Heidrun Server 1.5.1
- Mobius v0.23.1
- Lemoniscate v0.1.7
- Hotline Server 1.9.1
- Hotline Docker images
 Trackers
- Magnetron v0.4.0
- Argus
- hltracker (Visual Basic)
 Bots
- Heidrun Spirit 1.0.0
- Hotline Discord Bridge 1.0.0a
- Hotline2IRCRouter
 Misc
- Heidrun protocol and CLI 1.0.0
- Hotline Modern v0.9.1
- Caps
- CreateList
- hotline (Ruby gem)

 

Brought to you by BigRedH.com | HLWiki.com | stickytack.com