# MeshCore

**MeshCore** is an open-source firmware project that turns low-cost [LoRa](https://www.edgepedia.org/lora) radio boards into an off-grid, encrypted text-messaging mesh network, designed to keep working when WiFi, cellular, and satellite internet are unavailable.<sup>[1](https://meshcore.io/)</sup> It runs on commodity development boards such as the nRF52840, ESP32, and RP2040 families, and on popular LoRa hardware including the Heltec V3 and V4, LILYGO T-Beam, T-Deck, and T-Echo, and RAK WisBlock devices.<sup>[2](https://wiki.meshcoreaus.org/books/doc-getting-started/page/doc-overview)</sup><sup> • </sup><sup>[3](https://meshamerica.com/2026/04/26/meshtastic-vs-meshcore-which-firmware-fits-your-network/)</sup> The firmware, tooling, and libraries are MIT licensed, and the app is developed in New Zealand with firmware developed in Australia.<sup>[1](https://meshcore.io/)</sup>

| Key fact | Detail |
|---|---|
| Purpose | Off-grid, encrypted text messaging over LoRa radio; works without WiFi, cellular, or Starlink<sup>[1](https://meshcore.io/)</sup> |
| License | MIT for firmware, tooling, and libraries<sup>[1](https://meshcore.io/)</sup> |
| Node types | Companion (end-user device), Repeater (relay-only), Room Server (persistent group chat host)<sup>[3](https://meshamerica.com/2026/04/26/meshtastic-vs-meshcore-which-firmware-fits-your-network/)</sup> |
| Routing | Flood routing to discover a path, then direct routing along the learned path; flood path field caps at 64 bytes<sup>[4](https://swaits.github.io/meshcore-spec/latest/17-routing.html)</sup> |
| Hop ceiling | Up to 64 hops with one-byte path hashes; 32 or 21 with two- and three-byte hashes<sup>[5](https://www.ajquick.com/articles/meshcore-vs-meshtastic-what-i-found-running-both)</sup> |
| Packet size | Maximum 255 bytes on the wire; payload up to 184 bytes<sup>[6](https://swaits.github.io/meshcore-spec/latest/01-wire-format.html)</sup> |
| Encryption | AES-128 in ECB mode with a 2-byte truncated HMAC-SHA256 MAC for encrypted payloads; advertisements and control packets are unencrypted<sup>[7](https://wiki.meshamerica.com/books/meshcore/page/meshcore-packet-format-and-encryption)</sup> |
| Interoperability | A MeshCore device and a Meshtastic device cannot exchange messages, even on identical hardware and frequency<sup>[8](https://meshcoreeurope.org/en/comparison/)</sup> |

## How the network is organized

MeshCore separates roles more sharply than most LoRa mesh systems. A Companion node is the end-user device, either a standalone unit with its own screen and keyboard such as the Lilygo T-Deck, or a radio paired over [Bluetooth](https://www.edgepedia.org/bluetooth) to a phone running the MeshCore app on Android or iOS.<sup>[2](https://wiki.meshcoreaus.org/books/doc-getting-started/page/doc-overview)</sup> A Repeater is a relay-only node, typically placed high with solar power to extend coverage.<sup>[1](https://meshcore.io/)</sup> A Room Server hosts persistent group chats, functioning like a bulletin board or chat room, and stores messages for offline clients, delivering them when the client reconnects.<sup>[2](https://wiki.meshcoreaus.org/books/doc-getting-started/page/doc-overview)</sup><sup> • </sup><sup>[9](https://simeononsecurity.com/articles/meshcore-vs-meshtastic-comparison-guide)</sup>

Messages can travel directly between companions in radio range, through repeaters, to a public or private channel, or to a Room Server.<sup>[2](https://wiki.meshcoreaus.org/books/doc-getting-started/page/doc-overview)</sup> The project ships four separate firmware images (companion, repeater, room server, and a standalone Ripple variant) rather than one image with configurable roles.<sup>[10](https://www.sumguy.com/meshtastic-vs-meshcore-2026/)</sup>

## Routing model

MeshCore supports two routing modes: flood routing and direct routing.<sup>[4](https://swaits.github.io/meshcore-spec/latest/17-routing.html)</sup> In flood routing, the sender emits a packet with an empty path, and each intermediate node that forwards it appends its hash to the path before retransmitting. Once the path hits the 64-byte MAX_PATH_SIZE limit, it can hold no additional node hashes, and forwarding of the packet ceases.<sup>[4](https://swaits.github.io/meshcore-spec/latest/17-routing.html)</sup> Only repeaters forward flood packets; client nodes stay silent, which keeps channel load low as node counts grow.<sup>[10](https://www.sumguy.com/meshtastic-vs-meshcore-2026/)</sup>

In direct routing, the sender provides the complete path. When handling a packet, every intermediate node verifies that it is the intended next hop, takes itself off the route, and passes the packet along to the following node; any node that is not the next hop drops the packet.<sup>[4](https://swaits.github.io/meshcore-spec/latest/17-routing.html)</sup> Paths are learned from floods: when a node receives a flood-routed packet from a peer, it caches the reversed path and uses it for subsequent direct-routed traffic. After receiving a flood-routed direct message, the receiver may proactively send a PATH_RETURN packet embedding the reversed path, converting later traffic from flood to direct routing.<sup>[4](https://swaits.github.io/meshcore-spec/latest/17-routing.html)</sup>

This flood-then-direct design reduces channel load significantly once paths are established, but the benefit assumes a stable topology. In mobile or rapidly changing deployments, learned paths break frequently and force re-floods, and in the worst case the network degrades toward continuous flooding plus failed direct sends.<sup>[7](https://wiki.meshamerica.com/books/meshcore/page/meshcore-packet-format-and-encryption)</sup> The theoretical hop maximum depends on path hash size: 64 hops with the default one-byte hashes, reduced to 32 or 21 with two- and three-byte hashes. MeshCore's own documentation notes that reaching the maximum in the real world would be difficult, since terrain, airtime, collisions, and repeater placement matter long before the ceiling.<sup>[5](https://www.ajquick.com/articles/meshcore-vs-meshtastic-what-i-found-running-both)</sup>

## Packet format and encryption

On the wire, each MeshCore packet is built from a header of 1 byte, a transport codes field of 4 bytes that may be omitted, a path length of 1 byte, a path of anywhere from 0 to 64 bytes, and a payload of anywhere from 1 to 184 bytes, totaling at most 255 bytes.<sup>[6](https://swaits.github.io/meshcore-spec/latest/01-wire-format.html)</sup> Packets carry one of four route types: FLOOD, DIRECT, TRANSPORT_FLOOD, and TRANSPORT_DIRECT, the transport variants adding a regional scoping prefix that lets nodes filter packets from outside their region.<sup>[7](https://wiki.meshamerica.com/books/meshcore/page/meshcore-packet-format-and-encryption)</sup><sup> • </sup><sup>[4](https://swaits.github.io/meshcore-spec/latest/17-routing.html)</sup>

For payload types that are encrypted—text, group, and request/response—MeshCore applies AES-128 under ECB, protecting each message with an encrypt-then-MAC scheme that authenticates via a 2-byte HMAC-SHA256 truncated tag placed ahead of the ciphertext. Advertisements and control packets are sent unencrypted, so not all traffic is confidential. The ECB mode and 16-bit MAC limit the strength of this protection.<sup>[7](https://wiki.meshamerica.com/books/meshcore/page/meshcore-packet-format-and-encryption)</sup> Direct messages use per-contact encryption rather than a shared channel key, so other nodes sharing the same repeater cannot decrypt a direct conversation; repeaters forward that ciphertext without decrypting it. Room servers, however, observe the message content for the rooms they host, so control of the room server matters. Neither MeshCore nor [Meshtastic](https://www.edgepedia.org/meshtastic) provides Signal-style forward secrecy.<sup>[9](https://simeononsecurity.com/articles/meshcore-vs-meshtastic-comparison-guide)</sup><sup> • </sup><sup>[11](https://wiki.meshamerica.com/books/faq/page/meshcore-or-meshtastic-which-should-i-choose)</sup>

## Comparison with Meshtastic

MeshCore is most often discussed alongside Meshtastic, the older and larger open-source LoRa mesh firmware. Both run on overlapping hardware in the same license-free sub-GHz bands using the same [Semtech](https://www.edgepedia.org/semtech) chips, but they make opposite choices about who repeats traffic.<sup>[10](https://www.sumguy.com/meshtastic-vs-meshcore-2026/)</sup> Meshtastic uses managed flooding in which every node rebroadcasts by default, giving zero-configuration self-healing at the cost of airtime contention in dense networks, with a default hop limit of 3 and a hard ceiling of 7. MeshCore instead reserves forwarding for dedicated repeaters and supports far longer paths.<sup>[10](https://www.sumguy.com/meshtastic-vs-meshcore-2026/)</sup><sup> • </sup><sup>[5](https://www.ajquick.com/articles/meshcore-vs-meshtastic-what-i-found-running-both)</sup>

The two firmwares do not interoperate: a MeshCore device and a Meshtastic device cannot exchange messages even on the same hardware model and frequency, and switching between them is a reflash rather than a purchase.<sup>[8](https://meshcoreeurope.org/en/comparison/)</sup><sup> • </sup><sup>[9](https://simeononsecurity.com/articles/meshcore-vs-meshtastic-comparison-guide)</sup> [Community](https://www.edgepedia.org/community) comparisons consistently describe Meshtastic as stronger for mobile, ad hoc groups, GPS and position tracking, sensor telemetry, and breadth of hardware support, and MeshCore as stronger for planned, fixed-infrastructure regional networks where airtime efficiency, quieter channels, and message persistence via room servers matter.<sup>[9](https://simeononsecurity.com/articles/meshcore-vs-meshtastic-comparison-guide)</sup><sup> • </sup><sup>[5](https://www.ajquick.com/articles/meshcore-vs-meshtastic-what-i-found-running-both)</sup> The practical choice is often local: whichever network already has active nodes and repeaters in the area is the one worth joining.<sup>[10](https://www.sumguy.com/meshtastic-vs-meshcore-2026/)</sup>

Airtime efficiency has regulatory consequences. In Europe, the 868 MHz band carries a 1 percent duty cycle limit under ETSI rules, about 36 seconds of transmit time per hour per channel, so MeshCore's lower transmission overhead produces a proportionally larger benefit in duty-cycle-restricted regions than in the United States, where 915 MHz operation has no hard duty cycle cap under FCC Part 15.<sup>[9](https://simeononsecurity.com/articles/meshcore-vs-meshtastic-comparison-guide)</sup>

## Development and releases

The firmware is developed in the open in the meshcore-dev GitHub organization, with releases published as separate companion, repeater, and room server images.<sup>[12](https://github.com/meshcore-dev/MeshCore/releases)</sup> Recent releases include v1.15.0 (April 19, 2026), which added Heltec V4.3, Heltec nRF Tracker, and GAT562 Mesh EVB Pro support along with GROUP_DATA binary packets; v1.16.0 (June 6, 2026), which added Station G3 support, extended 6-byte ACKs, and new flood-limiting configuration variables; and v1.17.0 (August 9, 2026), which migrated node configuration to JSON format, enabled CC310 hardware crypto on nRF52 targets, and reworked listen-before-talk collision handling. Version 1.17.1 followed on August 14, 2026 with fixes for FEM gain settings and the Heltec T096 transmit issue.<sup>[12](https://github.com/meshcore-dev/MeshCore/releases)</sup><sup> • </sup><sup>[13](https://blog.meshcore.io/2026/08/09/release-1-17-0)</sup><sup> • </sup><sup>[14](https://blog.meshcore.io/2026/08/14/release-1-17-1)</sup>

The project publishes a web flasher for installing firmware, a companion app for Android, iOS, Windows, Mac, Linux, and the web, and a public map of nodes.<sup>[1](https://meshcore.io/)</sup> The developers state that power consumption is optimized so that batteries last over a week on a single charge.<sup>[1](https://meshcore.io/)</sup>

## References

1. [MeshCore – Official Site](https://meshcore.io/)
2. [Overview, MeshCore Wiki (Unofficial)](https://wiki.meshcoreaus.org/books/doc-getting-started/page/doc-overview)
3. [Meshtastic vs MeshCore: which firmware fits your network, Mesh America](https://meshamerica.com/2026/04/26/meshtastic-vs-meshcore-which-firmware-fits-your-network/)
4. [MeshCore Protocol Specification, Section 17: Routing](https://swaits.github.io/meshcore-spec/latest/17-routing.html)
5. [MeshCore vs. Meshtastic: My Real-World Comparison, AJ Quick](https://www.ajquick.com/articles/meshcore-vs-meshtastic-what-i-found-running-both)
6. [MeshCore Protocol Specification, Section 1: Wire Format](https://swaits.github.io/meshcore-spec/latest/01-wire-format.html)
7. [MeshCore Packet Format and Encryption, Mesh America Library](https://wiki.meshamerica.com/books/meshcore/page/meshcore-packet-format-and-encryption)
8. [MeshCore vs Meshtastic, MeshCore Europe](https://meshcoreeurope.org/en/comparison/)
9. [MeshCore vs Meshtastic, SimeonOnSecurity](https://simeononsecurity.com/articles/meshcore-vs-meshtastic-comparison-guide)
10. [Meshtastic vs MeshCore in 2026, SumGuy's Ramblings](https://www.sumguy.com/meshtastic-vs-meshcore-2026/)
11. [MeshCore or Meshtastic... which should I choose, Mesh America Library](https://wiki.meshamerica.com/books/faq/page/meshcore-or-meshtastic-which-should-i-choose)
12. [Releases, meshcore-dev/MeshCore, GitHub](https://github.com/meshcore-dev/MeshCore/releases)
13. [Release v1.17.0, MeshCore Blog](https://blog.meshcore.io/2026/08/09/release-1-17-0)
14. [Release v1.17.1, MeshCore Blog](https://blog.meshcore.io/2026/08/14/release-1-17-1)

---
*Topic: Encyclopedia › Technology and the built world › Computing and digital systems › Networks and security › Networking fundamentals and architecture › Network topology and data-center networking › Mesh topologies*

*Initially written Sep 17, 2026 · Reviewed: Oct 15, 2026 · Edited: Oct 15, 2026 · Last review: Oct 15, 2026*

*Copyright 2026 EdgeChat AI, a subsidiary of Biostate AI.*

License: Edgepedia Community License 1.0, https://www.edgepedia.org/edgepedia/license
