 |
Heidrun Server
|
 |
 |
[ Servers ] | 13 releases | Swift | GPL-2.0 | 1 stars on GitHub
|
 |
 |
 |
A Hotline server written in Swift.
A Swift 6, pure-SwiftNIO Hotline-protocol server. Pairs with the Heidrun macOS client (or any classic Hotline 1.x client). Runs on macOS and Linux from the same source.
- Hotline 1.x protocol: chat, plain + threaded news, private messages + private chats, kick, broadcast
- Persistent accounts (SQLite via GRDB) with PBKDF2-SHA256 password hashing
- Admin transactions:
createLogin / deleteLogin / openLogin / modifyLogin
- File system: list, info, download, upload, delete, create folder, rename, move, alias
- HTXF transfer side-channel (port + 1) with data-fork resume
- Optional TLS sibling listener pair (encrypts control + transfer end-to-end)
- Tracker UDP registration (Mobius-compatible, 5-min beacon)
- Server banner (transID 212) — JPEG / GIF / BMP / PICT / URL
- Per-file metadata (HFS type/creator + comments) persisted alongside accounts
- Idle-away supervisor — auto-flips the away flag after configurable inactivity
- Server-side chat commands —
/version, /who, /topic, /broadcast, /kick, /usershistory, /away, /me, …
- Structured logging via swift-log, graceful shutdown on SIGINT / SIGTERM
From the project's README.
Source code
|
 |
 |
 |
( All servers | Edit this page | Edit on GitHub )
|
 |
 |
 |
What's new: 1.5.1
|
 |
 |
Released 2026-09-16
|
 |
 |
 |
Fixed
- Single-file downloads always ship the flattened file object. The server
sent a bare data fork unless the Heidrun-only
resourceForkSupport flag was
negotiated, so classic clients (and Heidrun ≤ 1.4 against classic servers)
misread downloads. Fresh downloads, resumes (data-fork remainder + full
resource fork) and large files now all frame per the Hotline spec; the flag
is a no-op.
Notes
- Pins
heidrun-protocol 1.1.1 (FILP decode on the client side of the same fix).
|
 |
 |
 |
( Release page )
|
 |
 |
 |
News about Heidrun Server
|
 |
 |
1 post
|
 |
 |
 |
|
 |
 |
 |
( All news )
|
 |
 |
 |
1.4.0
|
 |
 |
Released 2026-06-21
|
 |
 |
 |
Added
-
Large-file transfers (> 4 GiB). Single-file and folder downloads/uploads
now exceed the old 4 GiB cap when the client negotiates CAPABILITY_LARGE_FILES:
64-bit sizes, the 24-byte HTXF handshake, 64-bit fork headers, and an 8-byte
per-item size prefix in folder streams. Legacy clients are unaffected
(32-bit, byte-identical).
-
UTF-8 text encoding. When a client negotiates CAPABILITY_TEXT_ENCODING,
the session uses UTF-8 for all strings (chat, nicknames, file/folder names,
comments, news, topic) — so emoji and non-Latin scripts work. The login
nickname is decoded UTF-8 when advertised in the login packet; the session
flips after the login reply. Non-negotiating clients stay on macOS Roman.
Fixed
- > 4 GiB framed downloads no longer crash. The download envelope is now
streamed in chunks (NIO's
ByteBuffer is bounded to 32-bit indices), and
fork lengths thread through as UInt64.
Notes
- Pins
heidrun-protocol 1.0.0 (graduated from the rc series).
- Known limitation: broadcasts are encoded once per the broadcasting session's
encoding — fully correct for an all-UTF-8 client population; a mixed
population with a legacy (non-UTF-8) client present can mis-render non-ASCII
broadcast content. Per-recipient broadcast encoding is a planned follow-up.
|
 |
 |
 |
( Release page )
|
 |
 |
 |
heidrun-server 1.1.0
|
 |
 |
Released 2026-06-20
|
 |
 |
 |
Adds a native way to watch server activity without docker logs.
Added
- Operational-log file sink — the server mirrors its operational log (the same lines it prints to stderr /
docker logs) into a rotating NDJSON file beside the database (<db_path>.oplog.ndjson), readable off the shared volume. stderr output is unchanged. Size-based rotation (default 10 MB × 5 archives). Config keys operational_log_enabled, operational_log_path, operational_log_max_bytes, operational_log_keep (env HEIDRUN_OP_LOG_*).
heidrun-admin log — a tail / tail -f for server activity that merges the structured audit events with the operational log into one timestamp-ordered stream. Flags: -f/--follow, --lines, --source audit|op|both, --account, --level, --type, --interval, --op-log-path, --json. Each line surfaces the client host:port and the tls flag as columns.
Changed
- The operational-log file sink is on by default, so a fresh start writes a new
<db_path>.oplog.ndjson on the data volume. Like docker logs, this file includes client IP addresses and retains them across rotated archives — independent of the audit log's log_ip_addresses setting (which stays off by default). Set operational_log_enabled = false (env HEIDRUN_OP_LOG_ENABLED=off) to disable; heidrun-admin log then streams audit events only. See docs/OPERATIONS.md.
Pins heidrun-protocol 1.0.0-rc20. Distribution: Docker + build-from-source.
|
 |
 |
 |
( Release page )
|
 |
 |
 |
Older releases
|
 |
 |
3 more
|
 |
 |
 |
- heidrun-server 1.0.0 (2026-06-19)
- heidrun-server 1.0.0-rc21 (2026-06-18)
- heidrun-server 1.0.0-rc19 (2026-06-07)
|
 |
 |
 |
( Back to the top )
|
 |
 |
|  |
 |
Links
|
 |
 |
Clients
|
 |
 |
Servers
|
 |
 |
Trackers
|
 |
 |
Bots
|
 |
 |
Misc
|
 |
|