Documentation
Getting Started
Daily Operations
Networks & Mail
Look & Feel
Doors & Games
Web Features
Development
Reference
Other

ANetBBS Changelog

Current release: v1.1.53 (October 2026). This file covers v1.0.0
onward, which follows standard semantic versioning — patch releases are
v1.0.1, v1.0.2, and so on. The full internal beta build-number
history (v1.0a1.1 through v1.0b2.239) that got the project to this
release is preserved in
CHANGELOG-beta.md.

v1.0.93 — Who's Online showed a raw game id/slug instead of the door's name (September 2026)

Fixed a bug where launching a door directly from a numbered/slug menu
item (rather than through the Game Center's category browser) showed
its raw id or slug in Who's Online instead of the door's actual name,
for the entire session.

v1.0.92 — Single-container Docker quick start was missing the MRC bridge config mount (September 2026)

Fixed the single-container Docker "quick start" instructions, which
never mounted the MRC chat bridge's own config file — it silently fell
back to placeholder BBS/sysop name values regardless of what was set
in .env. Also added a startup warning in that container if the file
still isn't mounted.

v1.0.91 — Door dropfiles now report the real terminal size (September 2026)

Fixed a bug where CHAIN.TXT and BBSDEV.DRP dropfiles always reported an
80x24 screen size regardless of the actual session's terminal
dimensions, so doors reading those formats never saw a wider/taller
terminal even when the rest of the session correctly used it.

v1.0.90 — IRC disconnect CPU/memory fix, SSH keepalive tuning (September 2026)

Fixed a bug where a dropped connection to the built-in IRC client could
spike CPU usage and grow memory indefinitely instead of ending the
session cleanly. Also loosened SSH keepalive timing to tolerate a
client that's intermittently unresponsive rather than fully gone, and
added clearer logging for why an SSH connection actually ended.

v1.0.89 — Reduced background monitoring overhead / quieter disconnect logging (September 2026)

Reduced how often the sysop dashboard's per-service monitoring spawns
external processes to check service status, cutting continuous system
overhead that could compound under load. Also quieted some redundant
error logging when a client disconnects at specific points during
session teardown.

v1.0.88 — SSH idle-session detection fix (September 2026)

Fixed a bug where a session idle for an extended period over SSH could
go permanently unresponsive if the underlying network connection
silently dropped, with no way to recover except a server restart.

v1.0.87 — Session-hang fix / Game Center prompt fix (September 2026)

Fixed a bug where a stalled client connection could leave a session
frozen indefinitely with no recovery. Also fixed the Game Center's
page-picker prompt showing page-navigation options on game lists that
only have one page.

v1.0.86 — MRC chat disconnect / door-cleanup fixes (September 2026)

Fixed a bug where a dropped MRC chat connection could spike CPU usage,
plus a related door-cleanup error when running multiple multiplexors
/ bridges.

v1.0.85 — Fixed the new "Auto-abort on Inactivity" checkbox being invisible for most door types (September 2026)

A real live bug, found right after v1.0.84 shipped: the new checkbox
was placed in the Admin → Games edit form right next to the (genuinely
dosemu2-only) FOSSIL driver setting — inside a per-game-type section
that the page's own JavaScript hides and disables for every game
type except dosemu2. A door_native game (confirmed live: a real
uMRC door) never showed the checkbox at all, and even checked, a
disabled input never submits with the form. Moved it into the form's
common section every game type shares, and added a regression test
that specifically checks the field's position in the rendered page
relative to the per-game-type sections — the value-round-trip tests
added in v1.0.84 POST form data directly and never would have caught
this, since the hide/disable behavior only matters to a real browser.

v1.0.84 — Per-door opt-out for the idle-timeout auto-abort (September 2026)

A real live report: a sysop sitting idle in a chat-type door (an MRC
client) got auto-kicked for inactivity — exactly the behavior every
OTHER door legitimately wants (an abandoned session shouldn't tie up a
node forever), but wrong for a door whose entire point is sitting
there reading/waiting without typing anything.

  • New "Auto-abort on Inactivity" toggle per door (Admin → Games,
    and anetbbs-cfg's Games section), on by default so every existing
    door keeps today's exact behavior. Turn it off for chat-type doors
    (MRC clients, IRC bridges, and similar) where idle time is normal.
  • Closed a pre-existing drift while touching this: anetbbs-cfg's
    drop-file-type choices were missing chain.txt, sfdoors.dat, and
    the new GAP-style DOOR.SYS option the web admin already offered.

v1.0.83 — Door dropfiles report real time budgets, plus a GAP-style DOOR.SYS option (September 2026)

A full, field-by-field audit of every dropfile format ANetBBS
generates, verified directly against the real OpenDoors source
(github.com/RealDeuce/OpenDoors), prompted by a live report of a door
saying "no time left" immediately on launch.

  • Every door dropfile now reports a real, per-user remaining-time
    value
    instead of a flat, hardcoded 60 minutes. Admins and accounts
    with no configured time budget get an effectively-unlimited value;
    accounts with a real UserTimeBudget get their actual remaining
    session/daily time, mirroring the same calculation the terminal
    session's own time-limit enforcement already uses. Previously every
    door launch reported exactly one hour left, regardless of the
    account's real access — confirmed live by a sysop testing as an
    admin account (which has no time limit at all) and still seeing
    every door report exactly 60 minutes, every time.
  • New GAP-style DOOR.SYS option (Admin → Games, Drop File Type).
    DOOR.SYS was never a single standardized format — the existing
    DOOR.SYS generator was built and verified against real TW2002
    validation warnings (confirmed live: LORD and TradeWars both launch
    correctly against it), but a different door reading DOOR.SYS via the
    other real convention read the existing generator's line 19 — the
    literal string "GR" in that convention — as its time-remaining
    field, and refused to launch with "no time left". Rather than rewrite
    the existing, working generator and risk breaking LORD/TradeWars, a
    second, independently-selectable DOOR.SYS generator now implements
    that other real convention, verified line-by-line against the actual
    OpenDoors source.
  • BBSDEV.DRP now reports a real logoff deadline. Its time-remaining
    field is a timestamp, not a relative minute count — this format
    accepted a minutes_remaining value but never actually used it,
    always leaving that field blank (a valid "no time limit" per spec,
    but not connected to the user's real access). It's now converted to
    a real deadline.
  • CHAIN.TXT, DORINFO1.DEF, DOOR32.SYS, and SFDOORS.DAT were all
    re-verified field-by-field against the real OpenDoors source during
    this audit and confirmed already correct — no changes needed.

v1.0.82 — door menu items now accept a Game slug, not just its id (September 2026)

A sysop building a custom Chat Systems menu item flagged that a
door action's action_args needed a numeric Game.id, which isn't
shown anywhere in either admin UI — only buried in the edit-page URL.
The slug, by contrast, is a labeled field right on that same page.
door items now accept either an id (existing menu items keep working
unchanged) or a slug — see docs/03-menus.md.

v1.0.81 — Fixed data/mods/text/menus/ art overrides for database-driven menus (September 2026)

A second real live bug, found right after v1.0.80: a sysop's existing
data/mods/text/menus/chat.ans custom art (and its 132-column
widescreen variant) stopped rendering once chat_systems became a
real, admin-editable menu. Root cause: the menu-engine's file-based art
lookup for database-driven menus only ever checked the older
data/text/menus/ location — data/mods/text/menus/, the documented,
update-safe location every other override in the project uses, was
never checked there at all. Fixed so it's checked first, same
precedence as everywhere else. Note the filename now matches the
menu's own name (chat_systems.ans/chat_systems132.ans), not the
old chat.ans — see
docs/35-mods-directory.md.

v1.0.80 — Fixed the new picker menus not backfilling on an upgraded install (September 2026)

A real live bug, confirmed on an upgraded Pi install right after
v1.0.79: the new chat_systems/game_center/sysop_tools menus (see
v1.0.79 below) never appeared in Admin → BBS Menus or anetbbs-cfg.
Root cause: the default-menu seeding function's upgrade path was only
ever designed to add new items to an already-existing menu (e.g. a
new hotkey added to main in a later release) — it had never needed
to handle a whole new top-level menu appearing in a release before,
so it silently skipped creating one on any install that already had
main seeded. A fresh install was unaffected (a different code path
always creates every default menu from scratch). Fixed so an upgrading
install creates any default menu that's missing entirely, not just new
items on ones that already exist.

v1.0.79 — Admin/anetbbs-cfg-editable Chat/Game Center/Sysop Tools menus, JAM message base export (September 2026)

  • Chat Systems, Game Center, and Sysop Tools are now admin-editable
    menus
    , the same way the main menu already was — add, remove,
    reorder, and relabel options from Admin → BBS Menus or
    anetbbs-cfg's BBS Menus section, with no code required, including
    adding a genuinely new option (any existing action type — exec,
    ansi, door, and so on) rather than just the bundled defaults.
    The list of available action types is now defined once and shared by
    both the web admin and anetbbs-cfg, closing a gap where the cfg
    tool's own list had already drifted and was missing several action
    types the web UI offered. data/mods/core/ remains available
    underneath for genuinely custom control flow a menu item can't
    express — see docs/35-mods-directory.md
    and docs/03-menus.md.
  • JAM message base export. A per-echo-area opt-in toggle
    regenerates a real .jhr/.jdt/.jdx JAM message base on a
    schedule, so classic JAM-API door games can read ANetBBS's echomail
    directly. Read-only and one-way — the SQL database stays the sole
    source of truth; nothing a door writes into the exported files feeds
    back in. See docs/34-jam-export.md.