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.8.1 · October 17, 2026 · current

Console polish

UI enhancements for the SysOp console. No new features.

Upgrading

Overlay-upload the release over your existing board; data/ is untouched.

1.8.0 · October 15, 2026

File areas

The first of the three big ones. Callers upload and download from the terminal, and you can stock a folder by FTP and scan it in. Anyone who runs message areas already knows how this works: categories, areas, access strings, a current area, and menu items that point at one area or ask the caller to pick. While a door runs, a slim bar above the terminal now says where the caller is. And the DOS drive learned how to make a file shorter.

File areas

The console

A bar above the terminal while a door runs

DOS doors

Fixes

For the record

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. The first visit climbs the schema to v17 and stocks a Files shelf with a General area and a FILES menu. File Areas lands on MAIN under F, or the first free digit, and the Dashboard tells you once which key it took. The file economies stay off until you switch them on, and so does every door's status line. The door bar needs nothing from you.

The whole of it is in the manual's new file areas chapter.

1.7.9 · September 25, 2026

A way back

The last release before the big ones. The next three majors bring file areas, multi-room chat and echomail, and they lean on what this one adds: a way to keep the database healthy and a way to put the whole board back if an upgrade goes wrong. The message list learns to fold threads, DOS door games and ANSI art draw every CP437 picture, and the console gets a light desk.

Backup and restore

A database toolkit

The message list

DOS doors and ANSI art

The console

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. The first visit adds the duties table (schema v15). Then open Database under The machine, set a backup path outside your web root, and take the first backup. Nothing is scheduled until you schedule it, and nothing is folded until a caller folds it.

A board with its own strings.ini hears once that the message list strings changed: list > columns moved the From column, and list > commands split into commands and the new navkeys row.

1.7.8 · September 21, 2026

The board knows when it is behind

ATDT arrives as a zip you upload by hand, which has always meant a board had no way to learn that a newer release exists. From 1.7.8 the console's version lamp answers that question, from one small file on the ATDT website, read once a day and carrying nothing about your board. A 14400 bps line speed, a console that can sit in the middle of a wide window, and two reports from the field ride along.

The console tells you when a new release is out

Two more things the console can do

Two from the field

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. No settings change and no schema step. The first nightly tick after the upgrade looks up the current release and the version lamp takes its color; until then it stays grey, as it was.

The release check is on by default. It switches off in Settings under Release check, and a board that never checks behaves exactly as 1.7.7 did. The centered console is off by default. A board speed set to something off the ladder now reads as 9600, which only matters to a board whose settings were edited by hand.

1.7.7 · September 17, 2026

The console wears the board's colors

1.7.7 is a look, not a feature. The SysOp console, the login page and the installer now wear the board's own palette: a dark work surface with an instrument rail down the left, four lamps for the board's live state, and four colors that each mean one thing everywhere. Every page keeps its forms, fields, confirmations and copy. Two field items ride along, and so does a pair of fixes for hand-drawn connect screens: the login line now follows the art instead of painting over it, and an MCI code can be told to stamp in place.

A dark console with an instrument rail

Every console page now sits on the board's own palette: a near-black work surface, panels one step lighter, and a rail down the left carrying the board's name, four lamps and the pages in five groups.

The lamps are the board's live state at a glance: nodes on the wire against the limit, the age of the last cron tick (amber once the pseudo-cron has had to step in, red past twenty minutes or when cron never ran, the same verdict the Dashboard's cron card gives and now shares), the carrier switch, and the version. The groups are The board (Dashboard, Users, Logs), What callers read (Message Areas, Community, Menus), How it looks (Themes, ANSI Editor, Gallery), Doors (Native Doors, and DOS Doors when the switch is on) and The machine (Settings, Import). Counts sit beside the pages that have them; pending applicants show in amber on Users, and a caller's page rings on Dashboard with a pulsing amber dot. The rail wears an amber edge while the board is offline.

Four lights, one meaning each

Cyan is the wire: links, and the one primary button on a form. Green is live: online, enabled, healthy. Amber is hold: pending, stale, waiting. Red is cut: destructive actions, failures, refusals.

Row actions in every table are text links in those colors instead of a row of small buttons, and the delete glyph is now the word the confirmation uses, delete or remove. Reorder arrows stay quiet until the pointer reaches them. The confirmations behind every destructive action are unchanged, and arrow glyphs no longer ride on link and button text.

Machine data in the machine's face

Node numbers, levels, counts, timestamps, tags, slugs and access strings are set in the monospace face; prose is set in Archivo, which ships with the board, so no outside font service is called. Fields are wells cut into the panel, and the focused one wears an amber ring.

The login page and the installer wear the same style. Settings is one column again, and the Native Doors and DOS Doors lists span the page above their drawers, so a door's row has room.

Connect screens, and MCI codes inside art

Two small things from the field

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. No settings change and no schema step. The console picks up the new look on the next page load, since the stylesheet link carries the version, so no cache clearing is needed. Native door admin panels render inside the new console unchanged. On the caller's side only the screens above moved: a theme's connect art, MCI codes inside art, and the code guide's own page.

1.7.6 · September 13, 2026

The maintenance shows itself

1.7.6 is about the first caller of the day. A DOS door's daily maintenance runs on that caller's machine, ahead of the game, and until now it ran in the dark. That caller now sees the run, and can answer it. The message area list gets the look the board deserved. And the native door games get their blinking cursor back, with matching releases of every door.

The first caller of the day watches the maintenance run

The programs that do a door's daily work are console programs: Usurper's /HMAINT writes to the machine's own screen and never to the modem, and TradeWars' EXTERN is the same. So the caller who drew the duty watched two gray lines for as long as the sweep took, half an hour on a populated Usurper world, with no way to see a "[Press a key]" waiting behind them, let alone answer it.

The caller's terminal now mirrors the machine's screen, in its own colors, a few times a second, from the boot until the maintenance program finishes. For that stretch the caller's keys go to the machine's keyboard, so a stray prompt is answered instead of stalling the run. When the maintenance ends the screen clears and the game starts exactly as it always did. This works for any door's maintenance program and needs no change to the door or its manifest; the console's Maintenance page, which always showed the screen, is unchanged.

One sweep at a time. The board hands the duty to one caller and waits for that caller's "done" report before handing it out again. That wait was ten minutes, and Usurper's sweep takes half an hour, so a second caller entering alone after ten minutes was handed the same sweep while the first was still running it. The wait is an hour now, longer than any real run, and it is only the backstop: a caller who leaves the door mid-sweep, or whose browser dies, frees the duty the moment their seat is gone.

The message area list

Native door games: the cursor is back

The blinking cursor and the single-key echo are on inside native door games, the way the board's own screens have had them since 1.7.4; between then and now every door had both off. The cursor sits where the door's output ended, so a door that ends its frame at its prompt gets it for free. A door that paints its own prompt marker and repaints only the cells it must turns both off for the whole door with one line in its manifest, "cursor": false, or at a single prompt with hotkey(false). The Door API has the details.

The door games have releases to match. Isle of Morrow 1.6.1 turns the cursor off, since its map would keep every echoed key. Star Merchant II 1.1.1 parks it at the prompt instead of under the status line. Lantern Road 1.0.1 gives every hint a trailing space so the cursor sits a cell clear of it. Usurper, Suzerain and Sweet Trade carry small touches of their own; HILO and the built-in Star Merchant needed nothing.

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. No settings change and no schema step. The first caller into a DOS door with a maintenance line after board midnight sees the sweep run; nothing else about the day's routine moves.

1.7.5 · September 7, 2026

The two lines become one

Development had drifted onto two branches that never met. One carried 1.7.1 through 1.7.3, the other carried 1.7.4, and each package was built from one line or the other. The upshot: 1.7.4 shipped without some of what came before it, and a board upgrading from 1.7.3 to 1.7.4 lost the logon tour on the way. That is on me.

1.7.5 merges the two lines. Everything from 1.7.1 through 1.7.4 is in this package, and the build now refuses to produce a release from a branch that is missing one. Whichever version you are on, this is the one to take.

If you are coming from 1.7.4

You get everything 1.7.1 through 1.7.3 added:

If you are coming from 1.7.3

You get everything in 1.7.4: MySQL boards get their doors back, the cursor at every prompt with single-key echo and no caret fringe, delete-line honored instead of swallowed as ANSI music, the "jit": "off" manifest switch for doors that park in a Turbo Pascal delay loop, and Usurper's care sheet.

Only one thing overlapped between the branches: both fixed the missing prompt cursor, and 1.7.4's version is the one that ships.

Four fixes found along the way

Upgrading

Overlay-upload the release over your existing board; data/ is untouched. A board coming from 1.7.4 receives the 1.7.2 database step on its first page hit, two small columns on the DOS door table, additive and safe to re-run. A board coming from 1.7.3 has that step already. Browsers pick up the refreshed client and boot floppy on their own through the version stamp.

1.7.4 · September 2, 2026

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 kinds of hand-built picker.

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.