Don't know what a BBS is? Never made a Python virtual environment? Don't know the difference between serial, TCP, config.ini, systemd, or a node ID? This walkthrough assumes none of that knowledge.
You still need a working Meshtastic radio/node. TC²-BBS runs on a separate computer such as a Raspberry Pi or Linux PC and talks to that Meshtastic node over USB/serial or, for compatible ESP32 devices, over TCP/network.
WHAT YOU NEED.
Use a Raspberry Pi or Linux computer + USB cable to the Meshtastic node. It removes a whole layer of IP-address/network troubleshooting.
UPDATE IT AND INSTALL GIT.
Open Terminal. If you're using a Raspberry Pi remotely, connect with SSH first.
sudo apt updatesudo apt upgradesudo apt install gitFor this guide, think of Git as the tool that downloads the TC²-BBS project from GitHub and keeps the project files together.
CLONE THE PROJECT.
cd ~git clone https://github.com/TheCommsChannel/TC2-BBS-mesh.gitcd TC2-BBS-meshcd ~ means “go to my home folder.” The second command downloads the project. The third moves you inside the new project folder.
Create a Python virtual environment
python -m venv venvIt is simply a private little Python workspace for this project. It keeps TC²-BBS's Python packages separated from other software on your computer.
Activate it
source venv/bin/activateAfter activation, your terminal may show (venv) at the beginning of the line. That's good.
Install the project's required Python packages
pip install -r requirements.txtUSB/SERIAL OR TCP?
If using USB/serial
Plug in the radio. Linux commonly exposes Meshtastic radios as something like /dev/ttyACM0 or /dev/ttyUSB0.
If only one compatible radio is attached, you may be able to leave the port line commented out. If multiple serial devices exist, specify the exact device port in the config.
If using TCP
You need the local IP address of the compatible Meshtastic device, for example 192.168.1.100.
TURN THE EXAMPLE CONFIG INTO YOUR CONFIG.
mv example_config.ini config.iniNow open it:
nano config.iniUse the arrow keys to move around. When finished, press Ctrl+X, then Y, then Enter to save.
Beginner USB/serial example
[interface] type = serial # port = /dev/ttyACM0
If the automatic serial connection does not find the correct device, remove the # before port and enter your actual port.
Network/TCP example
[interface] type = tcp hostname = 192.168.1.100
Replace the example address with the real local IP address of your supported Meshtastic device.
BBS syncing is optional
The [sync] section is only needed if you want this BBS to sync mail/bulletins with other TC²-BBS nodes. You do not need it for your first local test.
[sync] bbs_nodes = !f53f4abc,!f3abc123
Those values are Meshtastic node IDs. Separate multiple IDs with commas and no spaces.
Urgent-board allow list is optional too
The example config supports an [allow_list] section that limits who can post to the urgent board. If the section stays commented out, the upstream config says anyone can post there.
Menu items can be trimmed later
The example file lets you remove main menu, BBS menu and utility menu options. Leave the defaults alone until your basic BBS is working.
USE A ROLE THE PROJECT SAYS IS WORKING.
The upstream README warns that some Meshtastic device roles may initially communicate and then stop responding to BBS requests.
Client.
If you are troubleshooting a flaky BBS, do not start with an exotic device role. Use one of the project's known-working roles first.
START THE BBS MANUALLY BEFORE AUTOMATING IT.
Make sure you're still inside the project folder and the Python virtual environment is active.
python server.pyLeave that terminal running during the first test.
How do users talk to the BBS?
From another Meshtastic node/app, send a direct message to the Meshtastic node connected to the BBS computer.
The upstream project says sending any message should return the main menu. Then you make menu selections by sending the letter or number shown in brackets — for example, send M for the Mail menu.
You DM the BBS node, it replies with a menu, and additional menu commands get responses.
Do not set up autostart until this works manually.
SET UP THE SYSTEMD SERVICE.
The included mesh-bbs.service is written for a Linux user named pi. Modern Raspberry Pi installs often use a different username. If your username is not pi, you must edit the service file first.
Find your current username:
whoamiThen edit the service:
nano mesh-bbs.serviceThe stock file contains these three lines:
User=pi WorkingDirectory=/home/pi/TC2-BBS-mesh ExecStart=/home/pi/TC2-BBS-mesh/venv/bin/python3 /home/pi/TC2-BBS-mesh/server.py
Replace every relevant pi with your actual username. For example, if whoami says meshuser:
User=meshuser WorkingDirectory=/home/meshuser/TC2-BBS-mesh ExecStart=/home/meshuser/TC2-BBS-mesh/venv/bin/python3 /home/meshuser/TC2-BBS-mesh/server.py
Save the file, then install and start the service:
sudo cp mesh-bbs.service /etc/systemd/system/sudo systemctl enable mesh-bbs.servicesudo systemctl start mesh-bbs.serviceCheck whether it is alive
sudo systemctl status mesh-bbs.serviceLive logs
journalctl -u mesh-bbs.service -fRestart after changing config
sudo systemctl restart mesh-bbs.serviceTroubleshooting
python -m venv venv fails
pip install -r requirements.txt fails
TC2-BBS-mesh directory. Network/package errors can also occur if the Pi has no Internet connection.The BBS cannot see my Meshtastic radio
It works for a little while and then stops responding
It runs manually but not after reboot
sudo systemctl status mesh-bbs.service. The most likely beginner mistake is leaving User=pi and /home/pi/... in the service file when your actual Linux username is something else.I changed config.ini but nothing changed
python server.py. If running as the system service, use sudo systemctl restart mesh-bbs.service.How do I see what the service is complaining about?
journalctl -u mesh-bbs.service -f for live logs, or journalctl -u mesh-bbs.service for previous log entries.THEN START PLAYING WITH THE FUN STUFF.
YES, THERE IS ALSO A DOCKER IMAGE.
The project README links an official Docker Hub image for TC²-BBS Meshtastic. This beginner guide intentionally uses the normal Python installation first because it exposes each moving part clearly and makes troubleshooting easier for someone starting from zero.
Project documentation
Hardware revisions and software screens can change. Use the original project documentation alongside this walkthrough.