v4.5.0 — Live RF Coverage Map
Live network coverage, baked server-side — an always-on map layer that shows where your whole mesh can actually be heard, rendered against real terrain and refreshed as nodes move.
New: Live Coverage map layer
Where the interactive Coverage tool answers "what can this pin reach?", the new live layer answers it for every node at once, continuously. A dedicated coverage worker renders each node's predicted RF coverage against real terrain and clutter, composites the results into map tiles, and MeshInfo serves them as a fast, always-on layer — no clicking, no waiting, the same view for everyone.
- Whole-mesh coverage — every positioned node's ITM (Longley–Rice) margin is computed against real terrain (Tilezen DEM) plus NLCD land-cover, ETH canopy, and JRC/GHS building clutter, then composited into a single coverage surface
- Per-modem-preset layers — separate coverage for
all,LongFast,MediumFast, and the rest; toggle to the preset you care about (nodes grouped by their channel's modem preset) - Live over SSE — as nodes move, appear, or age out, only the affected tiles rebake and the layer updates in place — no reload
- Hover lookup — hover any point to see which nodes reach it, pulled from the same baked data
- Antenna height from telemetry — each node's height comes from its reported altitude (AGL) instead of a flat assumption; router-role nodes model out to 300 km
- Modeling — the coverage pill spells out the assumed receiver, and a toggle hides node markers so you can read the paint underneath
Under the hood
- Incremental bakes — a per-node margin cache re-renders only the nodes that actually moved; a streaming compositor with write-through tile flush keeps worker memory flat regardless of mesh size
- 100 m paint via per-node slices, parallel render workers, and z5–z11 tile pyramids
Deploying it
- New
coverage-workerservice — this release adds a container that does the baking. To turn the layer on: add thecoverage-workerservice (seedocker-compose.yml), set[coverage] enabled = true(+tile_dir) inconfig.toml, and MeshInfo serves tiles at/tiles/coverage/{group}/… - Tune for your host via
COVERAGE_*env — recency window, meters/pixel, DEM size, render-worker count, and recompute floor - Terrain-only works out of the box; drop baked
output/{landcover,canopy,buildings}in for full clutter fidelity - Sized for small hosts — validated on a 16-core dev box and capacity-tested on a 3 vCPU / 4 GB VPS; keep a realistic recency window (e.g. 24 h) so bake cycles stay cheap
Upgrade notes
- Opt-in, no migrations — if you don't add the
coverage-workerservice or enable[coverage], nothing changes and the layer simply won't appear. No database migrations or breaking config changes.
Full Changelog: SimmerV/meshinfo@v4.4.0...v4.5.0