Retro Bulletin Board Systems on atproto. Web app and TUI. lazy mirror of alyraffauf/atbbs atbbs.xyz
forums python tui atproto bbs
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

Python 69.3%
HTML 16.7%
TypeScript 11.2%
Dockerfile 0.8%
Just 0.5%
CSS 0.1%
Other 1.3%
81 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

Bulletin boards on the atmosphere.

Run a BBS from your own account. No server required. Users own their posts, communities migrate freely. Built on atproto.

Features#

  • Web app and TUI: Browse, post, and manage BBSes from your browser or terminal.
  • Built on atproto: All data lives in user repos as xyz.atboards records. No central database.
  • No server needed to run a BBS: A sysop just publishes records to their own PDS.
  • OAuth login: Sign in with your Bluesky handle or any atproto account.
  • Discover BBSes: The home screen shows BBSes from across the network.
  • Flat replies with quotes: Threads with chronological replies. Quote other replies inline.
  • File attachments: Attach files to threads and replies, stored as blobs in your repo.
  • Messages: See replies to your threads and quotes of your replies in one place.
  • Moderation: Sysops can ban users, hide posts, and manage their BBS.
  • Sysop tools: Create and edit your BBS, manage boards, post news, delete your BBS.
  • Self-hostable: One Docker command to run the web app.

Quick start#

Requires Python 3.14+ and uv.

uv tool install atbbs
atbbs                  # launch TUI
atbbs dial aly.codes   # dial a BBS directly
atbbs serve            # start the web server
atbbs --help           # see all options

Or from source:

git clone https://github.com/alyraffauf/atbbs.git
cd atbbs
uv sync
uv run atbbs

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.

Web app (from source)#

git clone https://github.com/alyraffauf/atbbs.git
cd atbbs
uv sync
just dev

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
  • 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