ANetBBS Overview
ANetBBS is a modern reimagining of a 1990s bulletin board system.
Web-modern in the parts that should be (HTTPS, real-time chat, mobile
layout), and old-school in the parts that should be (telnet/SSH access,
ANSI art, FidoNet echomail, door games).
Architecture at a glance
┌───────────────────────┐
│ nginx (HTTPS / 80) │
└──────────┬─────────────┘
│
┌────────────────┬──────────┼───────────────┬──────────────────────┐
▼ ▼ ▼ ▼
anetbbs-web anetbbs.service (ONE process) anetbbs-binkp anetbbs-mrc-bridge
(Flask + telnet + ssh + rlogin + ftp, (asyncio (aiohttp /
eventlet all four in a single process listener) WebSocket)
native WSGI -- see deploy/anetbbs.service)
server, via
deploy/serve.py)
│ │ │ │
└──────────────────────────┴───────────┬────────────┴──────────────────┘
│
┌──────▼──────┐
│ SQLite │ ← single shared DB
│ /data/ │ all services agree on
│ anetbbs.db │ users, posts, sessions,
└──────────────┘ menus, ratios, etc.
Each service (not each protocol) runs separately — telnet, SSH,
rlogin, and FTP all live inside ONE process (anetbbs.service), while
the web app, the BinkP listener, and the MRC↔IRC bridge each run as
their own separate systemd unit. Run systemctl list-units --type=service
| grep anet to see exactly which unit owns what before reading a
journal — journalctl -u anetbbs covers telnet/SSH/rlogin/FTP but
never BinkP or the web app, a real mix-up worth avoiding. All units
read the same .env, use the same SQLite DB, and the BBS terminal
services sync their live presence into the same UserSession table
the web app uses, so the "who's online" widget shows everyone at once.
What it can do
- Message boards with categories / sub-conferences, threading,
reactions, drafts, last-read tracking. - Echomail (FidoNet-style) over BinkP and QWK packet networks.
Per-user QWK offline-reader workflow. - File areas with optional sysop moderation queue, ratios,
TIC processor for hatched files, shareable expiring links. - Door games — DOS via DOSBox bridge, native scripts, Synchronet
JS, Mystic Pascal Script, plus genericexecfor anything else. - Image galleries — browser-native image viewer at
/gallery/
with admin CRUD for adding collections and managing files. - Chat — multinode terminal chat between connected sessions,
IRC bridge, MRC bridge for inter-BBS chat, in-page shoutbox. - Real-time sysop control panel — service start/stop/restart
from the web, NodeSpy showing what every terminal user is doing. - Themes — pick from 9 built-in or sysop builds custom.
- Customizable everything — every menu, hotkey, ANSI screen,
external program, board category is data-driven. - PETSCII terminal support — dedicated plain-text rendering path
for real Commodore 64/128 hardware and PETSCII emulators, on its
own opt-in ports. Boards, echomail, PMs, files (incl. XMODEM
download), Number Guessing, and sysop-buildable custom menus. - Collaborative wiki at
/wiki/— markdown bodies,[[Page]]
cross-links, per-page revision history/diff/revert, full-text
search, 52 seeded reference pages. See the README's Wiki
section for the full feature list.
Where to go next
- 01 — Installing
- 01b — No-root quick start — a complete, first-class path for anyone without sudo/root access
- 02 — Sysop daily ops
- 03 — Menus and the data-driven engine
- 04 — ANSI screens (welcome / goodbye / custom)
- 05 — External programs (doors, weather, AI)
- 06 — Echomail / FidoNet
- 07 — File areas
- 08 — Themes + theming
- 09 — Multinode + NodeSpy
- 10 — Personal web pages
- 11 — Spam control (NUV, bot gate, IP bans, word filter)
- 12 — Upgrading
- 13 — Image galleries
- 14 — Door games
- 15 — Synchronet door compat
- 16 — RSS reader
- 17 — Development (extending ANetBBS)
- 20 — Federation directory (anetbbs.lst)
- 21 — Scheduled events (cron-style maintenance jobs)
- 22 — Running ANetBBS in Docker
- 23 — Webhooks (outbound event notifications)
- 24 — Game Center (built-in web games catalog)
- 25 — PETSCII (Commodore 64/128 terminal support)
- 26 — Synchronet door games (17 confirmed-working, download/setup guide)
- 27 — MRC chat (inter-BBS chat network, native vs Mystic connection backends)
- 28 —
anetbbs-cfg(terminal config tool, SSH/console) - 29 — Watch It Live (public no-login activity page)
- 30 — Postcards (shareable ANSI/PETSCII art)
- 31 — Auto-social-posting queue (Bluesky/Mastodon)
- 32 —
anetbbs-monitor(live node monitor, SSH/console) - 33 — Presence alerts (real-time "X just logged in/out")