2025-11-07 06:18:00 -08:00
2025-11-06 23:27:23 -08:00
2025-11-06 23:27:23 -08:00
2025-11-06 23:27:23 -08:00
2025-11-06 23:27:23 -08:00
2025-11-06 23:27:23 -08:00
2025-11-07 06:18:00 -08:00
2025-11-06 23:27:23 -08:00
2025-11-06 23:27:23 -08:00

LoBBS - Meshtastic BBS on the Firmware

LoBBS is a full bulletin board system that runs entirely inside the Meshtastic firmware. Once the module is built into your node you can create user accounts, exchange private mail, broadcast news posts, and remotely administer the device without any sidecar services or host computer.

Features

  • User directory with username registration and secure password storage
  • Private mail inbox with paging, read receipts, and inline @mention delivery
  • News feed with threaded announcements and per-user read tracking
  • Session-aware command parser with contextual help
  • Backed by LoDB for on-device storage so the entire BBS persists across reboots

Prerequisites

  • A working Meshtastic firmware checkout with a build environment configured for your target board
  • Python environment compatible with PlatformIO (used for the existing Meshtastic build pipeline)
  • Git access to clone the LoBBS and LoDB submodules

Installation

Step 1: Vendor LoBBS and LoDB

LoBBS ships as a firmware module and depends on LoDB for its embedded database layer. Add both submodules to your firmware tree and pull their contents:

git submodule add git@github.com/MeshEnvy/lobbs.git src/modules/LoBBSModule
git submodule add git@github.com/MeshEnvy/lodb.git src/lodb
git submodule update --init --recursive

Step 2: Wire LoDB code generation into PlatformIO

The protobuf definitions in lobbs.proto must be regenerated whenever they change. Append the following helper to bin/platformio-custom.py so PlatformIO can discover the generator provided by LoDB:

# Ensure LoDB helper utilities are available when LoDB is vendored as a submodule
lodb_helper_path = join(env["PROJECT_DIR"], "src", "lodb") if env else None
if lodb_helper_path and lodb_helper_path not in sys.path:
    sys.path.append(lodb_helper_path)

try:
    from gen_proto import register_protobufs  # type: ignore
    register_protobufs(
        env,
        "$BUILD_DIR/src/modules/LoBBSModule/LoBBSModule.cpp.o",
        "$PROJECT_DIR/src/modules/LoBBSModule/lobbs.proto",
    )
except Exception:
    print("Warning: gen_proto utilities not found; protobufs will not auto-regenerate")

Step 3: Build and flash

Use the standard Meshtastic PlatformIO targets to compile and upload. The example below targets an esp32 environment; adjust the environment name to match your board:

pio run -e esp32 -t upload

After flashing, reboot the node. LoBBS registers automatically through Modules.cpp, so no additional firmware configuration is required.

Using LoBBS

  • Joining the BBS — Send a direct message to your node containing /hi <username> <password>. The command logs you in if the account exists or creates a new account if it does not.
  • Logging out — Use /bye to terminate the current session and clear the binding between your node ID and account.
  • Mail/mail lists the 10 most recent messages, /mail 3 reads message 3, and /mail 5- starts the listing at item 5. Mention another user in any authenticated message using @username to deliver instant mail.
  • News/news mirrors the mail workflow for public announcements. Append a message after the command (for example /news Hello mesh!) to post a new item.
  • User discovery/users returns the directory. Supply an optional filter string (e.g. /users mesh) to narrow the results.

LoBBS replies inline with human-readable summaries. Unread content is flagged with an asterisk in list views, and relative timestamps (for example, 2h ago) provide context for each entry.

Storage Layout

All user, mail, and news data is persisted via LoDB in the device filesystem. Clearing the filesystem, reflashing without preserving SPIFFS/LittleFS, or performing a full factory reset will delete the BBS contents. Regular backups of the filesystem are recommended for production deployments.

Troubleshooting

  • Ensure the LoDB generator is reachable; if protobufs fail to regenerate you will see the warning printed during the PlatformIO build.
  • Verify your node clock is roughly correct. Timestamps in mail and news rely on the RTC and GPS time sources provided by the firmware.
  • Confirm that your node stays logged in (no /bye issued) if you expect to receive @mentions. Unauthenticated nodes receive only the login help banner.

License

LoBBS is distributed under the MIT license. See the accompanying LICENSE file within this module for full text.

Description
No description provided
Readme MIT 750 KiB
Languages
Cython 94.2%
C++ 5.7%