Retro Bulletin Board Systems on atproto. Web app and TUI. atbbs.xyz
python tui atproto bbs
Python 66.3%
TypeScript 15.8%
HTML 15.4%
Dockerfile 0.6%
Just 0.5%
CSS 0.1%
Other 1.2%
137 1 13

Clone this repository

https://tangled.org/aly.codes/atbbs https://tangled.org/did:plc:zntngpowgd6rorjt3haywj36/atbbs
git@tangled.org:aly.codes/atbbs git@tangled.org:did:plc:zntngpowgd6rorjt3haywj36/atbbs

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Build License: AGPL v3 Ko-fi

@bbs logo

@bbs

Bulletin boards on atproto. Web app and terminal client.

@bbs screenshot

Features#

  • Web and terminal: Use it in your browser or dial in from a TUI.
  • 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 serve            # start the web server
atbbs --help           # see all options

Web app#

Docker#

docker run -d -p 8000:8000 -v atbbs-data:/data -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
docker compose up -d

Visit http://localhost:8000.

From source#

Requires Node.js and just.

git clone https://github.com/alyraffauf/atbbs.git
cd atbbs
npm install
uv sync
just dev     # run dev server with hot reload
just fmt     # format code
just build   # build docker image

Architecture#

atbbs has no backend database for content. All BBS data lives in atproto repos:

  • Sysop records: xyz.atboards.site, xyz.atboards.board, xyz.atboards.news
  • Moderation records: xyz.atboards.ban, xyz.atboards.hide
  • User records: xyz.atboards.thread, xyz.atboards.reply

The web app and TUI query existing network infrastructure:

  • Slingshot — cached record and identity fetching
  • Constellation — backlink index for discovering threads and replies
  • UFOs — BBS discovery feed

Configuration#

On first run, atbbs generates:

  • secrets.json — app secret key and OAuth client signing key
  • atbbs.db — SQLite database for OAuth sessions

Web app (Docker): Set ATBBS_DATA_DIR to control where these are stored (default: /data). Set PUBLIC_URL to your domain for OAuth callbacks.

Web app (CLI): Use atbbs serve --data-dir and --public-url to configure. Defaults to the platform data directory and http://{host}:{port}.

TUI: Data is stored in ~/.local/share/atbbs/ (Linux), ~/Library/Application Support/atbbs/ (macOS), or %APPDATA%/atbbs/ (Windows).

License#

AGPL-3.0