Skip to main content

Room Server Installation Guide

A MeshCore room server turns a Raspberry Pi, VPS, or any Linux server into a mesh infrastructure node that provides message persistence, node discovery, and optionally internet bridging to your mesh network.

What a room server provides

  • Message persistence: Messages delivered to the room server are stored and re-delivered to clients that come online after the message was sent. Nodes that were offline receive missed messages when they reconnect.
  • Node directory: The room server maintains a list of all nodes that have connected, allowing clients to discover each other without direct radio contact.
  • Internet bridging: With an internet uplink, the room server can forward messages between mesh radio and internet-connected clients, extending the reach of the mesh to phone users with no LoRa hardware.
  • Room management: Multiple rooms (channels) can be hosted on a single server, with separate access control for each.

Hardware requirements

Deployment typeMinimum hardwareRecommended
Home / testingRaspberry Pi Zero 2WRaspberry Pi 4 2GB
Community infrastructureRaspberry Pi 4 2GBRaspberry Pi 5 4GB or VPS
High-volume / multiple roomsVPS (2 CPU, 2GB RAM)VPS (4 CPU, 4GB RAM)

Storage: 8GB microSD minimum (Raspberry Pi); 20GB disk for VPS. A room server’s data footprint is small — even a busy server with years of history fits in under 1GB.

Installation on Raspberry Pi (Debian/Ubuntu)

Step 1: Prerequisites

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip git

Step 2: Clone and install

git clone https://github.com/meshcore-dev/room-server
cd room-server
pip3 install -r requirements.txt

Step 3: Configuration

cp config.example.yml config.yml
nano config.yml

Key settings to configure in config.yml:

server:
  name: "MY-ROOM-SERVER"       # Display name on the network
  listen_port: 7070            # TCP port (default 7070)

rooms:
  - name: "Public"             # Room/channel name
    psk: ""                    # Empty = public room (no encryption key)
  - name: "EmergencyNet"
    psk: "your-shared-key"     # Private room PSK

storage:
  path: "./data"               # Message storage directory
  retention_days: 30           # How long to keep messages

internet_bridge:
  enabled: false               # Set true to bridge to internet clients

Step 4: Run as a service

sudo nano /etc/systemd/system/room-server.service
[Unit]
Description=MeshCore Room Server
After=network.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/room-server
ExecStart=/usr/bin/python3 server.py
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl enable room-server
sudo systemctl start room-server
sudo systemctl status room-server

Step 5: Connect a LoRa radio (optional but recommended)

For a room server to participate in the local radio mesh (forwarding between radio and internet), connect a LoRa node to the Pi via USB and configure the room server to use it as a radio gateway:

radio:
  enabled: true
  port: "/dev/ttyUSB0"
  baudrate: 115200

Verifying the installation

# Check logs
journalctl -u room-server -f

# Test TCP connection
nc -v localhost 7070

A successful connection shows the server’s banner message. You can then connect from the MeshCore app by adding the server’s IP address as a TCP connection.