{
  "id": "meshcore-signal-tester",
  "name": "MeshCore Signal Tester",
  "kind": "tool",
  "status": "active",
  "maturity": "stable",
  "description": "Web and Android signal-analysis tool for MeshCore companions and repeaters, with grouped packet reception, RSSI/SNR history, repeater statistics, GPS-tagged 3D mapping and CSV capture.",
  "image": "logo.svg",
  "screenshots": [
    {
      "file": "charts.webp",
      "caption": "Repeater statistics and RSSI/SNR history"
    },
    {
      "file": "3dmap.webp",
      "caption": "GPS-tagged 3D signal map"
    },
    {
      "file": "packets.webp",
      "caption": "Grouped packets with decoded details"
    }
  ],
  "maintainers": [
    {
      "name": "Aleš Janda",
      "url": "https://github.com/kybl"
    }
  ],
  "repository": "https://github.com/kybl/meshcore-signal-tester",
  "website": "https://meshcore.kyblsoft.cz/signal-tester",
  "license": "MIT",
  "languages": [
    "javascript",
    "kotlin"
  ],
  "platforms": [
    "web",
    "android"
  ],
  "interfaces": [
    "web",
    "mobile"
  ],
  "connections": [
    "ble",
    "serial",
    "usb",
    "tcp"
  ],
  "node_roles": [
    "companion",
    "repeater"
  ],
  "capabilities": [
    "monitoring",
    "telemetry",
    "packet-analysis",
    "mapping"
  ],
  "install": [
    {
      "type": "web",
      "url": "https://meshcore.kyblsoft.cz/signal-tester"
    },
    {
      "type": "github-release",
      "package": "meshcore-signal-tester-release.apk",
      "url": "https://github.com/kybl/meshcore-signal-tester/releases"
    },
    {
      "type": "source",
      "url": "https://github.com/kybl/meshcore-signal-tester"
    }
  ],
  "popularity": {
    "githubStars": 8,
    "githubForks": 0,
    "githubWatchers": 1,
    "githubOpenIssues": 0,
    "githubContributors": 2,
    "latestReleaseDownloads": 1,
    "lastChecked": "2026-06-23"
  },
  "verification": {
    "sourceAvailable": true,
    "releasesAvailable": true,
    "signedReleases": false,
    "ciBuilds": true,
    "hasDocumentation": true,
    "lastChecked": "2026-06-23",
    "notes": [
      "The Android app adds background capture and raw TCP connections to WiFi companion firmware.",
      "Browser Bluetooth and serial support depends on the browser and platform."
    ]
  },
  "tags": [
    "signal-testing",
    "field-tool",
    "threejs",
    "packet-capture"
  ],
  "last_reviewed": "2026-06-23",
  "source": {
    "path": "data/software/meshcore-signal-tester/software.yaml",
    "updatedAt": "2026-06-23T23:23:42+02:00"
  },
  "latest_version": "1.2.1",
  "released": "2026-06-22",
  "releases": [
    {
      "version": "v1.2.1",
      "name": "v1.2.1",
      "datetime": "2026-06-22T15:32:24Z",
      "url": "https://github.com/kybl/meshcore-signal-tester/releases/tag/v1.2.1",
      "prerelease": false,
      "notes": "### Added\r\n\r\n- **Auto-reconnect** — an optional toggle that automatically retries the last\r\n  device after an unexpected drop, before the disconnect alarm. Shown only\r\n  where it can actually work (not for Bluetooth in a mobile browser).\r\n- **Nicer packet sound** — a pleasant bell whose pitch still tracks signal\r\n  strength, plus a new \"disconnect only\" sound mode. The disconnect alarm now\r\n  sounds on every unexpected drop.\r\n\r\n### Changed\r\n\r\n- **Location now starts automatically when you connect (Android)** — no need to\r\n  tap the 3D map's \"Enable location\" button anymore.\r\n- **Steadier location on the 3D map** — occasional GPS jumps (sudden ~200 m\r\n  hops) are filtered out.\r\n- **3D map zooms in to street level** even on large maps, and deep zoom is\r\n  smoother.\r\n- **3D camera framing** — \"Center on me\" no longer jerks at the end of its move,\r\n  and repeaters are framed with a little headroom above them.\r\n\r\n### Fixed\r\n\r\n- 2D charts could stop updating with Display set to **All**, until you switched\r\n  the Display window and back.\r\n- Help (?) tooltips could appear away from their icon.\r\n- Seen Repeaters now shows the true last RSSI/SNR, not a rounded/averaged value.\r\n- Received Packets always lists every repeater as a column, not only the ones on\r\n  the current page.\r\n- 3D map selection no longer clears itself on its own.\r\n- 3D map tiles no longer flicker while panning or zooming.\r\n- Footer text now has proper contrast in light mode.",
      "notesHtml": "<h3>Added</h3>\n<ul>\n<li><strong>Auto-reconnect</strong> — an optional toggle that automatically retries the last\ndevice after an unexpected drop, before the disconnect alarm. Shown only\nwhere it can actually work (not for Bluetooth in a mobile browser).</li>\n<li><strong>Nicer packet sound</strong> — a pleasant bell whose pitch still tracks signal\nstrength, plus a new \"disconnect only\" sound mode. The disconnect alarm now\nsounds on every unexpected drop.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li><strong>Location now starts automatically when you connect (Android)</strong> — no need to\ntap the 3D map's \"Enable location\" button anymore.</li>\n<li><strong>Steadier location on the 3D map</strong> — occasional GPS jumps (sudden ~200 m\nhops) are filtered out.</li>\n<li><strong>3D map zooms in to street level</strong> even on large maps, and deep zoom is\nsmoother.</li>\n<li><strong>3D camera framing</strong> — \"Center on me\" no longer jerks at the end of its move,\nand repeaters are framed with a little headroom above them.</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>2D charts could stop updating with Display set to <strong>All</strong>, until you switched\nthe Display window and back.</li>\n<li>Help (?) tooltips could appear away from their icon.</li>\n<li>Seen Repeaters now shows the true last RSSI/SNR, not a rounded/averaged value.</li>\n<li>Received Packets always lists every repeater as a column, not only the ones on\nthe current page.</li>\n<li>3D map selection no longer clears itself on its own.</li>\n<li>3D map tiles no longer flicker while panning or zooming.</li>\n<li>Footer text now has proper contrast in light mode.</li>\n</ul>\n"
    },
    {
      "version": "v1.2.0",
      "name": "v1.2.0",
      "datetime": "2026-06-14T12:24:08Z",
      "url": "https://github.com/kybl/meshcore-signal-tester/releases/tag/v1.2.0",
      "prerelease": false,
      "notes": "## Added\r\n- **Zoomable 2D signal charts** — wheel or pinch to zoom the time axis, drag across a region to zoom in, drag/Shift+wheel to pan. Both charts stay aligned; double-click or **Reset zoom** to restore.\r\n- **Full capture history is now kept on disk, not just in memory** — \"Auto-remove: Never\" keeps the whole session without slowing down or running out of memory, your data survives a reload or crash (it offers to resume on launch), every view is consistent across the Display window, and CSV export covers the complete history.\r\n- **More 3D map styles** — CARTO (Dark Matter, Positron, Voyager, +no-label variants), Esri (Dark/Light Gray Canvas and satellite), more OpenStreetMap flavours, and a **None (no map)** option. In dark mode the area around the map is now black.\r\n\r\n## Changed\r\n- **Longer history durations** — Auto-remove and Display now offer **3 h** and **12 h** (10 min and 30 min were removed).\r\n- **The 3D map's \"Cluster radius\" setting is gone** — nearby points are grouped automatically based on zoom, so there's nothing to tune.\r\n\r\n## Fixed\r\n- **The Android app no longer freezes on a blank screen after running for hours**, and recovers on its own if the system reclaims it in the background.\r\n- **Packets captured before location was turned on are no longer placed at your current location on the 3D map** — position-less points aren't shown; CSV import likewise never assigns the current location to rows that have none.\r\n- **Connecting to a saved Bluetooth device while Bluetooth is off** now prompts you to turn it on instead of silently never connecting.\r\n- **A Bluetooth device you renamed after saving it** now connects under, and is re-saved with, its new name.\r\n- **Better light/dark readability** — the map's location-status text, the 3D-map fullscreen button, the packet detail panel and the page footer are now legible in both themes; map buttons no longer look stuck-pressed after a tap.",
      "notesHtml": "<h2>Added</h2>\n<ul>\n<li><strong>Zoomable 2D signal charts</strong> — wheel or pinch to zoom the time axis, drag across a region to zoom in, drag/Shift+wheel to pan. Both charts stay aligned; double-click or <strong>Reset zoom</strong> to restore.</li>\n<li><strong>Full capture history is now kept on disk, not just in memory</strong> — \"Auto-remove: Never\" keeps the whole session without slowing down or running out of memory, your data survives a reload or crash (it offers to resume on launch), every view is consistent across the Display window, and CSV export covers the complete history.</li>\n<li><strong>More 3D map styles</strong> — CARTO (Dark Matter, Positron, Voyager, +no-label variants), Esri (Dark/Light Gray Canvas and satellite), more OpenStreetMap flavours, and a <strong>None (no map)</strong> option. In dark mode the area around the map is now black.</li>\n</ul>\n<h2>Changed</h2>\n<ul>\n<li><strong>Longer history durations</strong> — Auto-remove and Display now offer <strong>3 h</strong> and <strong>12 h</strong> (10 min and 30 min were removed).</li>\n<li><strong>The 3D map's \"Cluster radius\" setting is gone</strong> — nearby points are grouped automatically based on zoom, so there's nothing to tune.</li>\n</ul>\n<h2>Fixed</h2>\n<ul>\n<li><strong>The Android app no longer freezes on a blank screen after running for hours</strong>, and recovers on its own if the system reclaims it in the background.</li>\n<li><strong>Packets captured before location was turned on are no longer placed at your current location on the 3D map</strong> — position-less points aren't shown; CSV import likewise never assigns the current location to rows that have none.</li>\n<li><strong>Connecting to a saved Bluetooth device while Bluetooth is off</strong> now prompts you to turn it on instead of silently never connecting.</li>\n<li><strong>A Bluetooth device you renamed after saving it</strong> now connects under, and is re-saved with, its new name.</li>\n<li><strong>Better light/dark readability</strong> — the map's location-status text, the 3D-map fullscreen button, the packet detail panel and the page footer are now legible in both themes; map buttons no longer look stuck-pressed after a tap.</li>\n</ul>\n"
    },
    {
      "version": "v1.1.0",
      "name": "v1.1.0",
      "datetime": "2026-06-07T06:32:56Z",
      "url": "https://github.com/kybl/meshcore-signal-tester/releases/tag/v1.1.0",
      "prerelease": false,
      "notes": "### Added\r\n\r\n- **Connect over USB** — plug a companion radio in with a USB cable instead of\r\n  using Bluetooth. Devices you've connected to before show up as buttons for\r\n  one-tap reconnecting.\r\n- **Repeater support** — you can now plug a MeshCore repeater into USB,\r\n  not just a companion radio; the app detects which kind it is on its own. With\r\n  special logging firmware it shows full detail for every packet; with normal\r\n  firmware it shows what it can read from the repeater's logs.\r\n- **Connect over WiFi (Android app only)** — reach a WiFi companion over your\r\n  network by typing in its IP address. Web browsers can't do this, so it works\r\n  only in the Android app.\r\n- **Android app niceties** — it now shows the current status in the phone's\r\n  notification bar (with a speaker icon while beep alerts are on, and a \"paused\"\r\n  marker when capture is stopped), opens web links in your normal browser, and\r\n  closes pop-ups when you press Back.\r\n- **3D map additions:**\r\n  - optionally show your own device's location on the map (off by default —\r\n    while on it keeps asking the device for its position, which can drain the\r\n    battery faster, so leave it off when you don't need it);\r\n  - a **Center on me** button that recentres the map and then follows you as\r\n    you move;\r\n  - pin repeaters to the map and point the camera at one;\r\n  - while capturing, the map keeps the area around you loaded so you don't drift\r\n    off the edge.\r\n- **Disconnect warning** — a clear full-screen alert if the connection drops\r\n  unexpectedly (cable unplugged, device reset, out of range). It stays quiet\r\n  when you disconnect on purpose.\r\n\r\n### Changed\r\n\r\n- **Tidier header** — the connect/disconnect buttons and the status are grouped\r\n  into one colour-coded box (red when disconnected, green when connected).\r\n- **Sound is easier to notice** — when the beep-on-each-packet sound is turned\r\n  on, its control turns yellow so you can see at a glance that it's on.\r\n- **Clearer repeater colors** — brighter and easier to tell apart.\r\n\r\n### Fixed\r\n\r\n- Trace packets now show the correct route (they used to show the wrong path).\r\n- Your contacts list no longer sometimes fails to finish loading.\r\n- The 3D map's \"Enable location\" button no longer freezes when your phone's\r\n  location is switched off — it works again once you turn location back on.\r\n- The same Bluetooth device no longer shows up several times in your list of\r\n  saved devices.\r\n- The 3D map's fullscreen button now works in the Android app (it did nothing\r\n  there before).\r\n\r\nPlus lots of smaller improvements throughout.",
      "notesHtml": "<h3>Added</h3>\n<ul>\n<li><strong>Connect over USB</strong> — plug a companion radio in with a USB cable instead of\nusing Bluetooth. Devices you've connected to before show up as buttons for\none-tap reconnecting.</li>\n<li><strong>Repeater support</strong> — you can now plug a MeshCore repeater into USB,\nnot just a companion radio; the app detects which kind it is on its own. With\nspecial logging firmware it shows full detail for every packet; with normal\nfirmware it shows what it can read from the repeater's logs.</li>\n<li><strong>Connect over WiFi (Android app only)</strong> — reach a WiFi companion over your\nnetwork by typing in its IP address. Web browsers can't do this, so it works\nonly in the Android app.</li>\n<li><strong>Android app niceties</strong> — it now shows the current status in the phone's\nnotification bar (with a speaker icon while beep alerts are on, and a \"paused\"\nmarker when capture is stopped), opens web links in your normal browser, and\ncloses pop-ups when you press Back.</li>\n<li><strong>3D map additions:</strong><ul>\n<li>optionally show your own device's location on the map (off by default —\nwhile on it keeps asking the device for its position, which can drain the\nbattery faster, so leave it off when you don't need it);</li>\n<li>a <strong>Center on me</strong> button that recentres the map and then follows you as\nyou move;</li>\n<li>pin repeaters to the map and point the camera at one;</li>\n<li>while capturing, the map keeps the area around you loaded so you don't drift\noff the edge.</li>\n</ul>\n</li>\n<li><strong>Disconnect warning</strong> — a clear full-screen alert if the connection drops\nunexpectedly (cable unplugged, device reset, out of range). It stays quiet\nwhen you disconnect on purpose.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li><strong>Tidier header</strong> — the connect/disconnect buttons and the status are grouped\ninto one colour-coded box (red when disconnected, green when connected).</li>\n<li><strong>Sound is easier to notice</strong> — when the beep-on-each-packet sound is turned\non, its control turns yellow so you can see at a glance that it's on.</li>\n<li><strong>Clearer repeater colors</strong> — brighter and easier to tell apart.</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Trace packets now show the correct route (they used to show the wrong path).</li>\n<li>Your contacts list no longer sometimes fails to finish loading.</li>\n<li>The 3D map's \"Enable location\" button no longer freezes when your phone's\nlocation is switched off — it works again once you turn location back on.</li>\n<li>The same Bluetooth device no longer shows up several times in your list of\nsaved devices.</li>\n<li>The 3D map's fullscreen button now works in the Android app (it did nothing\nthere before).</li>\n</ul>\n<p>Plus lots of smaller improvements throughout.</p>\n"
    },
    {
      "version": "v1.0.0",
      "name": "v1.0.0",
      "datetime": "2026-05-31T12:20:21Z",
      "url": "https://github.com/kybl/meshcore-signal-tester/releases/tag/v1.0.0",
      "prerelease": false,
      "notes": "First release of MeshCore Signal Tester",
      "notesHtml": "<p>First release of MeshCore Signal Tester</p>\n"
    }
  ],
  "changelogSource": "github",
  "changelogUpdatedAt": "2026-06-23T19:45:50.736Z"
}
