A deep dive — what it is, how it compares, and the awkward parts.
| Meshtastic | MeshCore | |
|---|---|---|
| Packet format | Protobuf; field-extensible | Compact binary, fixed fields per opcode |
| Routing | Hop-count flood with implicit deduplication | Path-aware: floods discover paths, unicast follows them |
| Companion link | Protobuf over BLE/Serial/TCP | Length-delimited binary opcodes over BLE/Serial |
| Roles | Generic node + optional router | Explicit roles: chat / repeater / room / sensor |
| Onboarding | Plug in, get on a default channel | Same, but channels are explicit and named (Public is the well-known one) |
| Telemetry | Native (battery, env, GPS) on the message bus | Cayenne LPP payload via dedicated request/response |
| Crypto | Per-channel AES-CTR + per-DM ECDH | Per-channel AES-CTR + per-DM ECDH; signed adverts |
Neither is “better” in the abstract — they make different tradeoffs. MeshCore tends to be more compact on the air; Meshtastic tends to be more featureful per node.
Adverts carry the role byte, so any client can colour / weight nodes accordingly.
Frames are [opcode][payload], one frame per BLE notification.
A short tour of the opcodes:
0x01 APP_START — handshake.0x02 / 0x03 — send DM / channel message.0x05 SELF_INFO — device-side identity + radio tuple.0x07 — broadcast your advert (with or without flood).0x0E SET_ADVERT_LATLON — push your location to the radio.0x14 BATT_AND_STORAGE — battery telemetry.0x27 SEND_TELEMETRY_REQ — pull telemetry from a peer (or self).0x83 / 0x88 / 0x8B — async pushes: messages waiting, RF log, telemetry response.Plus the modern companion v3 frames carry SNR / RSSI inline, which is what makes signal-aware UIs possible.
The firmware is a single C++ codebase with per-board variants under variants/.
2025–2026 additions added in MeshCore v1.15 (Apr 2026): Heltec Mesh Node T096, muzi works R1 Neo, GAT562 Mesh EVB Pro. Solar-integrated outdoor nodes from Seeed, Heltec, and RAK WisMesh are now standard infrastructure options. See the Devices 2025–2026 deck for the full hardware index.
What happened in April 2026, in detail.
In late April 2026 the MeshCore community fractured. The shorthand “the split” refers to a public falling-out between the core team (Scott et al.) and Andy Kirby, a previously-active contributor.
Read the team’s account: blog.meshcore.io/2026/04/23/the-split
The disagreement is worth understanding for two reasons:
meshcore.io site, the GitHub org, the trademark, and the Discord are all currently contested or freshly-relaunched.meshcore.co.uk domain and Discord server, and (per the team) copied the team’s visual design.meshcore.io, with blog.meshcore.io and a new Discord. The trademark situation remains unresolved.The team’s stated position is human-written as a core value. The split therefore reads as much about disclosure as it does about authorship — the team’s objection is to a long period of undisclosed AI involvement, not (necessarily) AI assistance itself.
Reasonable people read this story differently. A few framings to hold in tension:
Where you land probably depends on which value you weight first: transparency, authorship, or pragmatism.
The firmware is open. The official mobile app is not.
docs/companion_protocol.md in the same repo. (Incomplete; the source is the source of truth.)This is a textbook opencore split: the protocol and reference hardware are open, the polished consumer surface is not. Reasonable from a sustainability standpoint, frustrating if you want to (a) inspect what the app does on your device, (b) extend it, or (c) build something the official app intentionally doesn’t.
Two community efforts try to fill the closed-app gap:
Both are healthy for the ecosystem. Neither replaces the other.