Retro Bulletin Board Systems on atproto. Web app and TUI.
lazy mirror of [alyraffauf/atbbs](https://github.com/alyraffauf/atbbs) atbbs.xyz
forums python tui atproto bbs
Something went wrong. Try again.
TypeScript 57%
Python 41%
1%
HTML <1%
Nix <1%
CSS <1%
Just <1%
Shell <1%
Dockerfile <1%
JavaScript <1%
README.md
@bbs
Build a community from your existing account.
Tightly curated, fully portable, open by design.
Built on atproto.
Features #
- Web and terminal: Use it in your browser, dial in from a TUI, or connect via telnet.
- Serverless: Run a BBS straight from your atproto account. No hosting required.
- Replies and quotes: Flat threads with inline quoting.
- Attachments: Upload files to threads and replies.
- Messages: Know when someone replies to your thread or quotes you.
- Moderation: Ban users, hide posts, manage your boards.
- Discovery: Browse BBSes from across the network.
Install #
Requires Python 3.14+.
uv #
uv tool install atbbs
Homebrew #
brew install alyraffauf/tap/atbbs
Usage #
atbbs # launch TUI
atbbs dial aly.codes # dial a BBS directly
atbbs --help # see all options
Web app #
Docker #
docker run -d -p 8080:80 -e PUBLIC_URL=https://your-domain.com ghcr.io/alyraffauf/atbbs:latest
Or with Docker Compose:
git clone https://github.com/alyraffauf/atbbs.git
cd atbbs
PUBLIC_URL=https://your-domain.com docker compose up -d
From source #
git clone https://github.com/alyraffauf/atbbs.git
cd atbbs
cd web && npm install && cd ..
uv sync
just dev # run dev server with hot reload
just fmt # format code
just build # build for static deploy (set PUBLIC_URL)
just docker # build docker image
Architecture #
atbbs has no backend database for content. All BBS data lives in atproto repos:
- Sysop records:
xyz.atbbs.site,xyz.atbbs.board - Moderation records:
xyz.atbbs.ban,xyz.atbbs.hide - User records:
xyz.atbbs.post,xyz.atbbs.pin,xyz.atbbs.profile
The web app and TUI query existing network infrastructure:
- Slingshot — cached record and identity fetching
- Constellation — backlink index for discovering threads and replies
- Lightrail — BBS discovery via collection listing
Configuration #
On first run, atbbs generates:
secrets.json— app secret key and OAuth client signing keyatbbs.db— SQLite database for OAuth sessions
Web app (Docker): Set PUBLIC_URL to your domain for OAuth callbacks (required).
TUI: Data is stored in ~/.local/share/atbbs/ (Linux), ~/Library/Application Support/atbbs/ (macOS), or %APPDATA%/atbbs/ (Windows).