ATDT Demo board online

Releases

Changelog

Every release, newest first. Upgrading is always the same: upload the new files over the old ones. The zip carries no data/ folder, so your board cannot be overwritten, and any database migration runs on the next page load. Skipped versions are fine: the migration is a ladder, and a board arriving from any older release climbs every rung in one go.

Get these in your inbox

Every entry on this page went out as an email first. Leave your address and the next one comes to you.

Release news only. Never sold, never shared. One click to leave. Past issues and RSS if you would rather not hand over an address at all.

1.7.4 · September 2, 2026 · current

MySQL boards get their doors back

A board running on MySQL or MariaDB crashed every door game on its second visit: Isle of Morrow died coming back through the gate, HILO lasted about three rounds, and the log filled with "Duplicate entry ... for key door_kv.PRIMARY". The report that cracked it came from the field with the diagnosis attached, and the diagnosis was right.

MySQL reports how many rows an UPDATE changed; SQLite reports how many it matched. When a door wrote a value the row already held, MySQL answered zero, ATDT read zero as "no such row", and the repair INSERT collided with the row that was there all along. SQLite boards never saw it, because SQLite never says zero for a row it found.

The door engine

The smaller items

Upgrading

Upload the release over your install, keeping your data/ folder. No schema change: the database ladder stays on its 1.7.0 rungs, no migration runs, and no settings change.

1.7.3 · August 28, 2026

A cursor at every prompt

A release about manners at the prompt and honesty on the wire. The tour a caller walks after the password is now yours to arrange, or silence, from the console; every prompt on the board finally has the blinking cursor a real terminal always kept there; and under the DOS door machinery, a season of running a full DOS board on this engine paid off five debts, from hangups that took twenty seconds to be noticed to a transfer flood that could crash a game on slow hosting. Overlay the files and you are done: no database changes this time at all.

Arrange the logon tour, or silence it

The cards between the password and the main menu, the welcome screen, unread bulletins, auto-message, rumor and last 10 callers, have always run in one fixed order. Settings grew The logon tour: give each stop a position or turn it off, and the board walks your arrangement. Turn everything off and a caller lands straight at the main menu, the way a minimalist board likes its mornings.

Stops with nothing to say still skip themselves, exactly as before. Two courtesies keep their seats whatever you arrange: the one-time email ask when an account has no address on file, and the "you have mail" check when letters are waiting. A board that never touches the setting runs the classic order, unchanged.

A cursor at every prompt

A caller filed it plainly: "the cursor doesn't blink at the prompt as it does on the main menu." The truth was starker. Outside a typed-input field the prompts had no cursor at all, and a main menu only showed one where the board's own art happened to paint a blinking cell. The terminal now keeps a classic blinking underscore at the resting position of every hotkey prompt: menus, pause lines, pagers, the whole logon tour.

It is drawn over the screen, never written into it, so art under the cursor survives untouched; typed fields keep the caret they already had, and a dead line shows nothing, as it should. Same behavior in every browser, Edge included.

The user list breathes

On a full page of the user list, the next-page prompt sat flush against the last caller listed. It now sits a blank line below, like the board's other pagers.

For the DOS doors: a hangup is heard the moment it happens

A DOS program that drops DTR, a door hanging up on its caller or a full board ending a call, used to go unnoticed: the line idled until the batch file behind the game got around to its exit marker, which can be a long silence. The engine now watches the modem-control line itself. The drop ends the call on the spot, with carrier-off mirrored back into the machine first, so the program sees the NO CARRIER it expects while it saves on its way out. The shipped test door grew a D command that drops DTR and proves the road end to end.

Big files stop flirting with death on slow hosts

While a big file was still transferring, every read that landed on it bought its own duplicate wire read as insurance: correct bytes, fatal arithmetic. A program loading its overlay file issues hundreds of small sequential reads, and each one queued a wasted duplicate on the single request lane until the transfer itself was starving behind them; past DOS's half-second patience, the game crashed. Reads near the transfer's frontier now simply ride it, and only a genuine seek far into untransferred territory buys a targeted read, one at a time. Nothing got slower; the flood is gone.

Smaller door-engine notes

Upgrading

Overlay-upload the release over your existing board; data/ is untouched and there are no database changes in this release. The refreshed boot floppy and client ride the version stamp, so browsers pick them up on their own. Existing door manifests keep working unchanged; the new path globs are purely additive.

1.7.2 · August 25, 2026

Daily maintenance for DOS doors

1.7.2 brings daily maintenance to DOS doors and repairs the way a door's first entry of the day treated data kept in subdirectories. Upgrading from 1.7.0 or 1.7.1 is a plain overlay upload.

New: daily maintenance for DOS doors

Some doors expect a maintenance program to run once a day. TradeWars 2002's EXTERN is not optional; Usurper's daily sweep matters too. A door's dosdoor.json may now name it:

"maintenance": "EXTERN MULTITASK=NO"

The board cannot run DOS itself, so the clock arms the duty and a machine runs it, the way 1993 did it: the first caller entering the door alone after board midnight runs the command on the way in, sees it happen, and the game starts when it ends. The board stamps the day the moment the run completes, so exactly one entry a day pays the toll, and a run abandoned by a closed tab is retried by the next solo entry.

The TradeWars 2002 package on this site now ships the field, so EXTERN stops being a SysOp chore.

Bug fixes

Upgrading

Overlay-upload the release over your existing board; the data/ folder is untouched. The first page hit adds two small columns to the DOS door table (the maintenance day and its lease); the step is additive and safe to re-run. To give an installed door a daily command, add the maintenance line to its dosdoor.json and press Scan on the DOS Doors page.

1.7.1 · August 24, 2026

A repair release for the DOS doors

1.7.1 fixes the DOS door system that shipped in 1.7.0. If your board runs 1.7.0, upgrade: the bug it fixes hits every caller whose browser has already visited a door once.

Bug fixes

Upgrading

Overlay-upload the release over your existing board; the data/ folder is untouched and there is no schema change. Callers pick the fix up on their next page load. Nobody needs to clear caches or site data: the fixed scripts carry new version stamps, and the files a browser remembered are checked against the board before they are trusted.

1.7.0 · August 24, 2026

The DOS doors run, and your old board comes with you

The headline: real DOS doors, in the caller's browser

The games that made a BBS a place to be, LORD and its whole generation, were DOS programs. Every modern way to run them parks a telnet server next to a DOSBox install and asks the SysOp to babysit both. ATDT 1.7.0 does it the ATDT way instead: nothing DOS runs on the server. When a caller opens a DOS door, their own browser boots a small FreeDOS machine in about two seconds, the door's screen rides the caller's terminal like any other screen, and the game's files live on the board, served one read and one write at a time. The caller needs a current browser and nothing else. The server needs PHP, exactly as before.

The full chapter covers installation and the console page. Ready-made packages for The Pit, Arrowbridge II, Drakeville and TradeWars 2002 are on the site, along with known quirks for LORD and a full guide for Usurper.

The second headline: message import from legacy BBS systems

No other BBS package offers a migration path in. Every one of them assumes you are starting from nothing or already running their software. ATDT 1.7.0 makes ATDT the destination: a new console page, Import, reads the message history out of another board and brings it into ATDT areas, with the areas, authors, dates, recipients and reply threads intact.

Tested at 60,000 messages across two formats, into both new and existing areas, with the undo verified. The full chapter is here.

Smaller improvements

Bug fixes

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. The first page hit climbs the schema ladder: new tables for import batches and staging, new tables for DOS doors, sessions and locks, all additive only and safe to re-run. If you keep theme copies, the console greets you once with the new-strings notice.

1.6.5 · August 17, 2026

Rooms of their own

This release is about giving parts of your board their own message life. A menu item can now point a message command at a specific board; a menu can keep its own current area, separate from the rest of the system; and an area can step out of the general list without giving up anything else. Build a door-game lounge with its own boards, a language-split board with parallel message trees, a private co-SysOp wing, or an area picker drawn entirely in your own ANSI: all of it from the menu designer, no code. And if you set none of it up, nothing anywhere changes. Every new field ships blank, and blank means exactly the board you already run.

Point a menu item at a board

The Read, Post and New scan items grew an optional Area field in the menu designer. Set it and that one item acts on that one board, for that press only. The caller's current area does not move, on that menu or anywhere else; reply, quote and everything inside the reader behave exactly as they always have.

The classic use is a game lounge: a menu whose "Strategy board" reads straight into SUZ_STRAT, a "Chronicles" item beside it, a post item, and the door itself. Players talk shop without ever leaving the lounge or losing their place on the rest of the board.

Targeting never bypasses access: an item aimed at a board the caller cannot read shows the standard denial. An item aimed at a tag that no longer exists tells the caller the board is gone and logs a warning naming the menu, the key and the tag. A mis-typed item is a thirty-second fix, not a mystery.

Hand-built area lists, two flavors

Two new MODULE keys let a menu select the current area directly, and between them they cover both shapes a hand-built picker can take.

Both keys require an area in the designer, both respect Read ACS like everything else, and after either press the menu repaints in full, so a template showing %AN or %MC names the new area immediately. With the filtered picker below, that makes three interchangeable doors to the same mechanism: the system picker that returns, the combined menu that stays, and your own picker that returns.

Sections with their own current area

Every menu's form gained a collapsed Area scope (advanced) section. Leave it alone and the menu behaves as it always has. Give it a short name, such as DE or LOUNGE, and that menu keeps its own current message area, remembered per caller between calls, completely separate from the board's. Menus that share a name share the area; a Default area picks where callers start, and their choice sticks per section.

A language-split board finally reads like one: a German section and an English section, each with its own boards and its own sense of "where I was reading," while the stock message menu carries on untouched. Inside a scoped menu, %AN and %MC in a template speak for the section's own area, so "Area: %AN" on a section menu names the right board.

A picker for one shelf

An Area change item can name a category: the picker then shows just that shelf. Boards you unlisted still show inside it; you hand-picked that list, after all. A category name that no longer matches falls back to the full list and logs one warning.

Unlisted areas

Areas grew a Listed checkbox, checked by default. Uncheck it and the area leaves the general area-change list, and changes nothing else. It still counts, still opens from any item that names it, and still reports to the global new scan for anyone who passes its Read ACS.

Unlisted is discovery, not security. A public-but-unlisted lounge will announce itself in a caller's new scan. If you want a section genuinely private, gate it with Read ACS; the edit form nudges you about exactly this when an unlisted area is readable by everyone.

Tidy the public room

Every public chat line on the console's live wire now carries a delete link. One click and a confirm removes that line from the room for good, with an audit line in the SysOp log recording who said what. Pages and private SysOp traffic are working records; the link never appears on them, and the guard refuses them outright.

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. The first page hit climbs the schema ladder:

1.6.1 · August 13, 2026

The bell follows you

A small release with a doorman's sensibilities: the application desk learns which names are not welcome, a page rings the SysOp's own pocket instead of an empty console, and the message boards stop marking things read that nobody actually read.

Prohibited names at the application desk

Settings › Access grew a prohibited-words list, one word per line, with sysop already on it. A new caller's handle is refused if it contains a listed word anywhere, in any case: put test on the list and Test, Testicle and Youtestit are all turned away at the door. Nothing is retroactive; the list is read only when a new application is typed, and every existing account keeps its name.

An applicant who tries three prohibited names in a row is done applying: the board shows them the address they are calling from, notes that address in the security log, and drops the line. Any clean attempt in between, even a malformed or taken one, resets the count; the rule is three in a row, exactly as it reads. The refusal and the goodbye are theme strings like everything else the caller sees (nua.banned_handle, banned_bye, banned_ip), so a themed board can word its own bouncer.

Pages reach your pocket

A caller paging the SysOp has always lit the console, but nobody sits in the console all day. Settings grew a SysOp notifications card: enable it on a browser, desktop or phone, and every page arrives as a real system push notification naming who is calling, which node, and the reason they gave, whether or not the console is open anywhere. Tap it and the console comes to you, ready to answer on their line.

Browsers require HTTPS for push. Boards on plain HTTP keep the console bell, and the card says so instead of failing quietly.

Only what you read is read

Message lists run newest-first, so a caller often opens a fresh reply before an older message they have not seen. The read pointer used to leap straight over that older message and silently mark it read: the reply was read, the message below it never was, and the new-scan walked on by. The bookkeeping is honest now, and each message is marked read when it is actually on the screen. The unread markers and the new-scan keep pointing at what was skipped, and the pointer catches up on its own the moment the gap is walked. Nothing changes in how reading feels; only the ledger stopped rounding up.

A quiet week no longer empties the chat room

The housekeeping cron used to sweep every chat row older than seven days, the public room included, so a board with a slow week woke up to a blank room. The room is the board's living room: it now keeps its newest 1,000 lines however old they are, and age never empties it; only the overflow beyond the cap is swept. Transient wire traffic (page requests, private SysOp lines and their hang-up markers) still expires after a week, exactly as it should.

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. The first page hit climbs the schema ladder: two small tables appear (individual read marks, and the SysOp's push subscriptions), the prohibited-words list seeds itself with sysop (only when the setting has never existed, so a board that deliberately emptied the list stays empty), and theme copies get the one-time notice about the three new application-desk strings. The shipped default theme already carries them.

1.6.0 · August 10, 2026

Themes that travel, and a board that minds the line

Everything that changed from 1.5.5 to 1.6.0, in one place.

New features

Bug fixes

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. The first page hit climbs the schema ladder (sessions gain idle-tracking and hang-up columns). If you keep theme copies, the console greets you once with the new-strings notice described above.

1.5.5 · August 4, 2026

The editor release

Big ANSI letters without drawing them by hand, a recolor tool, visual move and copy, a gallery you can browse, and doors that can post their own announcements to a message board.

New features

Bug fixes

Upgrading

Overlay-upload the release over your existing board; data/ is untouched and there is no schema change. data/fonts/ appears the first time a font is saved.

1.5.0 · August 1, 2026

The mail release

ATDT can now, entirely at your option, send email: password-reset links for callers and private letters to the SysOp. Switched off (the default), the board keeps making no outside connections at all, exactly as before.

New features

Bug fixes

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. The first page hit migrates the database automatically (new per-account email, bulletin bookmark, and reset fields). Existing callers' bulletin marks start at the current top, so nobody is greeted by years of old bulletins. The "Allow pipe colors in caller content" switch now ships on for brand-new installs; an upgrading board keeps its earlier choice. All mail features stay dormant until you configure and enable outgoing mail in Settings.

1.1.1 · July 28, 2026

MCI variables everywhere, including inside the art

New features

Bug fixes

1.1.0 · July 28, 2026

Copy and paste, an art gallery, and doors that behave like everything else

New features

Bug fixes

Upgrading

Overlay-upload the release over your existing board. data/ is untouched and the first page hit migrates everything, including from 1.0.0 or any earlier schema. Skipped versions climb every rung of the ladder in one go, under a lock, and the new steps are safe to re-run.

1.0.0 · July 25, 2026

Initial release

The whole board, finished and documented. Everything below shipped in the box.