Skip to main content

Reticulum-Telemetry-Hub (RTH) manages a complete TCP node across a Reticulum-based network, enabling communication and data sharing between clients like Sideband or Meshchat.

Project description

Reticulum Community Hub (RCH)

RCH logo

Reticulum Community Hub (RCH) is a shared coordination point for mesh networks. It allows people and groups to exchange messages, share situational updates, and distribute files in a structured and reliable way, even across intermittent or low-connectivity environments, while remaining independent from centralized internet services.

Why?

"RCH begins from a simple refusal: When this illusion breaks, highly optimized global systems fail first."

Read our full manifesto: docs/Manifesto_Reticulum_Community_Hub.md

What it does

  • One-to-many and topic-scoped message fan-out over LXMF.
  • Telemetry collection and on-demand telemetry responses.
  • File and image attachment storage with retrieval and deletion by ID.
  • sci-fi themed admin UI.
  • Operator-managed map markers backed by Reticulum object identities and telemetry updates.
  • TAK bridge for chat and location updates (Optional).
  • Capability announces embedded in Reticulum announces for feature discovery.

What it looks like

Dashboard Map chat

Quickstart (from source)

  1. Clone and enter the repo.
    git clone https://github.com/FreeTAKTeam/Reticulum-Community-Hub.git
    cd Reticulum-Community-Hub
    
  2. Create and activate a virtual environment.
    python -m venv .venv
    # Linux/macOS
    source .venv/bin/activate
    # Windows (PowerShell)
    .venv\Scripts\Activate.ps1
    
  3. Install dependencies.
    python -m pip install --upgrade pip
    python -m pip install -e .
    
  4. Prepare a storage directory and config.
    • Copy RCH_Store/config.ini into your storage directory.
    • Adjust paths in the [hub], [files], and [images] sections.
  5. Start the hub.
    python -m reticulum_telemetry_hub.reticulum_server \
        --storage_dir ./RCH_Store \
        --display_name "RCH"
    
    Or start the hub + northbound API locally with the new entrypoint:
    rch start --data-dir ./RCH_Store --port 8000 --log-level info
    

For configuration, services, and client usage details, see docs/userManual.md.

Install from PyPI

  1. Create and activate a virtual environment.
    python -m venv .venv
    # Linux/macOS
    source .venv/bin/activate
    # Windows (PowerShell)
    .venv\Scripts\Activate.ps1
    
  2. Install the package.
    python -m pip install --upgrade pip
    python -m pip install ReticulumCommunityHub
    
  3. Start the hub (point at your storage directory).
    python -m reticulum_telemetry_hub.reticulum_server --storage_dir /path/to/RCH_Store
    

Northbound API and admin UI

The northbound FastAPI service exposes REST + WebSocket endpoints used by the admin UI.

  • Run the hub + API together (recommended for chat/message sending):

    rch start --data-dir ./RCH_Store --port 8000 --log-level info
    

    The gateway binds to 127.0.0.1 for local-only access.

  • Check or stop the backend:

    rch status --data-dir ./RCH_Store
    rch stop --data-dir ./RCH_Store
    
  • Run only the API server (read-only unless you provide a message dispatcher):

    uvicorn reticulum_telemetry_hub.northbound.app:app --host 127.0.0.1 --port 8000
    
  • Protect admin endpoints by setting RCH_API_KEY (accepts X-API-Key or Bearer token).

  • Marker identity encryption is derived from the hub identity (no extra key configuration required).

  • The admin UI sidebar can be collapsed and pinned (stored per-browser).

  • Telemetry map markers render MDI icons when telemetry payloads include telemetry_type, symbol, category, or type.

  • The WebMap shows a live latitude/longitude readout for the map cursor.

  • Marker symbols load from rch-symbols.yaml (override with RTH_SYMBOL_REGISTRY_PATH).

  • /api/v1/app/info includes the hub Reticulum destination (reticulum_destination) for display on the About page.

  • File/image attachments support delete operations that remove both metadata and on-disk content (DELETE /File/{id}, DELETE /Image/{id}).

  • The UI lives in ui/:

    cd ui
    npm install
    npm run dev
    

    The UI uses Vite 6 (installed via npm install).

    Set VITE_RCH_BASE_URL when the UI should target a different hub.

Electron desktop packaging (Windows + Raspberry Pi OS)

The electron/ folder contains a minimal desktop wrapper that bundles the UI and loads the hub API from 127.0.0.1.

  1. Install Electron dependencies:
    cd electron
    npm install
    
  2. Run the Electron shell in dev mode (starts the Vite dev server):
    npm run dev
    
  3. Build installers:
    npm run dist
    
  4. Build Windows installer + portable EXE:
    npm run dist -- --win
    

Electron packaging expects a bundled backend executable. Install PyInstaller and build it before packaging:

python -m pip install -e .
python -m pip install pyinstaller
cd electron
npm run build:backend

Before each Electron build, the desktop app version is synchronized from pyproject.toml automatically.

Windows artifact naming:

  • Installer: RCH_win Install_<version>.exe
  • Portable: RCH_win Portable_<version>.exe

For Raspberry Pi OS, build on Linux and target the desired architecture:

npm run dist -- --linux --armv7l
npm run dist -- --linux --arm64

Packaged builds default to http://127.0.0.1:8000 for the API when loaded from file://. Override in the Connect page or set VITE_RTH_BASE_URL / VITE_RTH_WS_BASE_URL at build time.

Packaged desktop builds also launch the bundled backend automatically. Set RCH_BACKEND_MANAGED=false to disable autostart, or override with RCH_DATA_DIR, RCH_BACKEND_PORT, and RCH_LOG_LEVEL.

Marker management endpoints (used by the WebMap UI):

  • GET /api/markers (list stored markers)
  • GET /api/markers/symbols (list available marker symbols)
  • POST /api/markers (create marker with type/symbol/lat/lon, optional name/category/notes/ttl_seconds)
  • PATCH /api/markers/{object_destination_hash}/position (update marker coordinates)

Documentation

  • docs/README.md (documentation map)
  • docs/userManual.md (user and operator guide)
  • architecture.md (system overview and references)
  • API/ReticulumCommunityHub-OAS.yaml (REST/OpenAPI reference)

Contributing

We welcome and encourage contributions. Please include appropriate tests and follow the project coding standards.

Linting

RCH uses Ruff for linting with a 120-character line length and ignores E203 to align with Black-style slicing.

  • With Poetry (installs dev dependencies, including Ruff):

    poetry install --with dev
    poetry run ruff check .
    
  • With a plain virtual environment:

    python -m pip install ruff
    ruff check .
    

License

This project is licensed under the Eclipse Public License (EPL). For more details, refer to the LICENSE file in the repository.

Support

For issues or support, open a GitHub issue

Support Reticulum

You can help support the continued development of open, free and private communications systems by donating via one of the following channels to Mark, the original Reticulum author:

  • Monero: 84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
  • Ethereum: 0xFDabC71AC4c0C78C95aDDDe3B4FA19d6273c5E73
  • Bitcoin: 35G9uWVzrpJJibzUwpNUQGQNFzLirhrYAH
  • Ko-Fi: https://ko-fi.com/markqvist

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reticulumtelemetryhub-1.34.0.tar.gz (233.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reticulumtelemetryhub-1.34.0-py3-none-any.whl (287.6 kB view details)

Uploaded Python 3

File details

Details for the file reticulumtelemetryhub-1.34.0.tar.gz.

File metadata

  • Download URL: reticulumtelemetryhub-1.34.0.tar.gz
  • Upload date:
  • Size: 233.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for reticulumtelemetryhub-1.34.0.tar.gz
Algorithm Hash digest
SHA256 4931b5f3f4c172023c430efcc1a31beb5709e9ba5ad9418c713b4fc8ced4076d
MD5 9efbf0d18bf5d6668639f82243f2485f
BLAKE2b-256 866bcf2edfa2e17469a8458cc6742f36e8f953210a1fbc3882f961f3d581cd60

See more details on using hashes here.

Provenance

The following attestation bundles were made for reticulumtelemetryhub-1.34.0.tar.gz:

Publisher: python-publish.yml on FreeTAKTeam/Reticulum-Telemetry-Hub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reticulumtelemetryhub-1.34.0-py3-none-any.whl.

File metadata

File hashes

Hashes for reticulumtelemetryhub-1.34.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b79cc4d19546200f4cbf61251a8e18b147979c06353457cd384bf96ea98356d9
MD5 48b3841d45cf0e06320fa5eb1edd2b01
BLAKE2b-256 52e01d12af5648c03b1a683d90484b6ddd3eb2728f1b7097de027da39e86f226

See more details on using hashes here.

Provenance

The following attestation bundles were made for reticulumtelemetryhub-1.34.0-py3-none-any.whl:

Publisher: python-publish.yml on FreeTAKTeam/Reticulum-Telemetry-Hub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page