selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
RemoteTerm for MeshCore logo

Self-host RemoteTerm for MeshCore

3.17.1

Web-based MeshCore radio management and messaging

ReleaseOpen SourceMIT
Updated3 months ago
LanguagePython
Setup difficultyAdvanced
Stars
337
Port
8000 (HTTP web interface and API)
Requires
MeshCore Radio
Docker
docker.io/jkingsman/remoteterm-meshcore
Install with Docker Compose

What is RemoteTerm for MeshCore?

RemoteTerm for MeshCore is a self-hosted web application that lets you manage and monitor MeshCore mesh radios through a browser. You connect a compatible radio via USB, TCP, or Bluetooth, and the software provides a full-featured interface for messaging, network visualization, and automation. It handles direct and channel messaging, stores and decrypts packets as encryption keys become available, and supports running custom Python bots that can react to incoming messages. The system tracks unlimited contacts and channels beyond what the radio itself can hold, and it can forward data to external platforms like MQTT brokers, Home Assistant, LetsMesh, MeshRank, Amazon SQS, and Apprise. A map view shows node positions and repeater statistics. The software requires Python 3.11 or newer and a Node.js environment for the frontend, with SQLite used for local data storage. Deployment options include a native Python installation using the UV package manager, Docker Compose, an Arch Linux AUR package, or a systemd service on Linux. Security features include optional HTTP Basic Auth and the ability to disable the bot subsystem entirely.

Should you self-host RemoteTerm for MeshCore?

RemoteTerm for MeshCore scores 45/100 on selfhost.directory (how scoring works) and ranks #4 of 4 in Amateur Radio. It has 337 GitHub stars.

It shipped 10 stable releases in the past year. The latest, 3.17.1, came out on 26 July 2026. New versions land roughly every 9 days.

Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is MIT-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is Wavelog (60/100, 580 stars). It scores higher overall, so compare the two before you pick. See RemoteTerm for MeshCore vs Wavelog side by side.

Features

  • Channel messaging
  • Direct messaging
  • Hashtag channel search
  • HTTP Basic AuthMust be paired with HTTPS; not a substitute for proper access control
  • Mesh visualization
  • MQTT forwarding
  • Multibyte pathing support
  • Multiple transport optionsOnly one transport may be active at a time
  • Packet capture and decryption
  • Python botsBots can execute arbitrary Python code; can be disabled with MESHCORE_DISABLE_BOTS=true
  • Remote Access
  • Repeater telemetry
  • Unlimited contacts and channels
  • Web push notifications

RemoteTerm for MeshCore README

How to install RemoteTerm for MeshCore

Install RemoteTerm for MeshCore with Docker Compose

Docker, Docker Compose, rootful Docker for serial passthrough
Environment variables
MESHCORE_SERIAL_PORT, MESHCORE_SERIAL_BAUDRATE, MESHCORE_TCP_HOST, MESHCORE_TCP_PORT, MESHCORE_BLE_ADDRESS, MESHCORE_BLE_PIN, MESHCORE_LOG_LEVEL, MESHCORE_DATABASE_PATH, MESHCORE_DISABLE_BOTS, MESHCORE_BASIC_AUTH_USERNAME, MESHCORE_BASIC_AUTH_PASSWORD, MESHCORE_VAPID_SUBJECT

cp docker-compose.example.yml docker-compose.yml

Edit docker-compose.yml for your transport

sudo docker compose up -d

Docker has had reports of intermittent issues with serial event subscriptions; native method recommended

How to configure RemoteTerm for MeshCore

  • __CLOWNTOWN_DO_CLOCK_WRAPAROUNDfalseHighly experimental: if the radio clock is ahead of system time, try forcing the clock to 0xFFFFFFFF, wait for uint32 wraparound, and then retry normal time sync before falling back to reboot

    Highly experimental: if the radio clock is ahead of system time, try forcing the clock to 0xFFFFFFFF, wait for uint32 wraparound, and then retry normal time sync before falling back to reboot

    values: true, false

  • MESHCORE_BASIC_AUTH_PASSWORDOptional app-wide HTTP Basic auth password

    Optional app-wide HTTP Basic auth password

  • MESHCORE_BASIC_AUTH_USERNAMEOptional app-wide HTTP Basic auth username

    Optional app-wide HTTP Basic auth username

  • MESHCORE_BLE_ADDRESSBLE device address (mutually exclusive with serial/TCP)

    BLE device address (mutually exclusive with serial/TCP)

  • MESHCORE_BLE_PINBLE PIN (required when BLE address is set)

    BLE PIN (required when BLE address is set)

  • MESHCORE_DATABASE_PATHdata/meshcore.dbSQLite database path

    SQLite database path

  • MESHCORE_DISABLE_BOTSfalseDisable bot system entirely (blocks execution and config)

    Disable bot system entirely (blocks execution and config)

    values: true, false

  • MESHCORE_ENABLE_LOCAL_PRIVATE_KEY_EXPORTfalseEnable GET /api/radio/private-key to return the in-memory private key as hex for backup or migration

    Enable GET /api/radio/private-key to return the in-memory private key as hex for backup or migration

    values: true, false

  • MESHCORE_ENABLE_MESSAGE_POLL_FALLBACKfalseRun aggressive 10-second get_msg() fallback polling to check for messages

    Run aggressive 10-second get_msg() fallback polling to check for messages

    values: true, false

  • MESHCORE_FORCE_CHANNEL_SLOT_RECONFIGUREfalseDisable channel-slot reuse and force set_channel(...) before every channel send

    Disable channel-slot reuse and force set_channel(...) before every channel send

    values: true, false

  • MESHCORE_LOAD_WITH_AUTOEVICTfalseEnable autoevict mode for contact loading

    Enable autoevict mode for contact loading

    values: true, false

  • MESHCORE_LOG_LEVELINFOLog level

    Log level

    values: DEBUG, INFO, WARNING, ERROR

  • MESHCORE_SERIAL_BAUDRATE115200Serial baud rate

    Serial baud rate

  • MESHCORE_SERIAL_PORT(auto-detect)Serial port path for USB connection

    Serial port path for USB connection

  • MESHCORE_TCP_HOSTTCP host (mutually exclusive with serial/BLE)

    TCP host (mutually exclusive with serial/BLE)

  • MESHCORE_TCP_PORT5000TCP port

    TCP port

  • MESHCORE_VAPID_SUBJECTmailto:noreply@meshcore.localSubject (sub) claim for Web Push VAPID tokens; must be a mailto: or https: contact

    Subject (sub) claim for Web Push VAPID tokens; must be a mailto: or https: contact

RemoteTerm for MeshCore releases & version history

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…