← RFC

Loomwave vs Meshtastic and MeshCore — What Differs, and Why

Status: Positioning analysis for the RFC's early sections. Date: 2026-06-08. Grounded in the source-read analyses (meshtastic-routing-analysis.md, meshcore-routing-analysis.md, security-options.md, spectrum-channel-planning-note.md) and the Stage-2 measurements (design-decision.md). Every behavioural claim cites firmware source; every "Loomwave does X better" cites a measured sim-result-v<n>.

On tone. Meshtastic and MeshCore are not strawmen — they are the reason this field exists, and this work is built on reading their code with respect. Meshtastic made LoRa mesh accessible: its managed-flooding design is the right call for its goal — a small, casual, zero-infrastructure network that "just works," and it has by far the largest community and real deployments (the North Georgia network we calibrate against is Meshtastic). MeshCore advanced the state of the art on the two axes Meshtastic is weakest: it treats airtime as a budget and signs identity, and its flood-once-then-source-route model is genuinely more efficient at steady state. Loomwave does not claim these projects are wrong. It targets a different operating point — reliable delivery from 5 to 500 nodes with explicit hidden-node mitigation — which requires coordination they deliberately avoid. The honest framing is a tradeoff, not a verdict: Loomwave accepts optional coordination and more firmware complexity to buy scale and reliability, and it is engineered to be never worse than a Meshtastic-grade flood network when no coordinator is present (v6).


1. What Loomwave borrows (credit first)

Before what differs — what is kept, because it is good:

Borrowed From Where
SNR-weighted rebroadcast back-off + duplicate-cancel Meshtastic (RadioInterface.cpp:680, FloodingRouter) discovery-plane contention
Derived nonce (0 wire bytes, reconstructed from header) Meshtastic (CryptoEngine.cpp:288) per-packet AEAD
Explicit airtime token budget; signed adverts MeshCore (Mesh.cpp:392, advert Ed25519) discovery + admission control
Flood-to-discover, then route efficiently MeshCore (path-vector idea) discovery → scheduled data
Self-certifying addresses, signed announces, ANNOUNCE_CAP, distance-vector next-hop Reticulum routing + addressing

Loomwave is in large part a re-composition of the best ideas already in this ecosystem, with one structural addition (a coordinator) that the airtime math (Stage 1) and simulation (Stage 2) show is necessary to break the flood ceiling.


2. The differentiation table (improve / omit / prevent)

Legend: Improve = keep the goal, do it better · Omit = deliberately leave out · Prevent = actively stop a failure mode the others permit.

# Feature / design choice (as built) Meshtastic MeshCore Loomwave stance Why (with evidence)
1 Data-plane medium access Managed flooding + CSMA/CAD only; no scheduling (FloodingRouter, RadioInterface.cpp:644) Flood-to-discover, then source-routed direct; CAD + airtime budget Improve (+ TDMA data plane) CSMA cannot sense a hidden transmitter, so it cannot fix hidden node; TDMA solves it by construction — 99% vs 23% delivery at K=100 (v3). Both projects' contention is kept as Loomwave's discovery plane.
2 Behaviour at scale (data) Every packet floods (ReliableRouter inherits FloodingRouter) → broadcast storm Discovery floods; steady-state direct is efficient, but mobility re-floods Prevent flood collapse Pure flooding saturates at N≈11 on LongFast (v1); metro Atlanta already migrated LongFast→MediumFast under exactly this pressure (real data, v2).
3 Hidden-node handling None beyond CSMA/CAD back-off None beyond CAD + airtime budget Prevent hidden-node loss The elevated-relay collision domain loses 15/27/55/77% at K=10/20/50/100 under CSMA; TDMA removes it (v3); even the coordinator-free fallback (epoch-hash) beats CSMA because it needs no carrier sense (v6).
4 Routing control cost Flooded (O(N²)); next-hop hint is best-effort, bolted onto flooding Source path in header; per-relay stateless (elegant), but path brittle to topology change Improve (INFRA-aggregated DV, O(N)) Mesh-wide flooded link-state hits 1441% of channel at N=100 (collapsed); INFRA-aggregation keeps control O(N), ~23× cheaper, tunable to ~12% (v5). Loomwave keeps a small next-hop table rather than MeshCore's full in-header source path.
5 Per-packet authentication Broadcasts: none — AES-CTR with channel PSK, no auth tag (security-options.md §2.1; a known weakness — anyone with the channel key can forge). DMs: Curve25519 + 8-byte CCM tag 2-byte MAC on data (CIPHER_MAC_SIZE=2) — forgery ~1/65536, very aggressive truncation Improve / Prevent Authenticate every packet with an 8-byte AEAD tag + derived nonce (design-decision.md §6). Prevents broadcast forgery (Meshtastic) and the weak-tag forgery surface (MeshCore), at ~16 B/packet — measured ~0% beyond the MAC budget.
6 Replay protection Derived nonce gives freshness; no standalone data replay window Advert timestamp (weak freshness); data replay separate Improve Sequence number + sliding-window replay, no synchronised clocks required (security-options.md).
7 Spectrum / channel selection Default channel = hash of channel name, no RF awareness (RadioInterface.cpp:970) → all default nodes pile onto one frequency Single-channel by default Prevent the pileup Decouple modulation from frequency; measurement-based adaptive channel selection with INFRA as channel authority (spectrum-channel-planning-note.md).
8 Modulation under density Fixed per channel; operators migrate manually Fixed per channel Improve (topology-driven adaptive SF) INFRA picks per-cell SF from link budget + spatial reuse → ×16 capacity, 500-node 1 msg/4 min → 8 msg/min (v4). Automates what operators do by hand.
9 Identity / addressing NodeNum from hardware; dedup on (sender,id) Pub-key identity; content-hash dedup; truncated node-hash paths Improve (self-certifying addresses) Reticulum-style self-certifying addresses bind identity to key — borrowed, not invented.
10 Traffic prioritisation Priority queue (MeshPacketQueue.cpp) sendPacket priority 0–5; adverts lowest Improve (cross-layer, 3-bit class) A 3-bit traffic-class field acting across 5 layers at ~0 airtime cost; high priority ⇒ scheduled plane ⇒ collision-free (traffic-prioritization-note.md). Builds directly on both projects' priority queues.
11 Native protocol interop Omit (v1 non-goal) Loomwave is not wire-compatible with either; a gateway bridge is acceptable later (CLAUDE.md non-goals). This is the one place Loomwave deliberately leaves the ecosystem — a real cost, taken knowingly.
12 Zero-coordinator operation Core strength: floods, no infrastructure Core strength: no per-relay state Keep, don't require more Loomwave's full benefit needs an INFRA coordinator — but it degrades to coordinator-free epoch-hash/CSMA and is never worse than Meshtastic there (v6). The pure-LoRa, no-infrastructure mandate is preserved.

3. The three big differences, in prose

(a) Loomwave adds a coordinator; the others refuse one — and that is the whole ballgame. Meshtastic and MeshCore are peer-symmetric by conviction: no node is special, nothing must be deployed, the mesh self-organises. That is a feature, and it is why they spread. But it is also why both inherit the hidden-node problem and the flood ceiling — with no coordinator, there is no way to schedule, and CSMA physically cannot arbitrate transmitters that cannot hear each other. Loomwave introduces an optional INFRA coordinator (time/slot/modulation/channel authority) and gets TDMA, O(N) routing, and adaptive capacity in return (v3,v4,v5). The design discipline is that the coordinator is a ceiling, not a dependency: remove it and Loomwave falls back to epoch-hash — still better than CSMA for hidden nodes — and in the worst case to a Meshtastic-grade flood (v6).

(b) Loomwave authenticates everything; the others don't (Meshtastic) or barely do (MeshCore). Meshtastic's unauthenticated broadcasts are a known, deliberate simplification (the channel PSK gives confidentiality, not integrity); MeshCore's 2-byte tag is a deliberate airtime economy. Loomwave takes the position that on a shared, spoofable medium every packet should be authenticated, and shows it costs ~16 B with a derived nonce and 8-byte tag — affordable precisely because of Meshtastic's own derived-nonce trick (security-options.md).

(c) Loomwave treats spectrum and modulation as managed resources; the others treat them as static config. Meshtastic literally derives its default frequency from a hash of the channel name with no RF awareness (RadioInterface.cpp:970), so every default network collides on one frequency. Loomwave makes the INFRA the channel/modulation authority and selects both from measurement (v4, spectrum-channel-planning-note.md).


4. What Loomwave gives up (the honest other side)

Differentiation cuts both ways; the RFC should say so plainly:

Summary for the RFC intro: Loomwave is not "Meshtastic but better" — it is a different bet. Where those projects optimise for zero-infrastructure simplicity and accept a low scaling ceiling, Loomwave optimises for reliable delivery at scale with hidden-node mitigation and accepts an optional coordinator and more complexity — while guaranteeing it never performs worse than a flood network when that coordinator is absent.