{
  "id": "litescope",
  "name": "LiteScope",
  "kind": "monitoring",
  "status": "active",
  "maturity": "beta",
  "description": "Lightweight, self-hosted dashboard for monitoring MeshCore networks. Ingests MQTT telemetry from one or more brokers, stores it in SQLite and serves a real-time React UI with live packet feeds, node analytics, channel decryption, observer timelines, network analytics, Leaflet maps, live packet trace playback and a raw-hex decoder.",
  "maintainers": [
    {
      "name": "RikoDEV",
      "url": "https://github.com/RikoDEV"
    }
  ],
  "repository": "https://github.com/RikoDEV/litescope",
  "website": "https://litescope.riko.dev",
  "license": "MIT",
  "languages": [
    "typescript",
    "go"
  ],
  "screenshots": [
    {
      "file": "dashboard.png",
      "caption": "LiteScope main dashboard with live packet feed and analytics"
    }
  ],
  "platforms": [
    "web",
    "docker",
    "linux"
  ],
  "interfaces": [
    "web",
    "api"
  ],
  "connections": [
    "mqtt",
    "http",
    "websocket"
  ],
  "node_roles": [
    "companion",
    "repeater",
    "room-server",
    "observer"
  ],
  "capabilities": [
    "monitoring",
    "telemetry",
    "packet-analysis",
    "mapping",
    "automation"
  ],
  "install": [
    {
      "type": "docker-compose",
      "url": "https://github.com/RikoDEV/litescope"
    },
    {
      "type": "source",
      "url": "https://github.com/RikoDEV/litescope"
    }
  ],
  "popularity": {
    "githubStars": 6,
    "githubForks": 1,
    "githubWatchers": 0,
    "githubOpenIssues": 2,
    "githubContributors": 3,
    "lastChecked": "2026-07-21",
    "releaseDownloads": 0,
    "latestReleaseDownloads": 0
  },
  "verification": {
    "sourceAvailable": true,
    "releasesAvailable": true,
    "signedReleases": false,
    "ciBuilds": true,
    "hasDocumentation": true,
    "lastChecked": "2026-07-21",
    "notes": [
      "Supports multiple MQTT sources and AES-128 channel decryption.",
      "README includes a screenshot at the top."
    ]
  },
  "tags": [
    "dashboard",
    "self-hosted",
    "mqtt",
    "react"
  ],
  "last_reviewed": "2026-07-03",
  "source": {
    "path": "data/software/litescope/software.yaml",
    "updatedAt": "2026-07-21T08:04:18Z"
  },
  "latest_version": "1.0.2",
  "released": "2026-06-20",
  "releases": [
    {
      "version": "v1.0.2",
      "name": "liteScope v1.0.2",
      "datetime": "2026-06-20T21:31:11Z",
      "url": "https://github.com/RikoDEV/litescope/releases/tag/v1.0.2",
      "prerelease": false,
      "notes": "## Highlights\r\n\r\n- Added map heatmaps, scope-region overlays, and direct-link analytics.\r\n- Added Spotlight Search for faster navigation.\r\n- Added node activity, observation fanout, and payload-mix analytics.\r\n- Added duplicate-message stacking and region filtering to Channels.\r\n- Added configurable history retention with `retentionDays`.\r\n- Refined home statistics and live observer status.\r\n\r\n## Performance\r\n\r\n- Batched SQLite writes and reduced ingestor CPU usage.\r\n- Improved analytics caching and query bounds.\r\n- Added route code splitting, response compression, and React compiler optimizations.\r\n- Reduced RF analytics response sizes.\r\n\r\n## Fixes and security\r\n\r\n- Fixed packet-filter pagination.\r\n- Fixed observer and node-detail links.\r\n- Fixed channel-list jumping while filters load.\r\n- Improved IATA validation, flags, decoding, and Polish translations.\r\n- Added API limit protections and XSS safeguards.\r\n- Improved light-mode contrast and map rendering reliability.\r\n\r\n## Deployment\r\n\r\n- Added optional `VITE_SITE_URL` support for generated `robots.txt` and `sitemap.xml`.\r\n- Existing installations remain compatible; new settings are optional.\r\n\r\n**Full changelog:** [[v1.0.1…v1.0.2](https://github.com/RikoDEV/litescope/compare/v1.0.1...v1.0.2)](https://github.com/RikoDEV/litescope/compare/v1.0.1...v1.0.2)",
      "notesHtml": "<h2>Highlights</h2>\n<ul>\n<li>Added map heatmaps, scope-region overlays, and direct-link analytics.</li>\n<li>Added Spotlight Search for faster navigation.</li>\n<li>Added node activity, observation fanout, and payload-mix analytics.</li>\n<li>Added duplicate-message stacking and region filtering to Channels.</li>\n<li>Added configurable history retention with <code>retentionDays</code>.</li>\n<li>Refined home statistics and live observer status.</li>\n</ul>\n<h2>Performance</h2>\n<ul>\n<li>Batched SQLite writes and reduced ingestor CPU usage.</li>\n<li>Improved analytics caching and query bounds.</li>\n<li>Added route code splitting, response compression, and React compiler optimizations.</li>\n<li>Reduced RF analytics response sizes.</li>\n</ul>\n<h2>Fixes and security</h2>\n<ul>\n<li>Fixed packet-filter pagination.</li>\n<li>Fixed observer and node-detail links.</li>\n<li>Fixed channel-list jumping while filters load.</li>\n<li>Improved IATA validation, flags, decoding, and Polish translations.</li>\n<li>Added API limit protections and XSS safeguards.</li>\n<li>Improved light-mode contrast and map rendering reliability.</li>\n</ul>\n<h2>Deployment</h2>\n<ul>\n<li>Added optional <code>VITE_SITE_URL</code> support for generated <code>robots.txt</code> and <code>sitemap.xml</code>.</li>\n<li>Existing installations remain compatible; new settings are optional.</li>\n</ul>\n<p><strong>Full changelog:</strong> <a href=\"https://github.com/RikoDEV/litescope/compare/v1.0.1...v1.0.2\" target=\"_blank\" rel=\"noopener noreferrer\"><a href=\"https://github.com/RikoDEV/litescope/compare/v1.0.1...v1.0.2\" target=\"_blank\" rel=\"noopener noreferrer\">v1.0.1…v1.0.2</a></a></p>\n"
    },
    {
      "version": "v1.0.1",
      "name": "liteScope v1.0.1",
      "datetime": "2026-06-07T19:22:20Z",
      "url": "https://github.com/RikoDEV/litescope/releases/tag/v1.0.1",
      "prerelease": false,
      "notes": "Update focused on geographic filtering, analytics, and richer channel messages.\r\n\r\n## 🌍 Geographic & region filtering\r\n\r\n- Region filter on Packets, Map, and Analytics - a country → IATA cascade chip selector with multi-select.\r\n- Strict geo-locking by node position. A new embedded country-border dataset (Natural Earth 1:50m) resolves each node's real country from its coordinates, so filtering to e.g. `PL` shows only nodes physically in **Poland** - not foreign nodes that merely propagated into a Polish observer.\r\n- **\"Local only\" mode** on **Packets** - show only packets heard exclusively within the selected region (excludes long-distance propagation caught by local observers).\r\n\r\n## 📊 Analytics\r\n\r\n- Global region + time-window filter applied across every tab (Overview, RF, SNR, Nodes, Observers, Channels, Hashes, Scope, Distance) - not just Activity.\r\n- Time windows: 24h / 3d / 7d (the misleading \"All\" option was removed).\r\n- Top Nodes adverts ⇄ retransmits toggle added to the Analytics → Nodes tab (https://github.com/RikoDEV/litescope/issues/3).\r\n\r\n## 💬 Channels\r\n\r\n- Contact-share cards — messages containing <pubkey:type:name> now render as a contact card (avatar, name, hash) with a Show QR button that generates a `meshcore://contact/add?...` deep link to scan into the MeshCore app.\r\n- Location-share cards — coordinates like `51.977430,20.060091` render as a tiny inline map with an OpenStreetMap link.\r\n- Live propagation — a message's observation and hop counts now climb in real time as more observers report the same packet.\r\n\r\n## 🗺️  Nodes & Map\r\n\r\n- Unified node-type symbols across the whole app (`◆ repeater`, `● companion`, `⬡ room`, `▲ sensor`) - the Live Map now uses the same shapes/colors as the main map and node lists.\r\n- Node details now track more than adverts — packets a node relayed are included, so the payload-type breakdown reflects real activity instead of only `ADVERT`.\r\n- Color-coded payload types in node **\"Recent packets\"**.\r\n\r\n## 🐛 Fixes & housekeeping\r\n\r\n  - Multiple geo-filter correctness fixes.\r\n  - Removed a duplicate/orphaned file.\r\n  - Reverted Live Map markers to canvas rendering (preferCanvas) to keep zoom smooth.",
      "notesHtml": "<p>Update focused on geographic filtering, analytics, and richer channel messages.</p>\n<h2>🌍 Geographic &amp; region filtering</h2>\n<ul>\n<li>Region filter on Packets, Map, and Analytics - a country → IATA cascade chip selector with multi-select.</li>\n<li>Strict geo-locking by node position. A new embedded country-border dataset (Natural Earth 1:50m) resolves each node's real country from its coordinates, so filtering to e.g. <code>PL</code> shows only nodes physically in <strong>Poland</strong> - not foreign nodes that merely propagated into a Polish observer.</li>\n<li><strong>\"Local only\" mode</strong> on <strong>Packets</strong> - show only packets heard exclusively within the selected region (excludes long-distance propagation caught by local observers).</li>\n</ul>\n<h2>📊 Analytics</h2>\n<ul>\n<li>Global region + time-window filter applied across every tab (Overview, RF, SNR, Nodes, Observers, Channels, Hashes, Scope, Distance) - not just Activity.</li>\n<li>Time windows: 24h / 3d / 7d (the misleading \"All\" option was removed).</li>\n<li>Top Nodes adverts ⇄ retransmits toggle added to the Analytics → Nodes tab (<a href=\"https://github.com/RikoDEV/litescope/issues/3\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/RikoDEV/litescope/issues/3</a>).</li>\n</ul>\n<h2>💬 Channels</h2>\n<ul>\n<li>Contact-share cards — messages containing <a target=\"_blank\" rel=\"noopener noreferrer\">pubkey:type:name</a> now render as a contact card (avatar, name, hash) with a Show QR button that generates a <code>meshcore://contact/add?...</code> deep link to scan into the MeshCore app.</li>\n<li>Location-share cards — coordinates like <code>51.977430,20.060091</code> render as a tiny inline map with an OpenStreetMap link.</li>\n<li>Live propagation — a message's observation and hop counts now climb in real time as more observers report the same packet.</li>\n</ul>\n<h2>🗺️  Nodes &amp; Map</h2>\n<ul>\n<li>Unified node-type symbols across the whole app (<code>◆ repeater</code>, <code>● companion</code>, <code>⬡ room</code>, <code>▲ sensor</code>) - the Live Map now uses the same shapes/colors as the main map and node lists.</li>\n<li>Node details now track more than adverts — packets a node relayed are included, so the payload-type breakdown reflects real activity instead of only <code>ADVERT</code>.</li>\n<li>Color-coded payload types in node <strong>\"Recent packets\"</strong>.</li>\n</ul>\n<h2>🐛 Fixes &amp; housekeeping</h2>\n<ul>\n<li>Multiple geo-filter correctness fixes.</li>\n<li>Removed a duplicate/orphaned file.</li>\n<li>Reverted Live Map markers to canvas rendering (preferCanvas) to keep zoom smooth.</li>\n</ul>\n"
    },
    {
      "version": "v1.0.0",
      "name": "liteScope v1.0.0 🎉",
      "datetime": "2026-06-04T18:40:24Z",
      "url": "https://github.com/RikoDEV/litescope/releases/tag/v1.0.0",
      "prerelease": false,
      "notes": "The first stable release of **liteScope** — a lightweight, self-hosted dashboard for monitoring [MeshCore](https://meshcore.io/) networks. It ingests MQTT telemetry from one or more brokers, stores it in SQLite, and serves a real-time React UI with live packet feeds, node analytics, channel decryption, maps, and observer stats.\r\n\r\n---\r\n\r\n## ✨ Highlights\r\n\r\n- **Real-time everything** — live packet feed over WebSocket, animated packet-trace playback, and a live node map.\r\n- **Deep packet inspection** — colored hex dump with per-section highlighting, per-observer raw bytes and routing paths, and field-by-field decoded payloads.\r\n- **Network analytics** — RF stats, activity timelines, hop/distance analysis, geographic coverage, and a new **Hash Usage Matrix** for spotting node-prefix collisions.\r\n- **Channel decryption** — add AES-128 keys or derive them from a passphrase, then browse decrypted message history.\r\n- **Self-hosted & private** — runs entirely on your infrastructure; nothing leaves your network.\r\n\r\n---\r\n\r\n## 🚀 Features\r\n\r\n### Live monitoring\r\n- **Live packet feed** — filter by type, route, channel, or minimum observer count; pause/resume; expandable per-observation sub-rows with per-observer hex and path data.\r\n- **Packet detail sidebar** — colored hex dump with byte offsets and section hover-highlighting, field breakdown table, and field-specific decoded rendering. Click any observation to switch to that observer's perspective.\r\n- **Live map** — animated packet-trace playback with VCR controls (pause, replay, speed, timeline) and theme-aware tiles.\r\n\r\n### Nodes & observers\r\n- **Node explorer** — per-node RF analytics (RSSI / SNR distributions), last-heard filters, role tabs, and a full-height location map.\r\n- **Observer dashboard** — per-observer packet timelines, SNR charts, and packet-type breakdowns.\r\n\r\n### Channels\r\n- **Channel decryption** — AES-128 keys or SHA-256-derived passphrase keys; decrypted message history; deep-linked channel URLs with working back navigation.\r\n\r\n### Analytics\r\n- **Network analytics** — overview cards, activity heatmap, RF stats, top nodes/observers, packet-type distribution; deep-linked tabs (`/analytics/rf`, `/analytics/scope`, …).\r\n- **Hash size & adoption** — 1/2/3-byte hash distribution over time and multi-byte adopters.\r\n- **Hash Usage Matrix** — a 16×16 first-byte prefix grid with a 1/2/3-byte collision selector, per-cell node tooltips, and a click-through detail panel for inspecting prefix collisions.\r\n- **Distance / hop analytics** — link-type breakdown, hop distribution, longest paths, and pairwise geographic coverage.\r\n\r\n### Maps & UX\r\n- **Node map** — Leaflet markers with role-colored SVG icons, type-aware clustering, byte-size filter, and hash-prefix labels; theme-aware tiles (OSM light / CARTO dark).\r\n- **Decoder** — paste raw hex packets for one-off decoding.\r\n- **Material 3 Expressive** light/dark theme, persisted per browser.\r\n- **i18n** — English, Polish, and German (auto-detected, persisted), with the rest of the UI ready for more.\r\n- **Fully responsive** — charts, maps, and panels adapt from mobile to desktop.\r\n\r\n---\r\n\r\n## 🔧 Reliability & performance\r\n\r\n- **Concurrency-safe store** — decoded payloads are computed once under the write lock, eliminating a data race on hot read paths.\r\n- **Faster analytics** — version-keyed result caching for heavy endpoints, an index-aware node RF lookup, and bounded memory for pairwise geographic distance.\r\n- **Live node indexing** — node packet lists and RF stats now reflect packets ingested after startup, not just those present at boot.\r\n- **Configurable origins** — new `allowedOrigins` setting drives CORS and WebSocket origin checks (defaults to `[\"*\"]`).",
      "notesHtml": "<p>The first stable release of <strong>liteScope</strong> — a lightweight, self-hosted dashboard for monitoring <a href=\"https://meshcore.io/\" target=\"_blank\" rel=\"noopener noreferrer\">MeshCore</a> networks. It ingests MQTT telemetry from one or more brokers, stores it in SQLite, and serves a real-time React UI with live packet feeds, node analytics, channel decryption, maps, and observer stats.</p>\n<hr />\n<h2>✨ Highlights</h2>\n<ul>\n<li><strong>Real-time everything</strong> — live packet feed over WebSocket, animated packet-trace playback, and a live node map.</li>\n<li><strong>Deep packet inspection</strong> — colored hex dump with per-section highlighting, per-observer raw bytes and routing paths, and field-by-field decoded payloads.</li>\n<li><strong>Network analytics</strong> — RF stats, activity timelines, hop/distance analysis, geographic coverage, and a new <strong>Hash Usage Matrix</strong> for spotting node-prefix collisions.</li>\n<li><strong>Channel decryption</strong> — add AES-128 keys or derive them from a passphrase, then browse decrypted message history.</li>\n<li><strong>Self-hosted &amp; private</strong> — runs entirely on your infrastructure; nothing leaves your network.</li>\n</ul>\n<hr />\n<h2>🚀 Features</h2>\n<h3>Live monitoring</h3>\n<ul>\n<li><strong>Live packet feed</strong> — filter by type, route, channel, or minimum observer count; pause/resume; expandable per-observation sub-rows with per-observer hex and path data.</li>\n<li><strong>Packet detail sidebar</strong> — colored hex dump with byte offsets and section hover-highlighting, field breakdown table, and field-specific decoded rendering. Click any observation to switch to that observer's perspective.</li>\n<li><strong>Live map</strong> — animated packet-trace playback with VCR controls (pause, replay, speed, timeline) and theme-aware tiles.</li>\n</ul>\n<h3>Nodes &amp; observers</h3>\n<ul>\n<li><strong>Node explorer</strong> — per-node RF analytics (RSSI / SNR distributions), last-heard filters, role tabs, and a full-height location map.</li>\n<li><strong>Observer dashboard</strong> — per-observer packet timelines, SNR charts, and packet-type breakdowns.</li>\n</ul>\n<h3>Channels</h3>\n<ul>\n<li><strong>Channel decryption</strong> — AES-128 keys or SHA-256-derived passphrase keys; decrypted message history; deep-linked channel URLs with working back navigation.</li>\n</ul>\n<h3>Analytics</h3>\n<ul>\n<li><strong>Network analytics</strong> — overview cards, activity heatmap, RF stats, top nodes/observers, packet-type distribution; deep-linked tabs (<code>/analytics/rf</code>, <code>/analytics/scope</code>, …).</li>\n<li><strong>Hash size &amp; adoption</strong> — 1/2/3-byte hash distribution over time and multi-byte adopters.</li>\n<li><strong>Hash Usage Matrix</strong> — a 16×16 first-byte prefix grid with a 1/2/3-byte collision selector, per-cell node tooltips, and a click-through detail panel for inspecting prefix collisions.</li>\n<li><strong>Distance / hop analytics</strong> — link-type breakdown, hop distribution, longest paths, and pairwise geographic coverage.</li>\n</ul>\n<h3>Maps &amp; UX</h3>\n<ul>\n<li><strong>Node map</strong> — Leaflet markers with role-colored SVG icons, type-aware clustering, byte-size filter, and hash-prefix labels; theme-aware tiles (OSM light / CARTO dark).</li>\n<li><strong>Decoder</strong> — paste raw hex packets for one-off decoding.</li>\n<li><strong>Material 3 Expressive</strong> light/dark theme, persisted per browser.</li>\n<li><strong>i18n</strong> — English, Polish, and German (auto-detected, persisted), with the rest of the UI ready for more.</li>\n<li><strong>Fully responsive</strong> — charts, maps, and panels adapt from mobile to desktop.</li>\n</ul>\n<hr />\n<h2>🔧 Reliability &amp; performance</h2>\n<ul>\n<li><strong>Concurrency-safe store</strong> — decoded payloads are computed once under the write lock, eliminating a data race on hot read paths.</li>\n<li><strong>Faster analytics</strong> — version-keyed result caching for heavy endpoints, an index-aware node RF lookup, and bounded memory for pairwise geographic distance.</li>\n<li><strong>Live node indexing</strong> — node packet lists and RF stats now reflect packets ingested after startup, not just those present at boot.</li>\n<li><strong>Configurable origins</strong> — new <code>allowedOrigins</code> setting drives CORS and WebSocket origin checks (defaults to <code>[\"*\"]</code>).</li>\n</ul>\n"
    }
  ],
  "changelogSource": "github",
  "changelogUpdatedAt": "2026-07-05T17:14:32.619Z"
}
