An ALPHA bulletin board system (BBS) implementation for Reticulum networks.
RetiBBS allows users to communicate through message boards in a secure manner.
- User authentication and authorization with Reticulum
- Multiple message boards support
- User display names
- Admin privileges for board management
- Simple text-based command interface
- Ephemeral chat room support
A reference RetiBBS server implementation is hosted by me, at Kaizen.
Its identity hash is: b40428672a09c6c100ca82c10e5d945f
or you can wait for the server to announce itself. The server is connected to the Beleth RNS Hub, which in turn is connected to the Reticulum Testnet.
I will try to keep this reference implementation up to date, usually within a couple hours of any PR merges. This means that the reference server may be unavailable for a short time while the updates are applied.
- Clone this repository:
git clone https://github.com/kc1awv/RetiBBS.git
cd RetiBBS
It is strongly suggested to use this alpha software in its own Python virtual environment.
python -m venv .venv
source .venv/bin/activate
- Install Reticulum Network Stack, LXMF, Textual, and Flask:
pip install rns lxmf textual flask
- Install a WSGI server of your choice for the web server:
pip install gunicorn||uWSGI
cd server
python retibbs_server.py [OPTIONS]
--reticulum-config
: Path to alternative Reticulum config directory (optional)--identity-file
: Path to store/load server identity (default: server_identity.pem)--config-file
: Path to server config file (default: server_config.json)
If you wish to run the web server through a WSGI server, set the configuration options in the server config, and run the web server separately. For example, using gunicorn:
gunicorn --bind 0.0.0.0:5000 wsgi:retibbs_web
cd client
python retibbs_textual.py [OPTIONS]
--reticulum-config
: Path to alternative Reticulum config directory (optional)--identity-file
: Path to store/load client identity (optional, default: {RNS.Reticulum.storagepath}/retibbs_client_identity)--server
: Hexadecimal hash of the RetiBBS server to connect to (optional)
Main Menu:
? | help - Show help text and available commands
h | hello - Check authorization status
n | name <name> - Set your display name
d | destination <LXMF Address> - Set LXMF destination for board alerts
td | testdestination - Send a test LXMF message
b | boards - Switch to message boards area
c | chat - Switch to chat room area
lo | logout - Log out from the system
### Admin Commands
lu | listusers - List users in DB
a | admin <user_hash> - Grant admin rights to a user
Each area has its own set of commands. Use ?
or help
to get a list of commands for the area you are in.
{
"server_name": "changeme",
"announce_interval": 300,
"theme": "default",
"enable_web_server": false,
"use_wsgi": false
}
Included with the base code is a default theme in server/themes/default
that can be copied to a new folder in order to create a new 'theme' for the BBS. Simply:
cd server/themes
cp -r default/ new_theme/
cd new_theme
And edit the text files within. Make sure to update the server_config.json
file to point towards the new theme directory.
Rich Text support for colors and other styles is available from commit 26bc656 in the client.
Using Rich Text Markup in the theme files is probably the easiest way to utilize colors. For example:
[bold italic]Welcome to[/]
[bold red]
_ __ _
| |/ /__ _(_)_______ _ __
| ' // _` | |_ / _ \ '_ \
| . \ (_| | |/ / __/ | | |
|_|\_\__,_|_/___\___|_| |_| 改善
[/]
A Reference RetiBBS Server Instance
-----------------------------------
will produce this on the client:
Clients not up to date with at least commit 26bc656
will show the markup. If you see the markup code where colors are expected, please pull the latest commit.
The RetiBBS Server has an optional read-only web server for viewing message boards, and the messages within. To enable the web server, you must at least set the configuration option enable_web_server
to True
, and optionally enable WSGI operation (more stable this way) with the use_wsgi
configuration option set to True
.
Saved servers are stored in JSON format with server names and hashes.
Example:
{
"019e6ad5a0e47048413c9f7578e83393": {
"display_name": "Beleth Test",
"hash": "019e6ad5a0e47048413c9f7578e83393",
"timestamp": "2025-01-01 13:31:08"
}
}
The codebase is organized into these main components:
- Server (server): Handles client connections, message boards, and user management
- Client (client): Provides the user interface and server connection handling
RetiBBS utilizes Reticulum's built-in encryption and authentication mechanisms to ensure secure communication between clients and servers.
- Python 3.x
- Reticulum Network Stack
- LXMF
- Textual
- Rich