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, the Finger responder (RFC 1288), the
MRC bridge, and (if you've opted into it) 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 generic exec for 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 12 built-in or sysop builds custom.
  • Customizable everything — every menu, hotkey, ANSI screen,
    external program, board category is data-driven, and the
    data/mods/ tree covers what isn't (bundled door scripts, a
    handful of built-in menu screens, even the pre-login menu's own
    logic) with changes that survive every future update. See
    35 — The mods directory.
  • 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.
  • Achievements — 10 built-in badges awarded automatically on
    login, shown on the Profile page and rolled up on the public Stats
    page. See the README's Achievements
    section
    .

Where to go next

Reference