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 ```bash uv tool install atbbs ``` ### Homebrew ```bash brew install alyraffauf/tap/atbbs ``` ## Usage ```bash 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 ```bash 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: ```bash git clone https://github.com/alyraffauf/atbbs.git cd atbbs docker compose up -d ``` Visit `http://localhost:8000`. ### From source Requires [Node.js](https://nodejs.org/) and [just](https://just.systems/). ```bash 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](https://slingshot.microcosm.blue/) — cached record and identity fetching - [Constellation](https://constellation.microcosm.blue/) — backlink index for discovering threads and replies - [UFOs](https://ufos.microcosm.blue/) — 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](LICENSE.md)