MeshCore Firmware Distributions
Accurate as of 13 July 2026. Firmware projects move fast. Every version number, device count and current figure below should be re-checked against the configurator and each project's releases page before you rely on it.
There are two separate questions to answer before you flash a MeshCore node, and people often confuse them.
Which distribution do you flash? That is what this page covers. Stock MeshCore is one option. Several independent projects also build MeshCore firmware, each with a different priority: lower power draw, a touch UI, betterdifferent retry behaviour, a different operating system underneath. Some are forks of the upstream code, some are ports, and two are separate applications that link MeshCore as a library. "Distribution" is our umbrella word for all of them.
Which role does the node run? Companion, Repeater, Room Server and so on. That is covered on MeshCore Firmware Variants Explained. Every distribution below ships some subset of those roles, so you pickPick a distribution first, then a role within it.
The six distributions here are the ones offered by the Mesh America Device Configurator. There are other MeshCore forks in the wild; these are the ones you can flash from our tooling.
TheyFirst: none of this is permanent
Flashing is reversible. If you do not like a distribution, flash a different one. You are not going to brick a node by changing firmware through the web flasher, and going back to stock is always available.
What you can lose is state. A node's identity keypair, its contact list and its saved radio settings live in flash storage, and some install paths wipe that storage while others preserve it. A full or "clean" install typically resets the node to a new identity, which means your contacts will see you as a new node and will have to re-add you. Assume a distribution change resets your identity unless the project says otherwise, and write down your radio settings (frequency, bandwidth, spreading factor, coding rate) before you start so you can put them back.
Start here before you flash anything: Flashing MeshCore Firmware, and for a node you cannot physically reach, Flashing MeshCore Firmware OTA.
Do they all speak the same protocolinteroperate?
ThisThat is the partquestion thateveryone mattersasks, mostso andhere theis parta peoplecareful worryanswer about.rather than a comfortable one.
All six runare built on the MeshCore protocol and all six are intended to interoperate on the same mesh. AEach project says so about itself: ZephCore repeaterdescribes itself as "aiming for full protocol compatibility" with the Arduino firmware and the mobile apps, WADAMESH says it uses "the same MeshCore protocol and phone-app companion as stock", and MCLite says it is compatible with other MeshCore devices and the official apps.
Those are the projects' own claims about themselves. We are not aware of any independent, published interoperability test across all six, and we have not run one. Treat the general claim as well-founded but not proven.
There is at least one known case where compatibility genuinely breaks, and it is not hypothetical:
path.hash.mode setting controls how many bytes a node uses for path hashes in the adverts it sends. Upstream's own CLI documentation warns that firmware v1.13.0 and older will path.hash.mode=2 (3-byte) as a What doeselse varyvaries between distributions is settings, defaults, and how much airtime a node uses.spends. Those can affect the mesh even when theevery packetspacket themselves areis valid. The Keymind Cascade section below has a concreteworked example.
The six at a glance
| Distribution | Maintainer | What it is | Roles | Pick it when |
|---|---|---|---|---|
| MeshCore Official | MeshCore core team | Upstream firmware | Companion, Repeater, Room Server, GUI, KISS | You want the reference build. |
| EasySkyMesh PowerSaving | IoTThinks | Fork tuned for power | Companion (BLE), Repeater, Room Server | Solar or battery repeaters where current draw is the limiting factor. |
| Keymind Cascade | mikecarper | Companion (BLE/USB/Wi-Fi), Repeater, Room Server, Terminal Chat, Sensor | You | |
| MCLite | laserir | Standalone handheld | Companion only | T-Deck or T-Watch, and you want the device usable without a phone. |
| WADAMESH | ALLFATHER BV | Touch UI front | Companion only | Touchscreen hardware, and you want an on-device map and chat. |
| ZephCore | liquidraver | Port to Zephyr RTOS | Companion (BLE/USB/TCP), Repeater, Room Server, Observer | Power-sensitive nodes, or a board only ZephCore supports. |
Each distribution ships its own selection of roles. Some build roles the official flasher does not (Keymind Cascade builds Sensor, Terminal Chat and Companion Wi-Fi; ZephCore builds a TCP companion and an Observer). It is not a strict subset of the official set.
MeshCore Official
The upstream project, maintained by the MeshCore core team at github.com/meshcore-dev/MeshCore and originally, created by Scott Powell (Ripple Radios). and now maintained by the MeshCore core team. MIT licensed. This is what flasher.meshcore.io serves, and what the Mesh America configurator serves under "MeshCore Official".
- Roles built by the official flasher: Companion (BLE), Companion (USB), Repeater, Room Server,
plusGUIbuilds(and a GUI-with-SD variant) for screen-equippedboardsboards, and a KISS radio build. Seven role keys, exactly. - Hardware:
roughly59 device entries across 12 manufacturers in the current flasher catalog, covering Heltec, LilyGo, RAK, Seeed, Elecrow and others. - Why start here: it is the build every other project tracks. Bug reports get triaged against it, the phone apps are developed against it, and the community assumes it unless told otherwise.
Note on Sensor firmware. The upstream repository contains a simple_sensor example application, butso the source exists. The official flasher does not build it.it: there is no Sensor role in the flasher catalog, and no sensor binaries in the upstream releases. If you want a prebuilt sensor binary you haveeither to getbuild it yourself or take one from a fork (Keymind Cascade ships them) or build it yourself.. See MeshCore Sensor Nodes for how sensor telemetry actually works.
Note on Wi-Fi companion. Same story. Wi-Fi companion is a real, separate build, but the official flasher does not ship it, because the SSID and password are compiled in. You build it yourself or take a prebuilt binary from a fork.
EasySkyMesh PowerSaving
Maintained by IoTThinks at github.com/IoTThinks/EasySkyMesh, with the source changes in github.com/IoTThinks/MeshCore. The project's own description of it:description:
PowerSaving firmware is MeshCore firmware that has been highly optimized for lower power usage. Functionally it works the same as MeshCore, and eventually many of the changes make their way into the MeshCore official firmware.
That last clause is the importantproject's one.stated Thisintent. isWe have not aindependently permanentconfirmed divergence.which Itof isits changes have actually been merged upstream, so read it as an aim rather than a proving ground, and its power work has a track record of landing upstream.record.
- Roles: Repeater, Companion (BLE), Room Server.
- Hardware:
around42 device entries,bothsplit evenly between nRF52 and ESP32, including the GAT562 kits, Heltec T114 and MeshSolar, LilyGo T-Echo, and RAK boards. - Versioning: its own scheme, currently the PowerSaving16 series.
About the power numbers. The headline claim on the PowerSaving15 release wasis 15titled mA"15mA for ESP32 BLE companions,Companions and no timetime-drift driftfor repeaters". Read the release's own table before you budget a solar install on repeaters.that
WeSee have a separate page on this one:also EasySkyMesh: Third-Party Power-Optimized MeshCore Fork. Note that EasySkyMesh is not available through the official MeshCore flasher.
Keymind Cascade
A fork of meshcore-dev/MeshCore by GitHub user mikecarper, on the keymindCascade branch. MIT licensed,licensed tracking(the copyright line is inherited from upstream, Scott Powell / rippleradios.com). Tracks upstream v1.16.x. This is the most involved of the six and the one that needs the most care, so it gets the most space.
It is explicitly development firmware. Every GitHub release is marked pre-release, every version string containscarries -dev-, and builds are pinned to a commit hash rather than a stable tag.tag, and some releases are flagged pre-release. It moves fast. Treat it accordingly.accordingly, and do not put it on a node you cannot easily reflash.
What "Halo/Keymind retry tuning" does
The core idea: after a node transmits a packet, it listens for a neighbour to retransmit it. If it does not hear that echo, it assumes the packet was lost and sends it again. There are separate knobssettings for direct-routed and flood-routed packets, and three shipped presets:
| Preset | Direct retries | Flood retries | Intended for |
|---|---|---|---|
infra | 4 | 1 | Busy backbone sites |
rooftop | 15 | 3 | Fixed rooftop nodes |
mobile | 15 | 15 | Handhelds |
This trades airtime for reliability, and thatthe trade is real. When mikecarper proposed the feature upstream (MeshCore discussion #1625), contributor samm-git pushedobjected: back: it"This could easily flood the air in noisy areas, where peers hear you but you do notdon't hear the echo." mikecarper's answerreply was that"Yep. That's why it can be turned off.off," and he acknowledged in the same thread that the feature "will use up more airtime". Both positions are right.correct. If you putPut a mobile preset on a busy repeater and you will hurtdegrade your local mesh.mesh for everyone on it. The full settings reference is at docs/halo_keymind_settings.md on the branch, and it is a genuinely good document.branch.
What "Cascade defaults" means
Nothing exotic. It is a build-time profile that ships different factory defaults. EveryThese oneare of these is a normalordinary MeshCore CLIsettings, settingnot younew could set by hand on stock firmware:inventions:
path.hash.mode=2 loop.detect=minimal rxdelay=2
agc.reset.interval=8 advert.interval=0 flood.advert.interval=83
multi.acks=1 companion.manual.add=1 companion.autoadd=0
(advert.interval=0 is also upstream's stock default, so it is not a Cascade change.) Two of thosethese will surprise you if you do not know they are set:
companion.autoadd=0means your contact list does not fill itself in from adverts. You add contactsmanually.by hand. New users read this as a broken radio. It is not.path.hash.mode=2uses 3-byte pathhashes.hashesUpstream'sinowntheCLI docs warn thatadverts thiscapsnodefloodsends.propagationTwoatconsequences.21Ithopsreduces(downthe maximum path this node's adverts can record from 64athops to 21 (thedefault)pathandfieldthatis a fixed 64 bytes, so bigger hashes means fewer of them). And, per upstream's warning, nodesrunningon firmware1.v1.13.0 or older will drop packets carrying multibytepathhashes.hashes.Upstream also notes the setting "has no impact on what packet ID/hash size this repeater forwards", so it governs what this node emits, not what it relays. Onaan all-modern mesh this is fine. On a mixed-vintagemeshmesh,itcheckisbeforesomethingyouto check.deploy.
Roles, builds and gotchas
- Roles: Companion (BLE), Companion (USB), Companion (Wi-Fi), Repeater, Room Server, Terminal Chat, Sensor.
Seven, against the official flasher's smaller set.Terminal Chat, Sensor and Companion Wi-Fi are not Keymindinventions;inventions.theyThey are upstream MeshCoreexamplebuildapplicationstargets that the official flasher does notbuild.prebuild for you. Keymind's contribution is shipping them asprebuiltready binaries, which is arealgenuine convenience. - Hardware: the widest catalog of the six,
roughly84 devices across 23 manufacturers. - Two builds:
a standard onestandard, and a Loggingone.buildThe Logging buildthat adds diagnostic loggingandplus the MQTT observerbuilds.binaries. - Gotcha: the Logging catalog
containslists no BLE companionbuildsbuilds,at all. Ifso youwantcannot select one from the configurator, even though the Logging release does contain BLEand logging together, this catalog cannot give it to you.binaries. The repo does not say whether that gap is deliberate. - Gotcha:
as of writing,the catalogs the configurator serves are pinned a couple of point releases behind the fork's newest builds.
Unverified:Not documented anywhere: the repository does not state anywhere what "Halo", "Keymind" orand "Cascade" actually refer to,to. The repository does not say and there is no third-party coverage of this fork. We are not going to guess. Wire compatibility with stock MeshCore 1.14 and newer is a reasonable inference (it is the same codebase, the retry logic is local transmit behaviour, and the Cascade settings all exist upstream), but no primary source states it outright.
MCLite
Maintained by GitHub user laserir at github.com/laserir/MCLite. MIT licensed. This one is notNot a fork: it is a separate application that pulls MeshCore in as a library and puts its own interface on top. Pre-1.0, currently the 0.4.x series, and described by its own author as experimental software, not a certified radio product.
The point of MCLite is a radio that works on its own. No phone, no pairing, no account. Turn it on and message people.
- Role: companion only. It is not a repeater, room server or sensor. It talks to those.
config.json on the SD card, built with an offline HTML config tool. Fleet Mode generates a folder and keypair per device, so one person can configure a whole group and hand out cards. Boot with a blank card and it generates its own identity and a usable default config.
Features stock does not Compatibility:Compatibility, with the caveat. fullyMCLite says it is compatible with other MeshCore devices and with the official iOS and Android apps.apps, Itand alsoit actsworks as a normal companion radio over BLE, Wi-Fi or USB.USB (one
transport, one client at a time). But "fully compatible" overstates it, and the project's own documentation shows why:
Pre-1.
path_hash_mode at 0 WADAMESH
Maintained by ALLFATHER BV (Belgium) at github.com/ALLFATHER-BV/wadamesh, with a project site at wadamesh.com. GPL-3.0-or-later. Like MCLite it is an application rather than a fork: an LVGL touch interface built against an MIT-licensed MeshCore fork the same orgorganisation maintains.
Its own summary: a full touch-screen interface for MeshCore, with the same protocol and the same phone-app companion as stock, just a richer front end on the device.
Hardware:Role: companion only, with an on-device UI.
Everything is beta. There is no 1.0;0. releasesReleases are numbered beta_NN. andbeta_40 was the current stable at the time of writing, with beta_41 through beta_44 already out as pre-releases on the test channel moves quickly. The current stable is beta_40.channel.
The Heltec V4 is the constrained board. It has 2 MB of PSRAM and no SD card slot, and several features are reduced or absent on it.it as a result. If you have the choice, the T-Deck is the better WADAMESH target.
ZephCore
Maintained by GitHub user liquidraver at github.com/liquidraver/ZephCore. MIT licensed. This is theThe most architecturally different of the six: a port of MeshCore from Arduino to the Zephyr RTOS (a real-time operating system), aiming at full protocol compatibility with the Arduino firmware and the MeshCore mobile apps.
The reason that matters is power. The Arduino build runs a cooperative loop() and the CPU busy-waits unless something explicitly sleeps it. ZephCore is event driven, so the CPU sits in a wait-for-interrupt stateidles between events.events instead of spinning. On top of that:
- LoRa
RXreceive duty cycling.CAD-basedThereceiveradiowindowingsleepstakesbetween short listening windows instead of receiving continuously. The project reports this cutting LoRa receive current from roughly 10 to 15 mA down to roughly 3 to 5 mA.OnThat is the project's own figure, with no stated method, and we know of no independent measurement. It is off bydefaultdefault.forYouSX1262turncompanionitandonrepeaterperbuilds.nodeNotatenabledruntimeforwithset rxduty on. It is not available on LR1110 (a mid-preamble lock issue) orSX127x.SX127x radios. If you are choosing ZephCore for battery life, this is the switch you came for, and it is not thrown for you. - Adaptive contention window. Stock MeshCore has three static delay settings (
txdelay,rxdelay,direct.txdelay) that apply the same retransmit jitternoregardlessmatter what theof localconditions are.conditions. ZephCore replaces them with a system that measures actual contention: it counts how many neighbours retransmit the same flood packet it just sent, and sizes its delay from that. Near-zero delay in a quiet linear chain, more in a dense cluster.ThisThe project states this is local behaviour with nowirechangeschanges,to what goes over the air, so it works alongside Arduino repeaters. - Adaptive Power Control. Compiled in, off by default.
TurnEnable itonper node and itdropsreducesTXtransmit power when echoSNRsignal-to-noise shows excess margin.
- Roles: Companion (BLE, USB and TCP), Repeater, Room Server, and an ESP32-only Observer role that publishes received packets to MQTT over Wi-Fi. The Mesh America configurator currently serves the companion and repeater builds.
- Hardware:
around31 deviceentries,entriesandin thelistcatalog.includesThe README additionally lists boards you can build for yourself but which are not in theothercatalog,distributions do not reach, such asincluding the nRF54L15 and the EFR32MG24. Do not go looking for those in the configurator. - Worth knowing: the README
statesdiscloses,plainlyin its own words, that the project isalmost"99,9%entirelyclaudeAI-assistedandcode,cursorleaningbacked" and relies heavily on the official MeshCore repository. That is the maintainer's owndisclosure,note, not our characterisation. Judge itonthesamewaytermsyouaswould judge anyotherfirmware: read the code, test before you deploy.
How to choose
Ordinary advice, in order:
- Default to MeshCore Official. If nothing below
applies to you,applies, flash the official build and stop reading. If your board has a screen, the official GUI build is included. - Solar or battery repeater
withon a tight power budget?Look atEasySkyMesh PowerSaving or ZephCore. Both attack idle draw, from different angles. Size your battery off the figure for your specific board, not the headline. If you use ZephCore, remember to actually turn onrxduty. - T-Deck, T-Watch or
aanother touchscreen board, and you want it usable without a phone? MCLite for thekeyboard-and-keyboard and SOS, field-deployment angle. WADAMESH for themap-and-map and touch-UI angle. Both are companion-only and both are pre-1.0. - Your board is not on the official flasher? Check the Keymind Cascade and ZephCore catalogs. Between them they cover a lot of hardware upstream does not build for.
- You want a
Sensor orSensor, Terminal Chat or Wi-Fi companion binary without setting up a build environment? Keymind Cascade prebuilds them. Remember it is development firmware, and read its retry section before putting it on anything that repeats.
Whatever you pick, the node still has to be on the right frequency, bandwidth, spreading factor and coding rate for your region and your local mesh. Firmware choice does not change that, and gettinga itmismatch wronghere is stilla the mostvery common reason a new node hears nothing.nothing at all. Get those four values from your local mesh community before you go looking for firmware bugs.
A note on maintenance
FiveThese are community projects of varying size. Upstream MeshCore has a large contributor base; ZephCore and WADAMESH have several contributors each; MCLite and EasySkyMesh are very small teams. Several of these six are single-maintainer projects. Severaldistributions are explicitly beta or pre-release.
That is not a reason to avoid them,them. but itIt is a reason to keep a stock build handy, to know how to reflash a node you cannot reacheasily easily,reach, and to think twicehard before putting experimental firmware on a repeater at the top of a tower. See Flashing MeshCore Firmware OTA before you deploy anything you cannot get back to.
Sources: the Mesh America Device Configurator provider catalogs (apps.meshamerica.com); the official MeshCore flasher catalog (flasher.meshcore.io); MeshCore discussion #1625; and the repositories, release notes and documentation of each project: github.com/meshcore-dev/MeshCore, github.com/IoTThinks/EasySkyMesh, github.com/mikecarper/MeshCore (branch keymindCascade), github.com/laserir/MCLite, github.com/ALLFATHER-BV/wadamesh, github.com/liquidraver/ZephCore.
FirmwareWhere projectsa movefigure fast.comes Devicefrom counts,a versionproject's numbersown testing and rolehas availabilitynot werebeen accurateindependently whenverified, this page wassays written and should be checked against the configurator and each project's releases page before you rely on them.so.