All software
CoreScope

CoreScope

Monitoring / Management Stable

Self-hosted MeshCore packet analyzer with MQTT ingest, live packet feeds, interactive maps, channel chat, packet tracing and per-node analytics.

Maintainer
Kpa-clawbot ↗
Kind
Monitoring & Management
Maturity
Stable
Languages
JavaScript Go
Licensing
Open source
Latest version
3.9.2 · 2026-06-13
License
GPL-3.0-or-later
Platforms
Docker Linux Web

Capabilities

Interfaces

  • Web
  • API
  • Headless

Connections

  • MQTT
  • HTTP
  • WebSocket

Capabilities

  • Monitoring
  • Telemetry
  • Packet analysis
  • Mapping

Install

  • Docker ghcr.io/kpa-clawbot/corescope docker run -d --name corescope --restart=unless-stopped -p 80:80 -p 1883:1883 -v /your/data:/app/data ghcr.io/kpa-clawbot/corescope:latest Open ↗
  • GitHub release Open ↗
  • Source Open ↗

Releases

from GitHub · updated 2026-06-23
  1. v3.9.2 # Latest 1 month ago · 2026-06-13 04:48 UTC

    Upgrade urgency: Recommended. Big batch of operator-felt wins.

    Highlights

    Accessibility (#1668 — M2/M3/M4/M5 merged; M6 in flight)

    • Two-tier CSS palette with semantic tokens (--palette-*--color-*/--text-*); operators can now hot-swap theme palettes
    • WCAG AA color-contrast hits across all 22 audited routes — 443 baseline violations → 0 verified by the new axe CI gate (#1696)
    • Typography pass: 14px body / 12px+500 chip floor across the entire chrome (#1679)
    • Hash-cell analytics palette, badge contrast, /live VCR controls (#1681)
    • Audio-lab BPM + Volume sliders now have aria-labels

    MQTT observability

    • Per-source MQTT status endpoint + Observers panel (#1682) — connected/disconnected/last-packet/error counters per broker
    • Mobile-friendly: cards at ≤640px instead of squished table (#1698)

    Cold-load + analytics correctness

    • Packet-store cold-load actually loads the database now (#1691). Pre-fix: after restart, only 0.3% of DB rows were loaded into RAM, dashboards looked empty for hours. Root cause: hot-load filtered by first_seen (immutable per hash) instead of effective recency. New transmissions.last_seen denormalized column + writer-side update fixes this end-to-end.
    • Analytics endpoint returns 503 Retry-After during warm-up (#1688) — operators no longer see post-restart partial slices
    • Warm-up banner surfaces backfill state in the UI (#1683)

    Firmware 1.16 sync

    • Server-side decoder parity for extended ACK payloads (#1695)
    • Customizer toggle to hide 1-byte path hops (collide ~8-way at 2k nodes) — #1689

    Performance

    • /packets init parallelizes loadObservers + loadPackets (#1693) — first-row time dropped from 25-40s to <5s on slow links
    • Confidence rating weighted by hash mode (#1687) — 1-byte sightings carry less weight than 6-byte

    CI / operability

    • OpenAPI completeness gate (#1678 Phase 1)
    • Release fast-path: re-tag :edge → :vX.Y.Z when SHA matches (#1680) — most patch releases now skip the 30min full pipeline rerun
    • Staging disk monitor + cleanup cron (#1686)
    • Slideover E2E flake-gate reduced 20× → 3×, root cause fixed in #1693

    Container image

    ghcr.io/kpa-clawbot/corescope:v3.9.2 (multi-arch: amd64, arm64)

    Verification

    • 22 routes × 2 themes × 2 viewports automated a11y gate (axe-core, #1696)
    • All 19 PRs ran through the full polish chain (parallel reviewers + Kent Beck TDD gate)
    • Cold-load fix verified by transmissions.last_seen test fixture (#1691)

    Operator upgrade (MikroTik)

    /container add remote-image=ghcr.io/kpa-clawbot/corescope:v3.9.2 envlist=cs-env mounts=cs-data,cs-caddyfile interface=veth-corescope start-on-boot=yes name=corescope-prod-v392
    

    Acknowledgements

    External contributors carry over from v3.9.1.

  2. v3.9.1 # 1 month ago · 2026-06-12 06:41 UTC

    Upgrade urgency: Recommended — v3.9.1 is what v3.9.0 should have been. v3.9.0's container image never published (Playwright flake gated Docker build). v3.9.1 includes everything in v3.9.0 plus:

    • WCAG AA contrast pass — new two-tier CSS palette (raw --palette-* → semantic --color-*/--text-*); muted-text family bumped to ≥4.5:1 in both themes (most well above — --text-muted on dark surface goes 3.5 → 11.58:1). Operator-reported unknown-repeater chip ("dark-blue text on dark-blue background") fixed (2.75:1 → 4.95:1). Closes #1671. Partial fix for #1668. (#1676, f0addfda)
    • Slideover test stabilitytest-slideover-1056-e2e.js was racing the packets virtual-scroll spacer; tightened selectors, bumped data-row wait to 20s. Cleared the day-of-release CI flakes. Fixes #1662. (#1663+followups, f06359d7)

    Verification

    Test plan: workspace-meshcore/test-plans/v3.9.0-cdp-test-plan.md (93 tests, applies unchanged to v3.9.1). M1 a11y audit: workspace-meshcore/a11y-audit/reports/violations-summary.md (2,429 BLOCKER → estimated 85% cleared by M2).

    Acknowledgements

    External contributors from v3.9.0 still apply: @efiten, @EldoonNemar. No new external PRs since v3.9.0.

  3. v3.9.0 # 1 month ago · 2026-06-12 02:55 UTC

    Upgrade urgency: Medium — fixes the post-restart "relay timelines empty" regression, surfaces silent /api/nodes truncation, and ships operator-controlled per-name hiding.

    257 commits since v3.8.3 (72 substantive + 185 auto-generated coverage bumps). Every bullet ends with a commit SHA — git show <sha> to verify.

    Highlights

    • Your relay timelines survive a restart. Before v3.9.0, every container restart left repeater nodes with empty hop histories until live traffic replayed enough adverts to re-attribute. Now the relay-hop index is rebuilt from path_json during cold load — per-relay timelines, hop counts, and route stats are intact the moment the server says it's ready. (#1643, 938153dd)
    • /api/nodes stops silently truncating at 500 rows. The hard cap was hiding nodes from the map, analytics and packets pages on any mesh of meaningful size — without any warning. Now properly paginated across every consumer, with internal UI requests bypassing the per-page clamp. (#1607, 26105748; #1637, 9002b25b; #1589, 7421ead9)
    • Hide your own node from a public dashboard with a prefix rename. New hiddenNamePrefixes config (default ["🚫"]) drops matching nodes from /api/nodes* while keeping DB rows for analytics — same convention other MeshCore dashboards already follow, no DB surgery, no permanent loss of history. (#1655, 825b2648)
    • Observer Compare is finally discoverable. The compare page existed before but was a hidden URL trick; now there are three entry points (header CTA, sticky selector strip, observer-table multi-select) leading into a Tufte-grade compare view with state-preserving selection. (#1642, 531bc8ac; #1645, c93ae67e; #1647, 167af54e)
    • Per-node Reach. New /api/nodes/{pubkey}/reach + UI surfaces directional link quality per neighbor — answers "is my link to X any good in both directions" without staring at a topology graph. (#1627, e2212f50)

    What's New

    Observer Compare

    • Promote observer comparison to first-class: header CTA, sticky selector strip, observer-table multi-select. (#1642, 531bc8ac)
    • Tufte-grade compare page with themed button vocabulary + state-preserving multi-select across navigations. (#1645, c93ae67e)
    • Polish: tightened checkboxes, hierarchy, selector strip + mobile fixes. (#1647, 167af54e)
    • Wire TableSort on the observers table with numeric/time column types so the sort affordance actually sorts. (#1641, d72ab69f)

    Reach & Nodes

    • Per-node Reach page + GET /api/nodes/{pubkey}/reach (directional link quality). (#1627, e2212f50)
    • Paginate /api/nodes across map/live/analytics/packets/area-map so the 500-row server cap stops silently truncating UIs. (#1607, 26105748; #1637, 9002b25b)
    • Sortable First Seen column on the Nodes table. (#1587, 7533b3b6)
    • Firmware repeat:on|off hint now excludes listener-only observers from the disambiguator. (#1624, a4776557)
    • Link RTC-reset warnings on node detail to the offending packet hashes. (#1590, 1a2b8c48)

    Analytics

    • Relay Airtime Share endpoint + dumbbell chart. (#1601, 3898688d)
    • 5-minute rolling-baseline anomaly detection for Write Sources. (#1593, a26a412c)
    • TRACE packets overlay per-hop SNR on the path graph. (#1622, e9aed641)
    • Multi-byte prefix repeaters now show up in the 1-byte hash-usage matrix view. (#1591, 3df89241)

    Live & Map

    • Fullscreen toggle on the live map + controls collapsed by default. (#1572, d7bd9d57)
    • Colorblind simulation overlay (Brettel/Vienot) with reset-to-Wong button. (#1600, 571c960c)
    • Path symbols legend disclosure on packets. (#1570, 5fd8900c)
    • OSM / Stamen tile providers with per-provider Leaflet layer control. (#1533, d7cd9203)
    • Operator-configurable liveMap.maxNodes (default 2000). (#1577, 1bdb92de)

    Config & Operator Surfaces

    • hiddenNamePrefixes (default ["🚫"]) — drop matching nodes from /api/nodes* while preserving DB rows. (#1655, 825b2648)
    • Config-driven disabled-tabs list in the customizer modal. (#1579, 7292d60f)
    • `branding …
Show all 20 releases →

Project signals

popularity 2026-07-20 verification 2026-07-20
GitHub stars
149
Forks
41
Watchers
4
Open issues
126
Contributors
25
Release downloads
43
Latest downloads
0
Source available
Yes
Releases available
Yes
Signed releases
No
CI builds
Yes
Documentation
Yes
  • Latest GitHub release has no binary assets; deployment is documented through the GHCR Docker image or source checkout.

Tags