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).
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.
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. |
(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).
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.