Raspberry Pi Headless MeshChatX on Raspberry Pi with the release wheel. This guide shows a simple headless setup for running MeshChatX on a Raspberry Pi 4 with a web UI you can access from another device on your network. This install path uses a release wheel, which already includes frontend assets. Automated Setup Scripts# curl -fsSL 'https://raw.githubusercontent.com/Quad4-Software/MeshChatX/refs/heads/master/scripts/rpi/install_meshchatx.sh' | bash If you have the repo cloned locally already: bash scripts/rpi/install_meshchatx.sh The installer guides you through: Optional espeak-ng install (tries apt/dnf/pacman) Install method (pipx or venv + pip) Wheel choice (latest stable, latest pre-release, or a custom URL) Optional cosign attestation: if a *.whl.cosign.bundle is published next to the wheel, you can verify it. The script uses cosign on PATH if present, or downloads a checksum-verified official Linux binary to /tmp (the Sigstore bundle format is not reimplemented in shell, so you still use the real cosign to verify, without installing a distro package) Storage and Reticulum directories Bind host and port (with availability check) HTTPS on/off (default on) Service mode (system, user, or none) Service startup validation via the HTTP status endpoint If startup validation fails, it prints recent logs and stops the service to avoid restart loops. 1) Install Base Dependencies# sudo apt update sudo apt upgrade -y sudo apt install -y python3 python3-pip pipx 2) Enable pipx Path# pipx ensurepath source ~/.profile If pipx is not available in your distro package repo, install it with: python3 -m pip install --user pipx python3 -m pipx ensurepath source ~/.profile 3) Install MeshChatX with pipx (recommended)# Preferred option (recommended): install from a release wheel (4.8.6 or newer), because the wheel bundles frontend assets. pipx install /path/to/reticulum_meshchatx-<version>-py3-none-any.whl Direct example (v4.8.6): pipx install "https://github.com/Quad4-Software/MeshChatX/releases/download/v4.8.6/reticulum_meshchatx-4.8.6-py3-none-any.whl" py3-none-any wheels are architecture-independent, so the same wheel artifact works on Raspberry Pi ARM and x86_64 Linux systems. Upgrade example: pipx upgrade meshchatx 4) Install MeshChatX without pipx (venv + pip)# If you prefer not to use pipx: mkdir -p ~/meshchatx cd ~/meshchatx python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install "https://github.com/Quad4-Software/MeshChatX/releases/download/v4.8.6/reticulum_meshchatx-4.8.6-py3-none-any.whl" Run command in venv mode: ~/meshchatx/.venv/bin/meshchatx --headless --host 0.0.0.0 --port 8000 5) Run MeshChatX (Headless)# meshchatx --headless --host 0.0.0.0 --port 8000 Then open: http://<pi-ip>:8000 6) Configure a systemd Service# systemd keeps MeshChatX running in the background and starts it automatically on boot. You have two service styles: System service (/etc/systemd/system/...) for always-on host services. User service (~/.config/systemd/user/...) for per-user sessions. Option A: System service (recommended for Pi node/server use)# Create /etc/systemd/system/meshchatx.service: [Unit] Description=MeshChatX Headless (system service) After=network-online.target Wants=network-online.target [Service] Type=simple User=pi Group=pi WorkingDirectory=/home/pi/meshchatx Environment="PATH=/home/pi/.local/bin:/usr/bin:/bin" ExecStart=/home/pi/.local/bin/meshchatx --headless --host 0.0.0.0 --port 8000 --storage-dir /home/pi/meshchatx/storage --reticulum-config-dir /home/pi/.reticulum Restart=always RestartSec=3 [Install] WantedBy=multi-user.target The above service file is for pipx installs. For venv installs, use: [Service] Type=simple User=pi Group=pi WorkingDirectory=/home/pi/meshchatx Environment="PATH=/home/pi/meshchatx/.venv/bin:/usr/bin:/bin" ExecStart=/home/pi/meshchatx/.venv/bin/meshchatx --headless --host 0.0.0.0 --port 8000 --storage-dir /home/pi/meshchatx/storage --reticulum-config-dir /home/pi/.reticulum Restart=always RestartSec=3 Update User, Group, and paths if your install location is different. Enable and start: mkdir -p /home/pi/meshchatx/storage /home/pi/.reticulum sudo chown -R pi:pi /home/pi/meshchatx sudo systemctl daemon-reload sudo systemctl enable --now meshchatx.service sudo systemctl status meshchatx.service Option B: User service (no sudo system unit)# Create ~/.config/systemd/user/meshchatx.service: [Unit] Description=MeshChatX Headless (user service) After=network-online.target [Service] Type=simple WorkingDirectory=%h/meshchatx Environment="PATH=%h/.local/bin:/usr/bin:/bin" ExecStart=%h/.local/bin/meshchatx --headless --host 0.0.0.0 --port 8000 --storage-dir %h/meshchatx/storage --reticulum-config-dir %h/.reticulum Restart=always RestartSec=3 [Install] WantedBy=default.target Enable/start user service: systemctl --user daemon-reload systemctl --user enable --now meshchatx.service systemctl --user status meshchatx.service If you want user services to stay active without login: sudo loginctl enable-linger pi Service management commands# sudo systemctl restart meshchatx.service sudo systemctl stop meshchatx.service sudo systemctl disable meshchatx.service Useful logs and troubleshooting: journalctl -u meshchatx.service -f journalctl -u meshchatx.service -n 200 --no-pager systemctl show meshchatx.service -p ExecStart -p User -p Group Reset Password# If you forget the web UI password and have SSH access to the Pi, reset it with the --reset-password flag: meshchatx --reset-password --headless --host 0.0.0.0 --port 8000 Or set the environment variable: MESHCHAT_RESET_PASSWORD=true meshchatx --headless --host 0.0.0.0 --port 8000 This clears the stored password hash on startup. Open the web UI and you will see the Initial Setup screen where you can set a new password. After resetting, you can stop the app and restart without the flag. Notes# Reticulum configuration and identity data are stored in the service user's home directory by default (for example ~/.reticulum and MeshChatX storage paths). If you attach RNode hardware by USB, make sure the service user has permission to access serial devices (dialout group on Debian-based systems).