# meshcore-dev/meshcore architecture

> Architecture diagram of the GitHub repository meshcore-dev/meshcore, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/meshcore-dev/meshcore
- Repository: https://github.com/meshcore-dev/meshcore

## Overview

MeshCore is an embedded C++ library for decentralized, multi-hop communication over LoRa and other packet radios. Its principal workflow is a client or device exchanging packets through a supported interface and radio, with nodes processing and relaying traffic toward other peers; the README also describes distinct Companion, Repeater, and Room Server roles. The graph includes packet handling, telemetry, access control, and device-facing capabilities. Source excerpts are partial, so links between many listed subsystems are intentionally omitted rather than inferred.

Main entry points: [`src/Mesh.cpp`](https://github.com/meshcore-dev/meshcore/blob/main/src/Mesh.cpp) (Mesh engine), [`src/helpers/StaticPoolPacketManager.cpp`](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/StaticPoolPacketManager.cpp) (Packet queues), [`src/helpers/sensors/EnvironmentSensorManager.cpp`](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/sensors/EnvironmentSensorManager.cpp) (Environment telemetry), [`src/helpers/bridges/BridgeBase.cpp`](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/bridges/BridgeBase.cpp) (Radio bridges)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_network["Mesh networking"]
  node_mesh["Mesh engine<br/>[Mesh.cpp]"]
  node_dispatcher["Packet dispatcher<br/>[Dispatcher.cpp]"]
  node_packet["Packet model<br/>[Packet.cpp]"]
  node_identity["Node identity<br/>[Identity.cpp]"]
  node_packet_pool["Packet queues"]
  node_routing["Routing policy<br/>[RoutingPolicy.h]"]
  node_tables["Mesh tables<br/>[SimpleMeshTables.h]"]
end

subgraph group_interfaces["Device interfaces"]
  node_serial["Serial interface"]
  node_ble["BLE interface"]
  node_wifi["Wi-Fi interface"]
  node_cli["Command interface<br/>[CommonCLI.cpp]"]
end

subgraph group_services["Node services"]
  node_sensor_manager["Sensor manager<br/>[SensorManager.h]"]
  node_environment["Environment telemetry"]
  node_location["Location providers<br/>[LocationProvider.h]"]
  node_acl["Client permissions<br/>[ClientACL.cpp]"]
  node_config["Configuration"]
  node_stores["Identity and key stores<br/>[IdentityStore.cpp]"]
end

subgraph group_hardware["Hardware support"]
  node_bridges["Radio bridges<br/>[BridgeBase.cpp]"]
  node_lora["Radio drivers"]
  node_display["Device displays<br/>[DisplayDriver.h]"]
end

node_client(("Mesh client"))

node_mesh -->|"begins"| node_dispatcher
node_packet_pool -->|"allocates"| node_packet
node_mesh -->|"derives shared secret"| node_identity
node_mesh -->|"obtains and queues"| node_packet_pool
node_mesh -->|"checks seen packets"| node_tables
node_mesh -->|"routes packets"| node_routing
node_mesh -.->|"queries telemetry"| node_sensor_manager
node_environment -->|"provides location"| node_location
node_client -.->|"connects by USB"| node_serial
node_client -.->|"connects by BLE"| node_ble
node_client -.->|"connects by Wi-Fi"| node_wifi
node_bridges -.->|"uses radio drivers"| node_lora

click node_mesh "https://github.com/meshcore-dev/meshcore/blob/main/src/Mesh.cpp"
click node_dispatcher "https://github.com/meshcore-dev/meshcore/blob/main/src/Dispatcher.cpp"
click node_packet "https://github.com/meshcore-dev/meshcore/blob/main/src/Packet.cpp"
click node_identity "https://github.com/meshcore-dev/meshcore/blob/main/src/Identity.cpp"
click node_packet_pool "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/StaticPoolPacketManager.cpp"
click node_routing "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/RoutingPolicy.h"
click node_tables "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/SimpleMeshTables.h"
click node_serial "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ArduinoSerialInterface.cpp"
click node_ble "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/esp32/SerialBLEInterface.cpp"
click node_wifi "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/esp32/SerialWifiInterface.cpp"
click node_cli "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/CommonCLI.cpp"
click node_bridges "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/bridges/BridgeBase.cpp"
click node_lora "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/radiolib/RadioLibWrappers.cpp"
click node_sensor_manager "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/SensorManager.h"
click node_environment "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/sensors/EnvironmentSensorManager.cpp"
click node_location "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/sensors/LocationProvider.h"
click node_acl "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ClientACL.cpp"
click node_config "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ConfigSerializer.cpp"
click node_stores "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/IdentityStore.cpp"
click node_display "https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ui/DisplayDriver.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_mesh,node_dispatcher,node_packet,node_identity,node_packet_pool,node_routing,node_tables,node_client toneBlue
class node_serial,node_ble,node_wifi,node_cli toneAmber
class node_sensor_manager,node_environment,node_location,node_acl,node_config,node_stores toneMint
class node_bridges,node_lora,node_display toneRose
```

## Components

### Mesh networking

- [Mesh engine](https://github.com/meshcore-dev/meshcore/blob/main/src/Mesh.cpp): `src/Mesh.cpp`
- [Packet dispatcher](https://github.com/meshcore-dev/meshcore/blob/main/src/Dispatcher.cpp): `src/Dispatcher.cpp`
- [Packet model](https://github.com/meshcore-dev/meshcore/blob/main/src/Packet.cpp): `src/Packet.cpp`
- [Node identity](https://github.com/meshcore-dev/meshcore/blob/main/src/Identity.cpp): `src/Identity.cpp`
- [Packet queues](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/StaticPoolPacketManager.cpp): `src/helpers/StaticPoolPacketManager.cpp`
- [Routing policy](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/RoutingPolicy.h): `src/helpers/RoutingPolicy.h`
- [Mesh tables](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/SimpleMeshTables.h): `src/helpers/SimpleMeshTables.h`

### Device interfaces

- [Serial interface](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ArduinoSerialInterface.cpp): `src/helpers/ArduinoSerialInterface.cpp`
- [BLE interface](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/esp32/SerialBLEInterface.cpp): `src/helpers/esp32/SerialBLEInterface.cpp`
- [Wi-Fi interface](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/esp32/SerialWifiInterface.cpp): `src/helpers/esp32/SerialWifiInterface.cpp`
- [Command interface](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/CommonCLI.cpp): `src/helpers/CommonCLI.cpp`

### Node services

- [Sensor manager](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/SensorManager.h): `src/helpers/SensorManager.h`
- [Environment telemetry](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/sensors/EnvironmentSensorManager.cpp): `src/helpers/sensors/EnvironmentSensorManager.cpp`
- [Location providers](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/sensors/LocationProvider.h): `src/helpers/sensors/LocationProvider.h`
- [Client permissions](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ClientACL.cpp): `src/helpers/ClientACL.cpp`
- [Configuration](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ConfigSerializer.cpp): `src/helpers/ConfigSerializer.cpp`
- [Identity and key stores](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/IdentityStore.cpp): `src/helpers/IdentityStore.cpp`

### Hardware support

- [Radio bridges](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/bridges/BridgeBase.cpp): `src/helpers/bridges/BridgeBase.cpp`
- [Radio drivers](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/radiolib/RadioLibWrappers.cpp): `src/helpers/radiolib/RadioLibWrappers.cpp`
- [Device displays](https://github.com/meshcore-dev/meshcore/blob/main/src/helpers/ui/DisplayDriver.h): `src/helpers/ui/DisplayDriver.h`

### Other components

- **Mesh client**

## Connections

- Mesh engine → Packet dispatcher: begins
- Packet queues → Packet model: allocates
- Mesh engine → Node identity: derives shared secret
- Mesh engine → Packet queues: obtains and queues
- Mesh engine → Mesh tables: checks seen packets
- Mesh engine → Routing policy: routes packets
- Mesh engine → Sensor manager: queries telemetry
- Environment telemetry → Location providers: provides location
- Mesh client → Serial interface: connects by USB
- Mesh client → BLE interface: connects by BLE
- Mesh client → Wi-Fi interface: connects by Wi-Fi
- Radio bridges → Radio drivers: uses radio drivers
