Status: Stage 1 data-scoping (pre-sim). Characterizes the MeshCore real-world data as a
potential second, independent calibration/validation network alongside the North Georgia
Meshtastic data (north-georgia-*). Covers (1) the open node-census API — pulled and
characterized — and (2) scoping of the packet-traffic sources (MeshCore Analyzer / MQTT). Pull:
/workspace/reference/meshcore.map/nodes_<stamp>.json (snapshot 2026-06-05).
⚠ DATA-USE STANCE (read first). The LetsMesh maintainer is opposed to data mining and does not offer an API suited for bulk collection. We will not scrape the Analyzer or build an automated MQTT collector against LetsMesh/MeshMapper. Manual browsing by a human is fine; automated pulling is not. The only data collected here is a one-time census snapshot from the separate official
map.meshcore.io(§2) — no ongoing polling. If real MeshCore traffic is ever needed, the right move is to ask the maintainer's permission / contribute as an observer, not to mine the feed. This note governs everything below.Update (2026-06-05): the maintainer's forum thread explicitly invites people to ask, and a request for a possible data dump has been sent through that channel — pending response. Any use of LetsMesh data waits on an explicit yes; until then the stance above stands unchanged.
MeshCore is the other reference stack Loomwave analyzed (meshcore-routing-analysis.md). Real
MeshCore data is valuable in ways the Meshtastic data is not:
| Source | Data | Access | Usable now? |
|---|---|---|---|
map.meshcore.io/api/v1/nodes |
node census + real freq/bw/cr/sf + pubkeys |
open JSON | ✅ pulled |
analyzer.letsmesh.net/packets |
real packet traffic | Cloudflare JS-challenge (browser-only) | 👀 manual browse only |
| MeshCore MQTT (LetsMesh / MeshMapper) | live packet feed (what the analyzer ingests) | WS+TLS:443, auth token | 🚫 off-limits — do not mine |
map.meshcore.io, official map, separate operator from LetsMesh) is
open; a single snapshot was taken for characterization — no repeated polling.cf-mitigated: challenge) — fine to browse by a
human, not scriptable. We will not attempt to defeat the challenge.| total | active (<7 d) | |
|---|---|---|
| nodes | 47,379 | 16,621 (35%) |
| Repeater | 35,443 (75%) | 15,334 (92%) |
| Client | 9,457 | 532 |
| Room Server | 2,479 | 755 |
public_keys for 47,379 nodes — confirms
MeshCore's pubkey-as-identity model in the wild, which supports Loomwave's self-certifying
address choice (borrowed from Reticulum/MeshCore).⚠ Repeater-dominance is partly an observability artifact. The map is built from adverts, and MeshCore Repeaters advertise persistently (always-on infrastructure) while Clients (companion/BLE, often mobile) advertise rarely. So "75% repeaters (92% of active)" means the repeater backbone is well-mapped, not that real deployments are 92% repeaters. Treat the Client count as a severe under-count. The true role ratio is unknown from this source — but even discounted, MeshCore is clearly far more repeater/infrastructure-heavy than Meshtastic's ~8% relay ratio, which is the structurally interesting point for Loomwave's INFRA model.
Unlike mtnme (which exposed only a preset name), MeshCore publishes per-node freq/bw/cr/sf.
Active-node distribution:
Top active modulation combos:
| count | combo |
|---|---|
| 6,577 | SF8 / BW62.5 / CR4-8 / 870 MHz (EU robust) |
| 3,015 | SF7 / BW62.5 / CR4-5 / 911 MHz (US fast) |
| 1,775 | SF8 / BW62.5 / CR4-5 / 870 MHz |
| 1,059 | SF7 / BW62.5 / CR4-8 / 911 MHz |
Why this matters: these are operating points the US-Meshtastic data never touches. Narrow
62.5 kHz BW makes symbols ~4× longer than BW250 at the same SF, so airtime is very different —
a direct, real-world stress test of the airtime model (mac-layer-options.md §1) across the
parameter space operators actually use. The sim PHY should validate against these combos, not
just the Meshtastic presets.
Densest ~37 km cells among active nodes — ready-made real "dense" scenarios:
| active nodes | locale (approx) |
|---|---|
| 194 | Seattle (47.67, −122.33) — PugetMesh |
| 166 | Moscow (55.67, 37.67) |
| 149 | Netherlands/Randstad (52.0, 4.33) |
| 104 | Portland (45.67, −122.67) |
| 91 | Warsaw (52.33, 21.0) |
| 90 | Lisbon (38.67, −9.33) |
Seattle/Portland (PugetMesh) are large, active, well-documented MeshCore communities — a strong
candidate for a meshcore_metro sim scenario, complementing the north_georgia Meshtastic one.
For completeness: the packet feed behind the Analyzer is MQTT (LetsMesh
mqtt-{us,eu}-v1.letsmesh.net / MeshMapper mqtt.meshmapper.net, WS+TLS:443; topics
meshcore/{IATA}/{PUBLIC_KEY}/packets; auth token required).
We are not building a collector against it. The LetsMesh maintainer opposes data mining and the access is gated accordingly (Cloudflare on the web UI, auth tokens on MQTT) — that is a clear signal to respect. Automated harvesting would be both against the maintainer's wishes and poor community citizenship. Decision: do not pull MeshCore traffic. If, much later, real MeshCore traffic genuinely becomes necessary for validation, the path is to ask the maintainer directly and/or run our own observer node contributing back — not to scrape the shared feed.
PacketSeen
export (already requested) or our own measurements — not from mining LetsMesh.