# MeshCore Protocol Overview

MeshCore is a LoRa mesh networking platform created by Scott (Ripple Radios / ripplebiz), its lead firmware engineer; Liam Cottle builds the app and web tooling. This overview draws on the official MeshCore documentation, FAQ, and source code.

## What Makes MeshCore Different

Many LoRa mesh platforms (for example Meshtastic) rely on **managed/broadcast flooding**, where nodes re-broadcast messages subject to hop limits and duplicate suppression rather than naive "every node repeats everything" flooding. MeshCore instead uses a **flood-first, direct-route-after** approach:

1. The first message to any destination is flood-routed (all repeaters in range re-broadcast)
2. The destination returns the path it received the flood through (`PAYLOAD_TYPE_PATH` packet)
3. All subsequent messages to that destination use **direct routing**, embedded with the specific repeater path - only those repeaters forward it

For repeated unicast traffic, this reduces channel utilization once paths are established; group and broadcast traffic still floods, and churn (such as moving nodes or stale paths) triggers re-floods.

## Encryption

- **Symmetric encryption: AES-128** (ECB mode)
- **Message authentication: HMAC-SHA256** (2-byte truncated, encrypt-then-MAC)
- **Key exchange: ECDH via X25519** (Ed25519 identity keys transposed)
- **Identity signing: Ed25519** - advertisements signed to prevent spoofing

## Firmware Types

- **Companion** - your personal node; connects to the MeshCore app via BLE or USB serial
- **Repeater** - infrastructure node; forwards messages, no user interface
- **Room Server** - stores and delivers missed messages; hosts community "rooms"
- **Sensor** - telemetry node for sensor data

## Frequency

- **USA/Canada:** 910.525 MHz, SF7, BW 62.5 kHz, CR5 (a community-chosen "narrow" preset within the unlicensed 902-928 MHz band, as of October 2025 - not an FCC-assigned channel; other settings within the band are also permissible under FCC Part 15.247)
- **EU/UK:** 868 MHz band
- **Australia/NZ:** 915 MHz band

## Key Capabilities

- Room Servers provide message store-and-forward (last messages in RAM (capacity firmware-dependent) per client)
- Path hash modes allow tuning for mobile vs. fixed repeater networks
- Regional scoping via ISO country codes prevents cross-region interference
- 50+ supported devices across the RAK WisBlock, Heltec, LilyGo, and Seeed ecosystems

## App and Tools

- Android/iOS app by Liam Cottle: Google Play (`com.liamcottle.meshcore.android`) / App Store (`id6742354151`)
- Web app: **app.meshcore.nz**
- Flasher: **flasher.meshcore.io**
- Config tool: **config.meshcore.io**
- Python CLI: github.com/meshcore-dev/meshcore-cli (the `fdlamotte/meshcore-cli` repo now redirects here)

*Sources: the official MeshCore repository (meshcore-dev/MeshCore), its FAQ and source code, docs.meshcore.io, and meshcore.co.uk. Region presets and version-dependent details change over time; check the upstream docs for the current values.*