Repository navigation
Releases: franckjej/heidrun-server
Release list
1.5.2
Added
/news clear flat|threaded|allchat command wipes news on the live server (admin,deleteNewsBundles); audited asnews_reset.
Changed
- Plain-news posts end with a blank line and an underscore divider instead of dashes.
heidrun-admin news resetnotes that a running server overwrites it.
1.5.1
Fixed
- Single-file downloads always ship the flattened file object. The server
sent a bare data fork unless the Heidrun-onlyresourceForkSupportflag 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-protocol1.1.1 (FILP decode on the client side of the same fix).
1.5.0
Added
- Drop boxes and upload folders. Folders named
…upload…/…drop box…
now carry their classic Hotline roles.viewDropBoxesgates every read and
mutation inside a drop box;uploadAnywherelimits uploads to upload
folders and drop boxes. Existing accounts with Upload Files but not
Upload Anywhere lose upload access to plain folders — see
docs/OPERATIONS.md→ "Drop boxes and upload folders".
Changed
- Docker image: builder is
swift:6.3.3-noble; binaries link the Swift
stdlib statically and run on plainubuntu:noble, which isapt-get upgraded at build time. - Makefile:
make build / test / lint / test-linux / up / down / logs,
plusmake refresh— rebuilds the image without the layer cache so the OS
packages inside it are current. Meant for a weekly cron
(docs/OPERATIONS.md).
Notes
- Pins
heidrun-protocol1.1.0 (addsFolderRole).
1.4.0
Added
- Large-file transfers (> 4 GiB). Single-file and folder downloads/uploads
now exceed the old 4 GiB cap when the client negotiatesCAPABILITY_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'sByteBufferis bounded to 32-bit indices), and
fork lengths thread through asUInt64.
Notes
- Pins
heidrun-protocol1.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.
heidrun-server 1.3.0
Added
heidrun-admin log --tableACCOUNT + ADMIN columns — the login the user signed on with, and the account's admin flag (true/false). The server now logslogin+isAdminon the per-transactiondispatchline (masked pre-login), so both columns populate on every row.-nshort alias for--linesonheidrun-admin log(tail-style).
Fixed
- Connection-shutdown race.
stop()now closes live connections and waits for their per-connection session tasks to finish before tearing down the event-loop group. This eliminates the NIO "Cannot schedule tasks on an EventLoop that has already shut down" errors (and the warned-of future forced crash), and makes the SIGTERM shutdown path clean.
Pins heidrun-protocol 1.0.0-rc20. Distribution: Docker + build-from-source.
heidrun-server 1.2.1
Added
heidrun-admin log --date— include the full date (yyyy-MM-dd HH:mm:ss) in log timestamps, in both the line and--tableviews; without the flag the timestamp is time-of-day only as before.
Pins heidrun-protocol 1.0.0-rc20. Distribution: Docker + build-from-source.
heidrun-server 1.2.0
Adds a tabular view for heidrun-admin log.
Added
heidrun-admin log --table— a fixed-width tabular output mode for the unified log stream, with one column per field (TIME · S · LVL · HOST · NICK · TLS · TRANS · SOCK · TASK · FLDS · ACTION) instead of one free-form line per record. TheACTIONcolumn resolves a per-transactiondispatchrow's numeric transaction id to a name (a row withTRANS107 showslogin); other rows show their message or audit description. The protocol columns (TRANS/SOCK/TASK/FLDS) ride the debug-leveldispatchline — pass--level debugto populate them. Mutually exclusive with--json.
Pins heidrun-protocol 1.0.0-rc20. Distribution: Docker + build-from-source.
heidrun-server 1.1.0
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 keysoperational_log_enabled,operational_log_path,operational_log_max_bytes,operational_log_keep(envHEIDRUN_OP_LOG_*). heidrun-admin log— atail/tail -ffor 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 clienthost:portand thetlsflag as columns.
Changed
- The operational-log file sink is on by default, so a fresh start writes a new
<db_path>.oplog.ndjsonon the data volume. Likedocker logs, this file includes client IP addresses and retains them across rotated archives — independent of the audit log'slog_ip_addressessetting (which stays off by default). Setoperational_log_enabled = false(envHEIDRUN_OP_LOG_ENABLED=off) to disable;heidrun-admin logthen streams audit events only. Seedocs/OPERATIONS.md.
Pins heidrun-protocol 1.0.0-rc20. Distribution: Docker + build-from-source.
heidrun-server 1.0.0-rc24
heidrun-admin
db infonow reports the file vault instead of(ephemeral temp). When nothing sets a files root, it falls back to thefilesdirectory next to the accounts DB if it exists (e.g._data/files) — display convenience only; the server's own resolution is unchanged, and no admin command touches the vault.
(rc23 added: --db derives the audit/news siblings, and no-flags config resolution /etc/heidrun/heidrun-admin.toml → ./heidrun-admin.toml → ./_data/heidrun.sqlite.)
Protocol pin unchanged (heidrun-protocol 1.0.0-rc20).
heidrun-server 1.0.0-rc23
heidrun-admin (native host)
Quality-of-life fixes for running heidrun-admin natively against a bind-mounted deployment:
--dbnow derives the audit/news siblings (<db>.audit.sqlite,<db>.news.json), likeHEIDRUN_DB_PATH. Previously--dbonly set the accounts path, soaudit/newsreported no data even though the files existed.- Runs with no flags. With no
--config/--db(or env), it resolves data in order:/etc/heidrun/heidrun-admin.toml→./heidrun-admin.toml→./_data/heidrun.sqlite(the bind-mount convention). A typical deployment can just runsudo heidrun-admin audit …. Shipsheidrun-admin.example.toml.
(rc22 already added: drop-to-DB-owner when run as root, the --static-swift-stdlib / libsqlite3-dev build prerequisites, the threaded-news reply fix, and the NIOSSL warning fix.)
Protocol pin unchanged (heidrun-protocol 1.0.0-rc20). Distribution remains Docker + build-from-source.