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.1.23 — Web ANSI editor: image tools, full TheDraw pack; new Admin → Add-ons page (October 2026)

The web ANSI editor gained two new tools: an Image → ANSI converter
(stretch-fits an uploaded photo to the grid, converting it to CP437
half-block/full-block art against the editor's own 16-color palette)
and a reference-image trace mode (loads a photo as a dimmable underlay
to draw over by hand, never touching the saved art). The TheDraw font
picker's font pack is no longer something a sysop has to track down
and point a setting at by hand — a "Download & Install Fonts" button
fetches a complete pack (1,241 files, over 5,000 font entries
including TheDraw's SETS/ mega-packs) from a GitHub Release asset in
one click. See docs/36-ansi-editor.md.

That same download-and-install mechanism is now generalized into a
new Admin → Add-ons page, covering both the font pack above and
the Enhanced Client overlay from v1.1.21 — each sourced from its own
configurable Release URL, with real working defaults so both buttons
function on a stock install with no configuration. Deliberately
lighter-weight than the full self-upgrade mechanism (no privilege
escalation, no service restart triggered automatically): an add-on
install only ever adds a small set of new files and never replaces
anything, with a plain restart reminder shown for the one case (the
Enhanced Client) where a restart is actually needed. See
docs/38-addons.md.

v1.1.22 — CI test fix, no functional change (October 2026)

A test added alongside v1.1.21's MRC sticky-DM feature
(tests/test_mrc_terminal_mentions.py) asserted a mention-count digit
sequence was absent from an entire rendered status-bar buffer that also
renders a live clock — a CI run during the 15:00-15:59 hour made the
clock's own "15:xx" trip the check, unrelated to mentions at all. The
assertion now scopes to the one screen element actually under test,
the same way every other test asserting against a captured multi-field
render already should.

v1.1.21 — MRC sticky DM; new optional Enhanced Client add-on (October 2026)

Terminal MRC chat gained /set pin <user> ("sticky DM"), matching a feature already on the web MRC client: once pinned, plain typed messages go to that user as a direct message instead of broadcasting to the room, with a status-line indicator showing it's active, until /set pin off. A one-off /t//msg to someone else still overrides it for that one message. Deliberately not saved across reconnects, matching the web client's own behavior exactly. See docs/27-mrc-chat.md.

Introduces the ANetBBS Enhanced Client: a new, optional browser-based terminal (Canvas + WebSocket) with real clickable menus and color ANSI art, running alongside every existing client (telnet/SSH/rlogin/PETSCII) rather than replacing any of them. Unlike every other feature, this does not ship inside the standard release tarball — it's a separate add-on download (built via tools/build_enhanced_client_addon.sh), since a sysop who doesn't want a browser client shouldn't need to carry its files. See docs/37-enhanced-client.md for the full writeup, including how to fetch and install it.

v1.1.20 — CI test fix, no functional change (September 2026)

v1.1.19's new ANetDRAW bundled-door tests checked for the real vendored binaries directly, which don't exist inside the Docker CI build (.dockerignore excludes the whole vendor/ tree from the image, same as doors/ — a pre-existing, deliberate limitation, see docs/22-containers.md). Those tests now skip gracefully in that environment instead of failing, the same way every other test in this repo that depends on an environment-specific asset already does.

v1.1.19 — ANetDRAW: sysop menu + web terminal fixes (September 2026)

Fixed two real gaps found testing v1.1.18's bundled ANetDRAW live:

  • The terminal Sysop Tools [D] ANetDRAW shortcut never actually appeared on a real install. It had only been added to a hardcoded fallback menu that's never reached once an install has migrated to the admin-editable Sysop Tools menu (which is every real install) — it's now part of that actual seeded menu data instead, backfilled automatically onto existing installs the same way every other addition to this menu already self-heals on upgrade.
  • ANetDRAW showed a black screen when launched from ANetBBS's web terminal specifically (terminal/SSH access worked correctly). Root cause: the door32.sys drop file format has no screen-size fields, so OpenDoors queries the terminal for its size and waits for a reply — which a real terminal answers, but the web terminal (xterm.js via a websocket relay) does not. Switched the bundled default to bbsdev.drp, which declares the screen size explicitly and needs no such query.

v1.1.18 — ANetDRAW is now bundled (September 2026)

ANetDRAW now ships inside ANetBBS's own release tarball — static Linux binaries for both x86-64 and Raspberry Pi (aarch64), with the correct one auto-selected for whatever the install is actually running on. A door_native Game row is seeded automatically on first boot, active and ready to play from /games/, the same way the bundled anetsims door already works — no manual setup needed, and the terminal Sysop Tools [D] ANetDRAW shortcut (added in v1.1.16) now appears immediately as a result. A sysop who wants a different build can still register their own copy under the same slug, same as before.

v1.1.17 — Web ANSI editor: blocks, file formats, TheDraw fonts (September 2026)

Continues the web ANSI editor's build-out toward ANetDRAW feature parity, on top of v1.1.16's new tools and file browser:

  • Block operations: swap foreground/background colors, replace one color with another, center a selection's content horizontally on the canvas, and insert/delete rows and columns — added alongside the existing flip/copy/paste.
  • More file formats: .bin and .xb (XBin) now both import and export, with real support for reading RLE-compressed XBin files; PCBoard @X, Renegade/Mystic pipe codes, and Synchronet Ctrl-A color codes are available as new export formats; a PNG download option was also added, reusing the existing renderer postcards already use.
  • TheDraw (.TDF) font support: a searchable font picker with a live banner-text preview, supporting all three real TDF font types (outline, with the full 19 outline styles; block; and color). No font pack ships with ANetBBS — point the new TDF_FONTS_DIR setting at one, the same way ANetDRAW's own font pack works.

See docs/36-ansi-editor.md for setup details (ANSI_EDITOR_BROWSE_DIRS, TDF_FONTS_DIR) and docs/14-door-games.md for the ANetDRAW terminal shortcut from v1.1.16.

v1.1.16 — ANetDRAW terminal shortcut; web ANSI editor tool/file upgrades (September 2026)

Added a direct terminal Sysop Tools shortcut for ANetDRAW, a separate ANSI/ASCII art editor project — once a sysop has installed it and registered it as a door_native Game (slug anetdraw), a one-key launch appears in the Sysop Tools menu, over any protocol. See docs/14-door-games.md's new worked example for setup.

Grew the built-in web ANSI editor's toolset toward feature parity with ANetDRAW: an ellipse tool, a shading brush (density builds up with repeated strokes), a colorize tool (recolors without touching the character underneath), half-block pixel mode (doubles vertical resolution using a cell's existing character/color pair), and a mirror-drawing mode. Also added a file browser (Open from disk / Save to disk) for real .ans files under configurable directories, alongside the existing art library — defaults to data/text and data/mods/txt, changeable via a new setting.

Also fixed a completeness gap in the editor's SAUCE metadata: the font-name field was always left blank even though the editor always knows the answer (everything it renders is CP437) — now correctly declares "IBM VGA", matching what other SAUCE-reading art tools expect.

v1.1.15 — anetbbs-monitor: fixed missing /usr/local/bin/ shortcut (September 2026)

Fixed a real gap that left anetbbs-monitor reporting "command not found" for every sysop, on both fresh installs and existing ones running update.sh: the internal list of console scripts that get a /usr/local/bin/ shortcut (so a sysop doesn't need the venv's own path on their shell's PATH) was missing anetbbs-monitor entirely — it was added after that list was last updated for anetbbs-cfg's equivalent gap. install.sh also never called this mechanism on a fresh install at all (only update.sh and the separate installer wizard did) and now does.

v1.1.14 — anetbbs-monitor: cfg-launch crash fix, visual redesign (September 2026)

Fixed a crash in anetbbs-monitor's one-key anetbbs-cfg launch (added in v1.1.12): it shelled out to a python -m anetbbs.cfg.app subprocess, which re-resolves Python's module search path from scratch in the child process and inserts the caller's current directory first — if that directory happens to look like an anetbbs path, the wrong thing can get imported instead of the real installed package, crashing with a confusing ImportError. It now calls the same code directly in the already-running process instead, which needs no new path resolution at all.

Gave anetbbs-monitor's dashboard a real visual pass: the activity stats panel is now a proper bordered box with today's figures picked out in color against the totals, a live/idle status indicator on the title bar, and colored hotkey letters in the footer.

v1.1.13 — sysop core-override loader disconnect-handling fix (September 2026)

Fixed a logging/reliability gap in the sysop core-override loader (data/mods/core/<name>.py, used for things like a customized login menu): a caller disconnecting mid-render was being mislabeled as a broken override and logged as an error with a full traceback, then a fallback attempt was made against the same already-dead connection. A normal disconnect during an override now propagates and unwinds the session cleanly, the same way it already does everywhere else in the codebase — a genuinely broken override file (missing function, syntax error, runtime exception unrelated to the connection) still degrades to the stock screen as before.

v1.1.12 — anetbbs-monitor dashboard rework (September 2026)

anetbbs-monitor is now a real dashboard, not just a live node list: a Today/Total activity stats panel (logons, connect time, new users, posts, e-mail, uploads, downloads), a scrollable log viewer for bbs.log that never loads the whole file into memory, one-key access to anetbbs-cfg without leaving the tool, a light/dark theme toggle (shared with anetbbs-cfg, so a choice made in one carries over to the other), and mouse support for selecting nodes and pressing hotkeys on terminals that support it. The live node list and kick functionality are unchanged.

Found and fixed a real gap while building the new stats panel: file_download has been a documented UserActivity event type for a while, but nothing anywhere actually logged one — the only download tracking that existed was a lifetime cumulative counter with no per-day breakdown. All three real download paths (web file downloads, shared file links, and terminal ZMODEM/YMODEM/XMODEM) now log it correctly.

v1.1.11 — DOOR32.SYS fix for more native door types; command-line dropfile-path guidance (September 2026)

Fixed DOOR32.SYS not working for some native door games: the fallback that tells a door to use stdin/stdout instead of a real socket handle (there is no real socket under this BBS's process-launch model) was only being applied to one of four door types that all share the exact same launch mechanism. It now applies to all four.

Documented a real gap found while investigating a different reported hang: passing a drop file's path on a door's command line requires the flag and the path to be two separate arguments (-D %f, with a space) — writing them as one combined argument (-D%f) causes the door's own command-line parser to silently ignore the flag entirely and fall back to guessing at a drop file instead, with no error of any kind. Added guidance directly in the affected admin form field, and in the code, so this doesn't cost the next person a multi-hour debugging session the way it did this time.

v1.1.10 — CI test fix, no functional change (September 2026)

Fixed a test left asserting the old behavior of the previous release's Send InterBBS Message picker fix, which broke the automated test suite (and with it, the Docker image build) without affecting the live BBS itself. No functional changes in this release.

v1.1.9 — Send InterBBS Message: Q/ESC now actually cancel (September 2026)

Fixed the "Send InterBBS Message" BBS/recipient pickers: pressing Q or ESC to back out silently landed in the manual user@host entry prompt instead of actually cancelling, because both outcomes were treated as the same thing internally. Manual entry now has its own dedicated M key at every step of the picker; Q and ESC genuinely cancel the whole send instead.