Decentralized bulletin boards on atproto.
Project description
@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).
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atbbs-1.2.2.tar.gz.
File metadata
- Download URL: atbbs-1.2.2.tar.gz
- Upload date:
- Size: 291.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44cb2212a2977373aaaa71e46fdd44efd0d01cd4e4d6331b339879b15801945d
|
|
| MD5 |
75f7f3b40e47a78b7e3cb5bcc15738cb
|
|
| BLAKE2b-256 |
c9e977b1e88061c90749726e58ad9378f6f2a5353e29d997391faacb0b5bf35c
|
File details
Details for the file atbbs-1.2.2-py3-none-any.whl.
File metadata
- Download URL: atbbs-1.2.2-py3-none-any.whl
- Upload date:
- Size: 71.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d880053ff057d53b1ef12aacb43fc77b182f4a790743b83d0022d7bdc1e8a9e0
|
|
| MD5 |
de0b78adc4569d79e7c8b020216539d6
|
|
| BLAKE2b-256 |
2f4da39e8ecfe5053b23ddf89ac6dd4f839dfe681afd99fe9e0ebb09f19bb6b7
|