MeshCore Beacon
Monitoring / Management BetaBeacon
Real-time LoRa mesh network observation stack: a Go backend subscribes to MeshCore MQTT brokers, decodes and deduplicates packets, stores nodes, routes, traces and channel messages in PostgreSQL, and streams live events via WebSocket and REST API — paired with a React web frontend for packet inspection, node tracking, channel messages, stats and mesh maps.
- Maintainer
- MeshCore-Beacon ↗
- Kind
- Monitoring & Management
- Maturity
- Beta
- Languages
- Go TypeScript
- Licensing
- Open source
- Latest version
- 1.5.4 · 2026-06-24
- License
- AGPL-3.0
- Platforms
- Docker Linux Web
Capabilities
Interfaces
- ✓ Web
- ✓ API
Connections
- ✓ MQTT
- ✓ WebSocket
- ✓ HTTP
Capabilities
- ✓ Monitoring
- ✓ Telemetry
- ✓ Packet analysis
- ✓ Mapping
- ✓ Bridging
Install
Releases
from GitHub · updated 2026-07-03v1.5.4 # Latest 26 days ago · 2026-06-24 15:11 UTC
Fixes
- Packet Observation Duplication - The packet observations were being constrained as unique on observer, packet hash and the heard at TS. The TS has been removed and a migration is in place to clean up bad data.
Full Changelog: https://github.com/MeshCore-Beacon/beacon-server/compare/v1.5.3...v1.5.4
v1.5.3 # 1 month ago · 2026-06-20 17:41 UTC
Features
- Discovery request/response parsing — Beacon now parses
DISCOVER_REQ/DISCOVER_RESPcontrol payloads from the mesh, feeding directly into neighbor data. - Neighbor SNR tracking — a new optional
snrcolumn onnode_neighbors, now populated from three independent sources:- discovery responses observed by Beacon
- zero-hop adverts seen directly by observers
- hop pairs derived from TRACE packets
- Observer online check uses last seen — ingest now factors in an observer's last-seen timestamp when determining online status, rather than relying solely on connection state.
Fixes
- Node summary neighbor counts — deduplicated neighbor counts in node summaries that were previously inflated by duplicate rows.
- Release image publishing — fixed the GitHub Actions release workflow so built images are pushed to the public registry correctly. (Thanks, @MrAlders0n!)
Maintenance
- Bumped
meshcore-goto v1.0.8. - SECURITY: Bumped
github.com/go-chi/chi/v5from v5.2.2 to v5.2.4 (dependabot). - Documented the remaining parsed ingest payload structs.
- Added the new neighbor
snrfield to the swagger docs.
Full Changelog: https://github.com/MeshCore-Beacon/beacon-server/compare/v1.5.2...v1.5.3
- Discovery request/response parsing — Beacon now parses
v1.5.0 # 1 month ago · 2026-06-15 22:28 UTC
Testing
This release is primarily a testing overhaul, bringing project coverage from minimal to ~46% with a solid foundation across all major layers.
Infrastructure
- Introduced
sqlc.Querierinterface indb.Store, enabling mock-based testing of the database layer without a real PostgreSQL connection - Added
gomock-generated mock forsqlc.Querieratdb/sqlc/mock - Converted
stubReaderin handlers tests to a configurable struct with function fields, eliminating the need for a separatefuncReadertype - CI coverage filtering now correctly excludes generated code (
db/sqlc,docs,iatadb/gen) for accurate badge reporting
Coverage by package
db— store mapping logic, pagination, nil pointer handling, conditional field mapping, type conversions across channels, observers, nodes, packets, traces, routes, scopes, stats, and IATAsinternal/api/handlers— validation paths and happy paths across all handlers including messages, packets, observers, nodes, stats, routes, scopes, and tracesinternal/cache—getOrSetcache hit/miss/error/corrupt-entry behaviour, TTL resolution fallback chain, node and observer invalidationinternal/config— YAML loading, config seeding, default resolution extracted into testableResolvefunctioninternal/hub— full runtime behaviour including broadcast, subscription lifecycle, lagged notification, OR-scope semanticsinternal/ingest— pure function coverage for payload parsing, transport code derivation, capability detection, observer type normalisationinternal/keystore— key derivation, fingerprinting, store lookup,EntryExists(moved frommain)internal/scopestore— load, replace, copy-on-read semanticsinternal/background— scheduler task execution and context cancellationinternal/ws— IP limiter acquire/release/cleanup logic
Refactoring
config.Resolve()extracted frommain.goto derive runtime defaults with fallback chain — now tested and used at startupkeystore.EntryExists()moved frommain.gointo the keystore package where it belongs
Full Changelog: https://github.com/MeshCore-Beacon/beacon-server/compare/v1.4.1...v1.5.0
- Introduced
Project signals
- GitHub stars
- 7
- Forks
- 2
- Watchers
- 1
- Open issues
- 22
- Contributors
- 4
- Release downloads
- 3
- Latest downloads
- 1
- Source available
- Yes
- Releases available
- Yes
- Signed releases
- No
- CI builds
- Yes
- Documentation
- Yes
- API authentication is not yet implemented; intended for trusted internal or reverse-proxy deployments.
- Full-stack Docker Compose configs (server + web + PostgreSQL + Redis + Caddy TLS) are in the beacon-docs repo.
- Swagger UI available at /swagger/index.html on a running instance.