{
  "id": "potato-mesh",
  "name": "PotatoMesh",
  "kind": "tool",
  "status": "active",
  "maturity": "beta",
  "description": "Federated self-hosted dashboard for local MeshCore and Meshtastic communities, combining node maps, chat, telemetry, neighbors and trace routes with remote radio ingestors and a public API.",
  "image": "potatomesh-logo.svg",
  "screenshots": [
    {
      "file": "dashboard.png",
      "caption": "Community node map, chat and telemetry dashboard"
    },
    {
      "file": "matrix-bridge.png",
      "caption": "Matrix bridge forwarding mesh messages"
    }
  ],
  "maintainers": [
    {
      "name": "l5yth",
      "url": "https://github.com/l5yth"
    }
  ],
  "repository": "https://github.com/l5yth/potato-mesh",
  "website": "https://potatomesh.net/",
  "license": "Apache-2.0",
  "languages": [
    "ruby",
    "python",
    "javascript",
    "dart"
  ],
  "platforms": [
    "docker",
    "linux",
    "nixos",
    "web"
  ],
  "interfaces": [
    "web",
    "api",
    "headless"
  ],
  "connections": [
    "ble",
    "serial",
    "tcp",
    "http"
  ],
  "node_roles": [
    "companion",
    "repeater",
    "room-server",
    "sensor"
  ],
  "capabilities": [
    "messaging",
    "contacts",
    "channels",
    "monitoring",
    "telemetry",
    "packet-analysis",
    "mapping",
    "notifications",
    "bridging"
  ],
  "install": [
    {
      "type": "web",
      "url": "https://potatomesh.net/"
    },
    {
      "type": "docker-compose",
      "package": "ghcr.io/l5yth/potato-mesh-web-linux-amd64",
      "url": "https://github.com/l5yth/potato-mesh/blob/main/DOCKER.md",
      "command": "docker compose up -d"
    },
    {
      "type": "nixos",
      "package": "potato-mesh",
      "url": "https://github.com/l5yth/potato-mesh#nix",
      "command": "nix run .#web"
    },
    {
      "type": "source",
      "url": "https://github.com/l5yth/potato-mesh"
    }
  ],
  "popularity": {
    "githubStars": 329,
    "githubForks": 41,
    "githubWatchers": 8,
    "githubOpenIssues": 23,
    "githubContributors": 10,
    "latestReleaseDownloads": 0,
    "lastChecked": "2026-06-23"
  },
  "verification": {
    "sourceAvailable": true,
    "releasesAvailable": true,
    "signedReleases": false,
    "ciBuilds": true,
    "hasDocumentation": true,
    "lastChecked": "2026-06-23",
    "notes": [
      "MeshCore ingestors connect to companion radios over BLE, serial or TCP and post normalized data to the web service.",
      "Federation is enabled by default but can be disabled for isolated or private deployments.",
      "The mobile reader and Matrix bridge are still described as works in progress."
    ]
  },
  "tags": [
    "federated",
    "community-dashboard",
    "multi-protocol",
    "self-hosted",
    "matrix"
  ],
  "last_reviewed": "2026-06-23",
  "source": {
    "path": "data/software/potato-mesh/software.yaml",
    "updatedAt": "2026-06-24T01:55:49+02:00"
  },
  "latest_version": "0.6.3",
  "released": "2026-05-03",
  "releases": [
    {
      "version": "v0.6.3",
      "name": "v0.6.3",
      "datetime": "2026-05-03T11:08:54Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.6.3",
      "prerelease": false,
      "notes": "This is a service release of the radio mesh app-suite potato-mesh v0.6.3, mainly fixing bugs and regressions introduced in the recent 0.6.x releases.\r\n\r\nupgrading is specifically encouraged if you had issues with the new map feature displaying nodes in the same localtion as \"global spider web.\" this is fixed now my condensing the size and adding a map-zoom filter to that feature (and also making the spiders collapsable).\r\n\r\n## What's Changed\r\n* build(deps): bump rustls-webpki from 0.103.10 to 0.103.13 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/764\r\n* build(deps): bump openssl from 0.10.75 to 0.10.78 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/766\r\n* web: rework map spider-net feature by @l5yth in https://github.com/l5yth/potato-mesh/pull/769\r\n* matrix: fix matrix preset labels by @l5yth in https://github.com/l5yth/potato-mesh/pull/770\r\n* web: add seo improvements by @l5yth in https://github.com/l5yth/potato-mesh/pull/771\r\n* chore: bump version to 0.6.3 by @l5yth in https://github.com/l5yth/potato-mesh/pull/779\r\n* data: refactor 3/7 protocols by @l5yth in https://github.com/l5yth/potato-mesh/pull/774\r\n* web: refactor 1/7 data processing by @l5yth in https://github.com/l5yth/potato-mesh/pull/772\r\n* web: refactor 2/7 federation by @l5yth in https://github.com/l5yth/potato-mesh/pull/773\r\n* web: refactor 5/7 node page charts by @l5yth in https://github.com/l5yth/potato-mesh/pull/776\r\n* web: refactor 7/7 main js by @l5yth in https://github.com/l5yth/potato-mesh/pull/778\r\n* data: refactor 4/7 interfaces by @l5yth in https://github.com/l5yth/potato-mesh/pull/775\r\n* web: refactor 6/7 node page by @l5yth in https://github.com/l5yth/potato-mesh/pull/777\r\n* web: fix liveliness of api data hydration bug by @l5yth in https://github.com/l5yth/potato-mesh/pull/783\r\n\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.6.2...v0.6.3",
      "notesHtml": "<p>This is a service release of the radio mesh app-suite potato-mesh v0.6.3, mainly fixing bugs and regressions introduced in the recent 0.6.x releases.</p>\n<p>upgrading is specifically encouraged if you had issues with the new map feature displaying nodes in the same localtion as \"global spider web.\" this is fixed now my condensing the size and adding a map-zoom filter to that feature (and also making the spiders collapsable).</p>\n<h2>What's Changed</h2>\n<ul>\n<li>build(deps): bump rustls-webpki from 0.103.10 to 0.103.13 in /matrix by @dependabot[bot] in <a href=\"https://github.com/l5yth/potato-mesh/pull/764\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/764</a></li>\n<li>build(deps): bump openssl from 0.10.75 to 0.10.78 in /matrix by @dependabot[bot] in <a href=\"https://github.com/l5yth/potato-mesh/pull/766\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/766</a></li>\n<li>web: rework map spider-net feature by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/769\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/769</a></li>\n<li>matrix: fix matrix preset labels by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/770\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/770</a></li>\n<li>web: add seo improvements by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/771\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/771</a></li>\n<li>chore: bump version to 0.6.3 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/779\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/779</a></li>\n<li>data: refactor 3/7 protocols by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/774\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/774</a></li>\n<li>web: refactor 1/7 data processing by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/772\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/772</a></li>\n<li>web: refactor 2/7 federation by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/773\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/773</a></li>\n<li>web: refactor 5/7 node page charts by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/776\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/776</a></li>\n<li>web: refactor 7/7 main js by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/778\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/778</a></li>\n<li>data: refactor 4/7 interfaces by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/775\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/775</a></li>\n<li>web: refactor 6/7 node page by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/777\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/777</a></li>\n<li>web: fix liveliness of api data hydration bug by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/783\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/783</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.6.2...v0.6.3\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.6.2...v0.6.3</a></p>\n"
    },
    {
      "version": "v0.6.2",
      "name": "v0.6.2",
      "datetime": "2026-04-21T17:44:58Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.6.2",
      "prerelease": false,
      "notes": "This is a service release of the radio mesh app-suite `potato-mesh` v0.6.2, focused on Meshcore-related fixes, federation accuracy, and bridge coverage. The Matrix bridge now understands Meshcore traffic, and several duplication and classification issues in the web app and ingestor have been tightened up.\r\n\r\n### Features\r\n* Matrix: enable meshcore by @l5yth in <https://github.com/l5yth/potato-mesh/pull/761>\r\n* Web: show colocated nodes by @l5yth in <https://github.com/l5yth/potato-mesh/pull/753>\r\n\r\n### Fixes\r\n* Web: fix emoji pattern render in short names by @l5yth in <https://github.com/l5yth/potato-mesh/pull/760>\r\n* Data: catch packet handler errors by @l5yth in <https://github.com/l5yth/potato-mesh/pull/759>\r\n* Web: fix meshcore message duplication with 120s dupe protection by @l5yth in <https://github.com/l5yth/potato-mesh/pull/758>\r\n* Web: fix node duplication through message synthetization by @l5yth in <https://github.com/l5yth/potato-mesh/pull/757>\r\n* Ingestor: deduplicate meshcore messages by @l5yth in <https://github.com/l5yth/potato-mesh/pull/752>\r\n* Fix reaction handling and classification by @l5yth in <https://github.com/l5yth/potato-mesh/pull/750>\r\n* Web: fix federation node counts by @l5yth in <https://github.com/l5yth/potato-mesh/pull/749>\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.6.1...v0.6.2",
      "notesHtml": "<p>This is a service release of the radio mesh app-suite <code>potato-mesh</code> v0.6.2, focused on Meshcore-related fixes, federation accuracy, and bridge coverage. The Matrix bridge now understands Meshcore traffic, and several duplication and classification issues in the web app and ingestor have been tightened up.</p>\n<h3>Features</h3>\n<ul>\n<li>Matrix: enable meshcore by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/761\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/761</a></li>\n<li>Web: show colocated nodes by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/753\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/753</a></li>\n</ul>\n<h3>Fixes</h3>\n<ul>\n<li>Web: fix emoji pattern render in short names by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/760\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/760</a></li>\n<li>Data: catch packet handler errors by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/759\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/759</a></li>\n<li>Web: fix meshcore message duplication with 120s dupe protection by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/758\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/758</a></li>\n<li>Web: fix node duplication through message synthetization by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/757\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/757</a></li>\n<li>Ingestor: deduplicate meshcore messages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/752\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/752</a></li>\n<li>Fix reaction handling and classification by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/750\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/750</a></li>\n<li>Web: fix federation node counts by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/749\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/749</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.6.1...v0.6.2\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.6.1...v0.6.2</a></p>\n"
    },
    {
      "version": "v0.6.1",
      "name": "v0.6.1",
      "datetime": "2026-04-15T10:49:53Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.6.1",
      "prerelease": false,
      "notes": "This is a service release of the radio mesh app-suite `potato-mesh` v0.6.1 which improves performance and stability. After the previous major breaking release, this cleans up the UI further, addresses some regressions and drastically improves DB operation performance and interface caching.\r\n\r\n## What's Changed\r\n* chore: bump version to 0.6.1 by @l5yth in https://github.com/l5yth/potato-mesh/pull/726\r\n* data: better lora frequency handling for meshtastic by @l5yth in https://github.com/l5yth/potato-mesh/pull/733\r\n* web: per protocol active node counts by @l5yth in https://github.com/l5yth/potato-mesh/pull/735\r\n* ingestor: fix serial connection failures by @l5yth in https://github.com/l5yth/potato-mesh/pull/736\r\n* build(deps): bump rand from 0.9.2 to 0.9.4 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/741\r\n* web: restore refresh and protocol buttons by @l5yth in https://github.com/l5yth/potato-mesh/pull/742\r\n* web: fix federation resolver issue with multi addresses by @l5yth in https://github.com/l5yth/potato-mesh/pull/743\r\n* web: optimize caching by @l5yth in https://github.com/l5yth/potato-mesh/pull/744\r\n* web: fix meshcore node misclassification by @l5yth in https://github.com/l5yth/potato-mesh/pull/748\r\n\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.6.0...v0.6.1",
      "notesHtml": "<p>This is a service release of the radio mesh app-suite <code>potato-mesh</code> v0.6.1 which improves performance and stability. After the previous major breaking release, this cleans up the UI further, addresses some regressions and drastically improves DB operation performance and interface caching.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>chore: bump version to 0.6.1 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/726\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/726</a></li>\n<li>data: better lora frequency handling for meshtastic by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/733\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/733</a></li>\n<li>web: per protocol active node counts by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/735\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/735</a></li>\n<li>ingestor: fix serial connection failures by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/736\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/736</a></li>\n<li>build(deps): bump rand from 0.9.2 to 0.9.4 in /matrix by @dependabot[bot] in <a href=\"https://github.com/l5yth/potato-mesh/pull/741\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/741</a></li>\n<li>web: restore refresh and protocol buttons by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/742\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/742</a></li>\n<li>web: fix federation resolver issue with multi addresses by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/743\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/743</a></li>\n<li>web: optimize caching by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/744\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/744</a></li>\n<li>web: fix meshcore node misclassification by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/748\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/748</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.6.0...v0.6.1\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.6.0...v0.6.1</a></p>\n"
    },
    {
      "version": "v0.6.0",
      "name": "potato-mesh v0.6.0 \"meshcore\"",
      "datetime": "2026-04-09T07:30:20Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.6.0",
      "prerelease": false,
      "notes": "This is a service release of the radio mesh app-suite `potato-mesh` v0.6.0 which introduces new features and overhauls the user interface. The primary notable change is added support for multi-protocol along with an implementation of **Meshcore** in ingestor, web app, and frontend.\r\n\r\nDemo: <https://potatomesh.net/>\r\n\r\n## Meshcore\r\n\r\nTo start ingesting Meshcore data to an upgraded potato-mesh web app, simply tell your ingestor to use the `PROTOCOL=\"meshcore\"`.\r\n\r\n## About Pages\r\n\r\nThe other notable feature is the removal of the \"darkmode\" and \"info\" buttons in favor of customizable markdown pages that allow for more flexibility with regard to custom content (info about presets, contact information, etc.) - see `/pages/*.md` in the web app (#723).\r\n\r\n## Breaking Variable Changes\r\n\r\nThe following deprecated environmental variables have been removed in this release finally (#704):\r\n* ~~POTATOMESH_INSTANCE~~ - please use `INSTANCE_DOMAIN`\r\n* ~~MESH_SERIAL~~ and ~~PORT~~ - please use `CONNECTION`\r\n\r\n## What's Changed\r\n* [meshcore] fix: race condition  by @benallfree in https://github.com/l5yth/potato-mesh/pull/676\r\n* [meshcore] fix: get meshcore protocol icon displaying correctly by @benallfree in https://github.com/l5yth/potato-mesh/pull/681\r\n* fix: address review comments from PRs #676 and #681 by @l5yth in https://github.com/l5yth/potato-mesh/pull/689\r\n* web: distinguish meshcore from meshtastic in frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/688\r\n* web: add proper short names for meshcore companions by @l5yth in https://github.com/l5yth/potato-mesh/pull/693\r\n* data: provide frequency and modem preset for meshcore by @l5yth in https://github.com/l5yth/potato-mesh/pull/694\r\n* data: register meshcore channel mappings by @l5yth in https://github.com/l5yth/potato-mesh/pull/695\r\n* web: define meshcore modem presets by @l5yth in https://github.com/l5yth/potato-mesh/pull/696\r\n* data: derive meshcore channel probe bound from device max_channels by @l5yth in https://github.com/l5yth/potato-mesh/pull/701\r\n* web: protect real node names from fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/702\r\n* release: v0.6.0 — remove deprecated env var aliases by @l5yth in https://github.com/l5yth/potato-mesh/pull/704\r\n* web: fix node disappearance role reset by @l5yth in https://github.com/l5yth/potato-mesh/pull/707\r\n* web: reference meshcore nodes in chat by @l5yth in https://github.com/l5yth/potato-mesh/pull/709\r\n* web: sort channels by activity not index by @l5yth in https://github.com/l5yth/potato-mesh/pull/711\r\n* data: fix meshcore ingestore self reporting by @l5yth in https://github.com/l5yth/potato-mesh/pull/713\r\n* data: fix position time updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/715\r\n* web: facelift by @l5yth in https://github.com/l5yth/potato-mesh/pull/716\r\n* chore: prepare codebase for breaking release by @l5yth in https://github.com/l5yth/potato-mesh/pull/718\r\n* data: trace analysus multi ingestor support by @l5yth in https://github.com/l5yth/potato-mesh/pull/721\r\n* web: fix federation for multi protocol by @l5yth in https://github.com/l5yth/potato-mesh/pull/722\r\n* web: add markdown static pages by @l5yth in https://github.com/l5yth/potato-mesh/pull/723\r\n\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.12...v0.6.0",
      "notesHtml": "<p>This is a service release of the radio mesh app-suite <code>potato-mesh</code> v0.6.0 which introduces new features and overhauls the user interface. The primary notable change is added support for multi-protocol along with an implementation of <strong>Meshcore</strong> in ingestor, web app, and frontend.</p>\n<p>Demo: <a href=\"https://potatomesh.net/\" target=\"_blank\" rel=\"noopener noreferrer\">https://potatomesh.net/</a></p>\n<h2>Meshcore</h2>\n<p>To start ingesting Meshcore data to an upgraded potato-mesh web app, simply tell your ingestor to use the <code>PROTOCOL=\"meshcore\"</code>.</p>\n<h2>About Pages</h2>\n<p>The other notable feature is the removal of the \"darkmode\" and \"info\" buttons in favor of customizable markdown pages that allow for more flexibility with regard to custom content (info about presets, contact information, etc.) - see <code>/pages/*.md</code> in the web app (#723).</p>\n<h2>Breaking Variable Changes</h2>\n<p>The following deprecated environmental variables have been removed in this release finally (#704):</p>\n<ul>\n<li><del>POTATOMESH_INSTANCE</del> - please use <code>INSTANCE_DOMAIN</code></li>\n<li><del>MESH_SERIAL</del> and <del>PORT</del> - please use <code>CONNECTION</code></li>\n</ul>\n<h2>What's Changed</h2>\n<ul>\n<li>[meshcore] fix: race condition  by @benallfree in <a href=\"https://github.com/l5yth/potato-mesh/pull/676\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/676</a></li>\n<li>[meshcore] fix: get meshcore protocol icon displaying correctly by @benallfree in <a href=\"https://github.com/l5yth/potato-mesh/pull/681\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/681</a></li>\n<li>fix: address review comments from PRs #676 and #681 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/689\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/689</a></li>\n<li>web: distinguish meshcore from meshtastic in frontend by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/688\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/688</a></li>\n<li>web: add proper short names for meshcore companions by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/693\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/693</a></li>\n<li>data: provide frequency and modem preset for meshcore by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/694\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/694</a></li>\n<li>data: register meshcore channel mappings by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/695\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/695</a></li>\n<li>web: define meshcore modem presets by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/696\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/696</a></li>\n<li>data: derive meshcore channel probe bound from device max_channels by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/701\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/701</a></li>\n<li>web: protect real node names from fallback by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/702\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/702</a></li>\n<li>release: v0.6.0 — remove deprecated env var aliases by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/704\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/704</a></li>\n<li>web: fix node disappearance role reset by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/707\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/707</a></li>\n<li>web: reference meshcore nodes in chat by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/709\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/709</a></li>\n<li>web: sort channels by activity not index by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/711\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/711</a></li>\n<li>data: fix meshcore ingestore self reporting by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/713\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/713</a></li>\n<li>data: fix position time updates by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/715\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/715</a></li>\n<li>web: facelift by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/716\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/716</a></li>\n<li>chore: prepare codebase for breaking release by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/718\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/718</a></li>\n<li>data: trace analysus multi ingestor support by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/721\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/721</a></li>\n<li>web: fix federation for multi protocol by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/722\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/722</a></li>\n<li>web: add markdown static pages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/723\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/723</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.12...v0.6.0\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.12...v0.6.0</a></p>\n"
    },
    {
      "version": "v0.5.12",
      "name": "app potato-mesh v0.5.12",
      "datetime": "2026-04-04T08:49:36Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.12",
      "prerelease": false,
      "notes": "This is a service release of the app potato-mesh v0.5.12 which improves performance and stability.\r\n\r\nNotably, the frontend went through some graphical tweaks to prepare for an upcoming multi-protocol release (meshcore, reticulum, etc.).\r\n\r\n## What's Changed\r\n* build(deps): bump quinn-proto from 0.11.13 to 0.11.14 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/646\r\n* build(deps): bump rustls-webpki from 0.103.8 to 0.103.10 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/649\r\n* Proposal: mesh provider pattern refactor by @benallfree in https://github.com/l5yth/potato-mesh/pull/651\r\n* data: resolve circular dependency of deamon.py by @l5yth in https://github.com/l5yth/potato-mesh/pull/653\r\n* fix upsert clearing node coordinates bug by @l5yth in https://github.com/l5yth/potato-mesh/pull/654\r\n* web: implement a 'protocol' field across systems by @l5yth in https://github.com/l5yth/potato-mesh/pull/655\r\n* feat: split device and power-sensor telemetry charts (#643) by @l5yth in https://github.com/l5yth/potato-mesh/pull/656\r\n* web: prepare frontend for multi protocol by @l5yth in https://github.com/l5yth/potato-mesh/pull/657\r\n* web: fix css issues by @l5yth in https://github.com/l5yth/potato-mesh/pull/659\r\n* data: prepare ingestor for meshcore by @l5yth in https://github.com/l5yth/potato-mesh/pull/658\r\n* app: only query meshtastic provider by @l5yth in https://github.com/l5yth/potato-mesh/pull/664\r\n* web: prepare release by @l5yth in https://github.com/l5yth/potato-mesh/pull/665\r\n* ci: update dependabot and codecov settings by @l5yth in https://github.com/l5yth/potato-mesh/pull/666\r\n* feat: implement meshcore provider by @l5yth in https://github.com/l5yth/potato-mesh/pull/663\r\n* data: handle store_forward and router_heartbeat portnum by @l5yth in https://github.com/l5yth/potato-mesh/pull/667\r\n* data/meshcore: fix ble and enable tcp by @l5yth in https://github.com/l5yth/potato-mesh/pull/669\r\n* chore: update mesh.sh to use requirements file by @benallfree in https://github.com/l5yth/potato-mesh/pull/675\r\n* chore: update xcode deps by @benallfree in https://github.com/l5yth/potato-mesh/pull/674\r\n* [meshcore] enh: short name should be 1st 4 hex digits of public key by @benallfree in https://github.com/l5yth/potato-mesh/pull/679\r\n* chore: refactor codebase before meshcore release by @l5yth in https://github.com/l5yth/potato-mesh/pull/682\r\n* enh: surface meshcore role types (#680) by @l5yth in https://github.com/l5yth/potato-mesh/pull/685\r\n\r\n## New Contributors\r\n* @benallfree made their first contribution in https://github.com/l5yth/potato-mesh/pull/651\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.11...v0.5.12",
      "notesHtml": "<p>This is a service release of the app potato-mesh v0.5.12 which improves performance and stability.</p>\n<p>Notably, the frontend went through some graphical tweaks to prepare for an upcoming multi-protocol release (meshcore, reticulum, etc.).</p>\n<h2>What's Changed</h2>\n<ul>\n<li>build(deps): bump quinn-proto from 0.11.13 to 0.11.14 in /matrix by @dependabot[bot] in <a href=\"https://github.com/l5yth/potato-mesh/pull/646\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/646</a></li>\n<li>build(deps): bump rustls-webpki from 0.103.8 to 0.103.10 in /matrix by @dependabot[bot] in <a href=\"https://github.com/l5yth/potato-mesh/pull/649\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/649</a></li>\n<li>Proposal: mesh provider pattern refactor by @benallfree in <a href=\"https://github.com/l5yth/potato-mesh/pull/651\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/651</a></li>\n<li>data: resolve circular dependency of deamon.py by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/653\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/653</a></li>\n<li>fix upsert clearing node coordinates bug by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/654\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/654</a></li>\n<li>web: implement a 'protocol' field across systems by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/655\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/655</a></li>\n<li>feat: split device and power-sensor telemetry charts (#643) by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/656\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/656</a></li>\n<li>web: prepare frontend for multi protocol by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/657\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/657</a></li>\n<li>web: fix css issues by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/659\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/659</a></li>\n<li>data: prepare ingestor for meshcore by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/658\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/658</a></li>\n<li>app: only query meshtastic provider by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/664\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/664</a></li>\n<li>web: prepare release by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/665\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/665</a></li>\n<li>ci: update dependabot and codecov settings by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/666\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/666</a></li>\n<li>feat: implement meshcore provider by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/663\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/663</a></li>\n<li>data: handle store_forward and router_heartbeat portnum by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/667\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/667</a></li>\n<li>data/meshcore: fix ble and enable tcp by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/669\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/669</a></li>\n<li>chore: update mesh.sh to use requirements file by @benallfree in <a href=\"https://github.com/l5yth/potato-mesh/pull/675\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/675</a></li>\n<li>chore: update xcode deps by @benallfree in <a href=\"https://github.com/l5yth/potato-mesh/pull/674\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/674</a></li>\n<li>[meshcore] enh: short name should be 1st 4 hex digits of public key by @benallfree in <a href=\"https://github.com/l5yth/potato-mesh/pull/679\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/679</a></li>\n<li>chore: refactor codebase before meshcore release by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/682\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/682</a></li>\n<li>enh: surface meshcore role types (#680) by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/685\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/685</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@benallfree made their first contribution in <a href=\"https://github.com/l5yth/potato-mesh/pull/651\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/651</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.11...v0.5.12\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.11...v0.5.12</a></p>\n"
    },
    {
      "version": "v0.5.11",
      "name": "app potato-mesh v0.5.11",
      "datetime": "2026-03-01T21:00:32Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.11",
      "prerelease": false,
      "notes": "This is a service release of the app potato-mesh v0.5.11 which improves performance and stability.\r\n\r\n## What's Changed\r\n* web: limit horizontal size of dropdown by @l5yth in https://github.com/l5yth/potato-mesh/pull/644\r\n* chore: bump version to 0.5.11 by @l5yth in https://github.com/l5yth/potato-mesh/pull/645\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.10...v0.5.11",
      "notesHtml": "<p>This is a service release of the app potato-mesh v0.5.11 which improves performance and stability.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>web: limit horizontal size of dropdown by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/644\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/644</a></li>\n<li>chore: bump version to 0.5.11 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/645\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/645</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.10...v0.5.11\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.10...v0.5.11</a></p>\n"
    },
    {
      "version": "v0.5.10",
      "name": "app potato-mesh v0.5.10",
      "datetime": "2026-02-16T20:16:31Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.10",
      "prerelease": false,
      "notes": "This is a service release of the app potato-mesh v0.5.10 which improves performance and stability.\r\n\r\n## What's Changed\r\n* l5y chore version 0510 by @l5yth in https://github.com/l5yth/potato-mesh/pull/608\r\n* web: add announcement banner by @l5yth in https://github.com/l5yth/potato-mesh/pull/609\r\n* web: daemonize federation worker pool to avoid deadlocks on stuck announcments by @l5yth in https://github.com/l5yth/potato-mesh/pull/610\r\n* web: decrypt PSK-1 unencrypted messages on arrival by @l5yth in https://github.com/l5yth/potato-mesh/pull/611\r\n* Add Apache 2.0 license headers to missing sources by @l5yth in https://github.com/l5yth/potato-mesh/pull/615\r\n* web: decrypted takes precedence by @l5yth in https://github.com/l5yth/potato-mesh/pull/614\r\n* matrix: logs only non-sensitive config fields by @l5yth in https://github.com/l5yth/potato-mesh/pull/616\r\n* matrix: config loading now merges optional TOML with CLI/env/secret inputs by @l5yth in https://github.com/l5yth/potato-mesh/pull/617\r\n* build(deps): bump bytes from 1.11.0 to 1.11.1 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/627\r\n* federation: ensure requests timeout properly and can be terminated by @l5yth in https://github.com/l5yth/potato-mesh/pull/631\r\n* web: supress encrypted text messages in frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/633\r\n* ci: fix docker compose and docs by @l5yth in https://github.com/l5yth/potato-mesh/pull/634\r\n* ingestor: report self id per packet by @l5yth in https://github.com/l5yth/potato-mesh/pull/635\r\n* web: do not touch neighbor last seen on neighbor info by @l5yth in https://github.com/l5yth/potato-mesh/pull/636\r\n* web: do not merge channels by ID in frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/637\r\n* web: do merge channels by name by @l5yth in https://github.com/l5yth/potato-mesh/pull/640\r\n* web: expose node stats in distinct api by @l5yth in https://github.com/l5yth/potato-mesh/pull/641\r\n\r\n## New Contributors\r\n* @dependabot[bot] made their first contribution in https://github.com/l5yth/potato-mesh/pull/627\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.9...v0.5.10",
      "notesHtml": "<p>This is a service release of the app potato-mesh v0.5.10 which improves performance and stability.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>l5y chore version 0510 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/608\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/608</a></li>\n<li>web: add announcement banner by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/609\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/609</a></li>\n<li>web: daemonize federation worker pool to avoid deadlocks on stuck announcments by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/610\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/610</a></li>\n<li>web: decrypt PSK-1 unencrypted messages on arrival by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/611\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/611</a></li>\n<li>Add Apache 2.0 license headers to missing sources by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/615\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/615</a></li>\n<li>web: decrypted takes precedence by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/614\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/614</a></li>\n<li>matrix: logs only non-sensitive config fields by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/616\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/616</a></li>\n<li>matrix: config loading now merges optional TOML with CLI/env/secret inputs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/617\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/617</a></li>\n<li>build(deps): bump bytes from 1.11.0 to 1.11.1 in /matrix by @dependabot[bot] in <a href=\"https://github.com/l5yth/potato-mesh/pull/627\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/627</a></li>\n<li>federation: ensure requests timeout properly and can be terminated by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/631\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/631</a></li>\n<li>web: supress encrypted text messages in frontend by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/633\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/633</a></li>\n<li>ci: fix docker compose and docs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/634\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/634</a></li>\n<li>ingestor: report self id per packet by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/635\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/635</a></li>\n<li>web: do not touch neighbor last seen on neighbor info by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/636\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/636</a></li>\n<li>web: do not merge channels by ID in frontend by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/637\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/637</a></li>\n<li>web: do merge channels by name by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/640\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/640</a></li>\n<li>web: expose node stats in distinct api by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/641\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/641</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@dependabot[bot] made their first contribution in <a href=\"https://github.com/l5yth/potato-mesh/pull/627\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/627</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.9...v0.5.10\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.9...v0.5.10</a></p>\n"
    },
    {
      "version": "v0.5.9",
      "name": "app potato-mesh v0.5.9",
      "datetime": "2026-01-08T15:01:11Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.9",
      "prerelease": false,
      "notes": "This is a service release of the app potato-mesh v0.5.9 which improves performance and stability but also adds new features. This is the first stable release of the **matrix bridge**.\r\n\r\n<img width=\"749\" height=\"561\" alt=\"2026-01-08-155927_1366x768_scrot\" src=\"https://github.com/user-attachments/assets/05df0e82-80c1-401b-ac52-2df53d4fdad8\" />\r\n\r\nTake a look at [matrix/README.md](matrix/README.md) for instructions or join [#potato-bridge:c-base.org](https://matrix.to/#/#potato-bridge:c-base.org) for a Demo.\r\n\r\n## What's Changed\r\n* chore: bump version to 0.5.9 by @l5yth in https://github.com/l5yth/potato-mesh/pull/569\r\n* web: ensure unknown nodes for messages and traces by @l5yth in https://github.com/l5yth/potato-mesh/pull/572\r\n* web: add mesh.qrp.ro as seed node by @l5yth in https://github.com/l5yth/potato-mesh/pull/573\r\n* Support BLE UUID format for macOS Bluetooth devices by @apo-mak in https://github.com/l5yth/potato-mesh/pull/575\r\n* nix flake by @benjajaja in https://github.com/l5yth/potato-mesh/pull/577\r\n* web: hide legend by default by @l5yth in https://github.com/l5yth/potato-mesh/pull/582\r\n* ci: run nix flake check on ci by @l5yth in https://github.com/l5yth/potato-mesh/pull/583\r\n* ingestor: support ROUTING_APP messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/584\r\n* web: allow certain charts to overflow upper bounds by @l5yth in https://github.com/l5yth/potato-mesh/pull/585\r\n* matrix: fix empty bridge state json by @l5yth in https://github.com/l5yth/potato-mesh/pull/592\r\n* web: hide the default '0' tab when not active by @l5yth in https://github.com/l5yth/potato-mesh/pull/593\r\n* matrix: cache seen messages by rx_time not id by @l5yth in https://github.com/l5yth/potato-mesh/pull/594\r\n* matrix: fixed the text-message checkpoint regression by @l5yth in https://github.com/l5yth/potato-mesh/pull/595\r\n* web: establish menu structure by @l5yth in https://github.com/l5yth/potato-mesh/pull/597\r\n* web: display traces of last 28 days if available by @l5yth in https://github.com/l5yth/potato-mesh/pull/599\r\n* ci: update ruby to 4 by @l5yth in https://github.com/l5yth/potato-mesh/pull/601\r\n* matrix: move short name to display name by @l5yth in https://github.com/l5yth/potato-mesh/pull/602\r\n* web: fix stale node queries by @l5yth in https://github.com/l5yth/potato-mesh/pull/603\r\n* web: collapse federation map ledgend by @l5yth in https://github.com/l5yth/potato-mesh/pull/604\r\n* matrix: listen for synapse on port 41448 by @l5yth in https://github.com/l5yth/potato-mesh/pull/607\r\n\r\n## New Contributors\r\n* @benjajaja made their first contribution in https://github.com/l5yth/potato-mesh/pull/577\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.8...v0.5.9",
      "notesHtml": "<p>This is a service release of the app potato-mesh v0.5.9 which improves performance and stability but also adds new features. This is the first stable release of the <strong>matrix bridge</strong>.</p>\n<img alt=\"2026-01-08-155927_1366x768_scrot\" src=\"https://github.com/user-attachments/assets/05df0e82-80c1-401b-ac52-2df53d4fdad8\" /><p>Take a look at <a href=\"https://github.com/l5yth/potato-mesh/blob/HEAD/matrix/README.md\" target=\"_blank\" rel=\"noopener noreferrer\">matrix/README.md</a> for instructions or join <a href=\"https://matrix.to/#/#potato-bridge:c-base.org\" target=\"_blank\" rel=\"noopener noreferrer\">#potato-bridge:c-base.org</a> for a Demo.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>chore: bump version to 0.5.9 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/569\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/569</a></li>\n<li>web: ensure unknown nodes for messages and traces by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/572\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/572</a></li>\n<li>web: add mesh.qrp.ro as seed node by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/573\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/573</a></li>\n<li>Support BLE UUID format for macOS Bluetooth devices by @apo-mak in <a href=\"https://github.com/l5yth/potato-mesh/pull/575\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/575</a></li>\n<li>nix flake by @benjajaja in <a href=\"https://github.com/l5yth/potato-mesh/pull/577\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/577</a></li>\n<li>web: hide legend by default by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/582\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/582</a></li>\n<li>ci: run nix flake check on ci by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/583\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/583</a></li>\n<li>ingestor: support ROUTING_APP messages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/584\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/584</a></li>\n<li>web: allow certain charts to overflow upper bounds by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/585\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/585</a></li>\n<li>matrix: fix empty bridge state json by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/592\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/592</a></li>\n<li>web: hide the default '0' tab when not active by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/593\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/593</a></li>\n<li>matrix: cache seen messages by rx_time not id by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/594\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/594</a></li>\n<li>matrix: fixed the text-message checkpoint regression by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/595\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/595</a></li>\n<li>web: establish menu structure by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/597\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/597</a></li>\n<li>web: display traces of last 28 days if available by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/599\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/599</a></li>\n<li>ci: update ruby to 4 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/601\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/601</a></li>\n<li>matrix: move short name to display name by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/602\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/602</a></li>\n<li>web: fix stale node queries by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/603\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/603</a></li>\n<li>web: collapse federation map ledgend by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/604\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/604</a></li>\n<li>matrix: listen for synapse on port 41448 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/607\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/607</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@benjajaja made their first contribution in <a href=\"https://github.com/l5yth/potato-mesh/pull/577\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/577</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.8...v0.5.9\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.8...v0.5.9</a></p>\n"
    },
    {
      "version": "v0.5.8",
      "name": "app potato-mesh v0.5.8",
      "datetime": "2025-12-16T20:46:06Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.8",
      "prerelease": false,
      "notes": "This is a hotfix release of the app potato-mesh v0.5.8 resolving a regression with federation. Upgrading is highly recommended if issues with federation exist.\r\n\r\n\r\n## What's Changed\r\n* chore: bump version to 0.5.8 by @l5yth in https://github.com/l5yth/potato-mesh/pull/551\r\n* data: add thorough daemon unit tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/553\r\n* app: add utility coverage tests for main.dart by @l5yth in https://github.com/l5yth/potato-mesh/pull/552\r\n* matrix: omit the api part in base url by @l5yth in https://github.com/l5yth/potato-mesh/pull/554\r\n* matrix: add health checks to startup by @l5yth in https://github.com/l5yth/potato-mesh/pull/555\r\n* matrix: add docker file for bridge by @l5yth in https://github.com/l5yth/potato-mesh/pull/556\r\n* chore: update readme by @l5yth in https://github.com/l5yth/potato-mesh/pull/561\r\n* web: fix federation signature validation and create fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/563\r\n* matrix: fix docker build by @l5yth in https://github.com/l5yth/potato-mesh/pull/564\r\n* matrix: fix docker build by @l5yth in https://github.com/l5yth/potato-mesh/pull/565\r\n* web: add ?since= parameter to all apis by @l5yth in https://github.com/l5yth/potato-mesh/pull/566\r\n* data: implement whitelist for ingestor by @l5yth in https://github.com/l5yth/potato-mesh/pull/567\r\n* web: add secondary seed node jmrp.io by @l5yth in https://github.com/l5yth/potato-mesh/pull/568\r\n\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.7...v0.5.8",
      "notesHtml": "<p>This is a hotfix release of the app potato-mesh v0.5.8 resolving a regression with federation. Upgrading is highly recommended if issues with federation exist.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>chore: bump version to 0.5.8 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/551\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/551</a></li>\n<li>data: add thorough daemon unit tests by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/553\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/553</a></li>\n<li>app: add utility coverage tests for main.dart by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/552\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/552</a></li>\n<li>matrix: omit the api part in base url by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/554\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/554</a></li>\n<li>matrix: add health checks to startup by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/555\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/555</a></li>\n<li>matrix: add docker file for bridge by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/556\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/556</a></li>\n<li>chore: update readme by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/561\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/561</a></li>\n<li>web: fix federation signature validation and create fallback by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/563\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/563</a></li>\n<li>matrix: fix docker build by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/564\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/564</a></li>\n<li>matrix: fix docker build by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/565\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/565</a></li>\n<li>web: add ?since= parameter to all apis by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/566\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/566</a></li>\n<li>data: implement whitelist for ingestor by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/567\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/567</a></li>\n<li>web: add secondary seed node jmrp.io by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/568\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/568</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.7...v0.5.8\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.7...v0.5.8</a></p>\n"
    },
    {
      "version": "v0.5.7",
      "name": "app potato-mesh v0.5.7",
      "datetime": "2025-12-14T19:37:50Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.7",
      "prerelease": false,
      "notes": "This is a service release of the app potato-mesh v0.5.7 which improves performance and stability but also adds new features.\r\n\r\n* **!Breaking**: the ingestor environment variable ~~`POTATOMESH_INSTANCE`~~ was renamed to `INSTANCE_DOMAIN` - **please update your configs and scripts**. Now you can set the same variable in both web and ingestor builds.\r\n* The ingestor can now blacklist channels by setting the `HIDDEN_CHANNELS=\"foo,bar\"` environment variable passing a comma-separated list of channels that shall not be ingested.\r\n* A map of all potato-mesh instances is available on the `/federation` endpoint (see [potatomesh.net/federation](https://potatomesh.net/federation)).\r\n* Traceroutes are now rendered on the map as dashed lines between nodes.\r\n* Ingestors are now reporting liveliness and can be checked on the api `/api/ingestors`. \r\n\r\n<img width=\"1161\" height=\"623\" alt=\"traces\" src=\"https://github.com/user-attachments/assets/63dbbfef-7388-4254-bd5e-8e7e60938a20\" />\r\n\r\n## What's Changed\r\n* matrix: create potato-matrix-bridge by @l5yth in https://github.com/l5yth/potato-mesh/pull/528\r\n* add contact link to the instance data by @apo-mak in https://github.com/l5yth/potato-mesh/pull/533\r\n* Add Federation Map by @apo-mak in https://github.com/l5yth/potato-mesh/pull/532\r\n* web: further refine the federation page by @l5yth in https://github.com/l5yth/potato-mesh/pull/534\r\n* Use INSTANCE_DOMAIN env for ingestor by @l5yth in https://github.com/l5yth/potato-mesh/pull/536\r\n* Normalize numeric node roles to canonical labels by @l5yth in https://github.com/l5yth/potato-mesh/pull/539\r\n* web: fix traces rendering by @l5yth in https://github.com/l5yth/potato-mesh/pull/535\r\n* web: fix telemetry api to return current in amperes by @l5yth in https://github.com/l5yth/potato-mesh/pull/541\r\n* Handle zero telemetry aggregates by @l5yth in https://github.com/l5yth/potato-mesh/pull/538\r\n* chore: bump version to 0.5.7 by @l5yth in https://github.com/l5yth/potato-mesh/pull/542\r\n* web: fix traces submission with optional fields on udp by @l5yth in https://github.com/l5yth/potato-mesh/pull/545\r\n* web: improve instances map and table view by @l5yth in https://github.com/l5yth/potato-mesh/pull/546\r\n* web: fix limit when counting remote nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/547\r\n* data: hide channels that have been flag for ignoring by @l5yth in https://github.com/l5yth/potato-mesh/pull/548\r\n* Harden instance selector navigation URLs by @l5yth in https://github.com/l5yth/potato-mesh/pull/550\r\n* data: track ingestors heartbeat by @l5yth in https://github.com/l5yth/potato-mesh/pull/549\r\n\r\n## New Contributors\r\n* @apo-mak made their first contribution in https://github.com/l5yth/potato-mesh/pull/533\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.6...v0.5.7",
      "notesHtml": "<p>This is a service release of the app potato-mesh v0.5.7 which improves performance and stability but also adds new features.</p>\n<ul>\n<li><strong>!Breaking</strong>: the ingestor environment variable <del><code>POTATOMESH_INSTANCE</code></del> was renamed to <code>INSTANCE_DOMAIN</code> - <strong>please update your configs and scripts</strong>. Now you can set the same variable in both web and ingestor builds.</li>\n<li>The ingestor can now blacklist channels by setting the <code>HIDDEN_CHANNELS=\"foo,bar\"</code> environment variable passing a comma-separated list of channels that shall not be ingested.</li>\n<li>A map of all potato-mesh instances is available on the <code>/federation</code> endpoint (see <a href=\"https://potatomesh.net/federation\" target=\"_blank\" rel=\"noopener noreferrer\">potatomesh.net/federation</a>).</li>\n<li>Traceroutes are now rendered on the map as dashed lines between nodes.</li>\n<li>Ingestors are now reporting liveliness and can be checked on the api <code>/api/ingestors</code>.</li>\n</ul>\n<img alt=\"traces\" src=\"https://github.com/user-attachments/assets/63dbbfef-7388-4254-bd5e-8e7e60938a20\" /><h2>What's Changed</h2>\n<ul>\n<li>matrix: create potato-matrix-bridge by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/528\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/528</a></li>\n<li>add contact link to the instance data by @apo-mak in <a href=\"https://github.com/l5yth/potato-mesh/pull/533\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/533</a></li>\n<li>Add Federation Map by @apo-mak in <a href=\"https://github.com/l5yth/potato-mesh/pull/532\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/532</a></li>\n<li>web: further refine the federation page by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/534\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/534</a></li>\n<li>Use INSTANCE_DOMAIN env for ingestor by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/536\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/536</a></li>\n<li>Normalize numeric node roles to canonical labels by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/539\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/539</a></li>\n<li>web: fix traces rendering by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/535\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/535</a></li>\n<li>web: fix telemetry api to return current in amperes by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/541\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/541</a></li>\n<li>Handle zero telemetry aggregates by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/538\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/538</a></li>\n<li>chore: bump version to 0.5.7 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/542\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/542</a></li>\n<li>web: fix traces submission with optional fields on udp by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/545\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/545</a></li>\n<li>web: improve instances map and table view by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/546\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/546</a></li>\n<li>web: fix limit when counting remote nodes by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/547\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/547</a></li>\n<li>data: hide channels that have been flag for ignoring by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/548\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/548</a></li>\n<li>Harden instance selector navigation URLs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/550\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/550</a></li>\n<li>data: track ingestors heartbeat by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/549\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/549</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@apo-mak made their first contribution in <a href=\"https://github.com/l5yth/potato-mesh/pull/533\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/533</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.6...v0.5.7\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.6...v0.5.7</a></p>\n"
    },
    {
      "version": "v0.5.6",
      "name": "app potato-mesh v0.5.6",
      "datetime": "2025-11-26T21:21:07Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.6",
      "prerelease": false,
      "notes": "This is a feature release of the app potato-mesh v0.5.6 which improves performance and stability but also adds new features.\r\n\r\n* Traceroute packets are now supported, available on `/api/traces` and rendered as dotted lines on the map\r\n* We now also render current and IAQ in the `/charts`\r\n* Weird numbers appearing instead of emoji reactions are fixed now\r\n* Added mobile app that can be installed on Android or iOS to read your local mesh on the go\r\n\r\n## What's Changed\r\n\r\n* Bump version and update changelog by @l5yth in https://github.com/l5yth/potato-mesh/pull/462\r\n* feat: implement traceroute app packet handling across the stack by @l5yth in https://github.com/l5yth/potato-mesh/pull/463\r\n* add traceroutes to frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/466\r\n* rate limit host device telemetry by @l5yth in https://github.com/l5yth/potato-mesh/pull/467\r\n* merge secondary channels by name by @l5yth in https://github.com/l5yth/potato-mesh/pull/468\r\n* address missing id field ingestor bug by @l5yth in https://github.com/l5yth/potato-mesh/pull/469\r\n* aggregate telemetry over the last 7 days by @l5yth in https://github.com/l5yth/potato-mesh/pull/470\r\n* subscribe to traceroute app pubsub topic by @l5yth in https://github.com/l5yth/potato-mesh/pull/471\r\n* add frequency and preset to node table by @l5yth in https://github.com/l5yth/potato-mesh/pull/472\r\n* Fix 1 after emojis in reply. by @Alexkurd in https://github.com/l5yth/potato-mesh/pull/464\r\n* Prevent message ids from being treated as node identifiers by @l5yth in https://github.com/l5yth/potato-mesh/pull/475\r\n* Floor override frequencies to MHz integers by @l5yth in https://github.com/l5yth/potato-mesh/pull/476\r\n* web: remove range from charts labels by @l5yth in https://github.com/l5yth/potato-mesh/pull/485\r\n* Handle pre-release Docker tagging by @l5yth in https://github.com/l5yth/potato-mesh/pull/486\r\n* Add Meshtastic reader Flutter app by @l5yth in https://github.com/l5yth/potato-mesh/pull/483\r\n* Align OCI labels in docker workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/487\r\n* Add mobile Flutter CI workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/488\r\n* update node detail hydration for traces by @l5yth in https://github.com/l5yth/potato-mesh/pull/490\r\n* Map numeric role ids to canonical Meshtastic roles by @l5yth in https://github.com/l5yth/potato-mesh/pull/489\r\n* Add comprehensive tests for Flutter reader by @l5yth in https://github.com/l5yth/potato-mesh/pull/491\r\n* Render reaction multiplier counts by @l5yth in https://github.com/l5yth/potato-mesh/pull/494\r\n* Handle reaction app packets without reply id by @l5yth in https://github.com/l5yth/potato-mesh/pull/495\r\n* app: add scaffholding gitignore by @l5yth in https://github.com/l5yth/potato-mesh/pull/496\r\n* app: add instance selector to settings by @l5yth in https://github.com/l5yth/potato-mesh/pull/497\r\n* app: instance and chat mvp by @l5yth in https://github.com/l5yth/potato-mesh/pull/498\r\n* app: add persistance by @l5yth in https://github.com/l5yth/potato-mesh/pull/501\r\n* ci: build app artifacts for tags by @l5yth in https://github.com/l5yth/potato-mesh/pull/503\r\n* ci: fix app artifacts for tags by @l5yth in https://github.com/l5yth/potato-mesh/pull/504\r\n* app: further harden refresh logic and prefer local first by @l5yth in https://github.com/l5yth/potato-mesh/pull/506\r\n* app: add theme selector by @l5yth in https://github.com/l5yth/potato-mesh/pull/507\r\n* app: implement notifications by @l5yth in https://github.com/l5yth/potato-mesh/pull/511\r\n* web: add ?since= parameter to api/messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/512\r\n* web: fix favicon by @l5yth in https://github.com/l5yth/potato-mesh/pull/515\r\n* app: generate proper icons by @l5yth in https://github.com/l5yth/potato-mesh/pull/516\r\n* spec: update test fixtures by @l5yth in https://github.com/l5yth/potato-mesh/pull/517\r\n* app: fix notification icon by @l5yth in https://github.com/l5yth/potato-mes\n…",
      "notesHtml": "<p>This is a feature release of the app potato-mesh v0.5.6 which improves performance and stability but also adds new features.</p>\n<ul>\n<li>Traceroute packets are now supported, available on <code>/api/traces</code> and rendered as dotted lines on the map</li>\n<li>We now also render current and IAQ in the <code>/charts</code></li>\n<li>Weird numbers appearing instead of emoji reactions are fixed now</li>\n<li>Added mobile app that can be installed on Android or iOS to read your local mesh on the go</li>\n</ul>\n<h2>What's Changed</h2>\n<ul>\n<li>Bump version and update changelog by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/462\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/462</a></li>\n<li>feat: implement traceroute app packet handling across the stack by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/463\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/463</a></li>\n<li>add traceroutes to frontend by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/466\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/466</a></li>\n<li>rate limit host device telemetry by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/467\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/467</a></li>\n<li>merge secondary channels by name by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/468\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/468</a></li>\n<li>address missing id field ingestor bug by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/469\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/469</a></li>\n<li>aggregate telemetry over the last 7 days by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/470\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/470</a></li>\n<li>subscribe to traceroute app pubsub topic by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/471\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/471</a></li>\n<li>add frequency and preset to node table by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/472\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/472</a></li>\n<li>Fix 1 after emojis in reply. by @Alexkurd in <a href=\"https://github.com/l5yth/potato-mesh/pull/464\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/464</a></li>\n<li>Prevent message ids from being treated as node identifiers by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/475\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/475</a></li>\n<li>Floor override frequencies to MHz integers by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/476\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/476</a></li>\n<li>web: remove range from charts labels by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/485\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/485</a></li>\n<li>Handle pre-release Docker tagging by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/486\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/486</a></li>\n<li>Add Meshtastic reader Flutter app by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/483\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/483</a></li>\n<li>Align OCI labels in docker workflow by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/487\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/487</a></li>\n<li>Add mobile Flutter CI workflow by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/488\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/488</a></li>\n<li>update node detail hydration for traces by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/490\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/490</a></li>\n<li>Map numeric role ids to canonical Meshtastic roles by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/489\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/489</a></li>\n<li>Add comprehensive tests for Flutter reader by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/491\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/491</a></li>\n<li>Render reaction multiplier counts by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/494\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/494</a></li>\n<li>Handle reaction app packets without reply id by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/495\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/495</a></li>\n<li>app: add scaffholding gitignore by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/496\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/496</a></li>\n<li>app: add instance selector to settings by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/497\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/497</a></li>\n<li>app: instance and chat mvp by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/498\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/498</a></li>\n<li>app: add persistance by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/501\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/501</a></li>\n<li>ci: build app artifacts for tags by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/503\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/503</a></li>\n<li>ci: fix app artifacts for tags by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/504\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/504</a></li>\n<li>app: further harden refresh logic and prefer local first by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/506\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/506</a></li>\n<li>app: add theme selector by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/507\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/507</a></li>\n<li>app: implement notifications by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/511\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/511</a></li>\n<li>web: add ?since= parameter to api/messages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/512\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/512</a></li>\n<li>web: fix favicon by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/515\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/515</a></li>\n<li>app: generate proper icons by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/516\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/516</a></li>\n<li>spec: update test fixtures by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/517\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/517</a></li>\n<li>app: fix notification icon by @l5yth in <a href=\"https://github.com/l5yth/potato-mes\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mes</a>\n…</li>\n</ul>\n"
    },
    {
      "version": "v0.5.5",
      "name": "app potato-mesh v0.5.5",
      "datetime": "2025-11-16T16:39:25Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.5",
      "prerelease": false,
      "notes": "This is a feature release of the app potato-mesh v0.5.5 which improves performance and stability but also adds new features to the node detail pages.\r\n\r\n![screenshot of version 0.5.5](https://github.com/l5yth/potato-mesh/blob/b23d864f1d67c8e83adb232287e10ef984296976/scrot-0.5.png)\r\n\r\n* Clicking a node's location in the table centers the map on it.\r\n* Clicking a node's long name gives full details about all data available for that node, including rendered charts for telemetry. The overlay is also available as deep link at `/nodes/${id}`.\r\n* For communities, all nodes' stats are rendered at `/charts` to get some insights.\r\n* Additionally, there are detail pages for `/map`, `/nodes`, and `/chat` if desired.\r\n* Lastly, the default zoom level can be overriden by setting `MAP_ZOOM` environmental variable. This disables auto-fitting.\r\n\r\n## What's Changed\r\n* Chore: bump version to 0.5.5 by @l5yth in https://github.com/l5yth/potato-mesh/pull/423\r\n* Chore: update license headers by @l5yth in https://github.com/l5yth/potato-mesh/pull/424\r\n* Fix ingestion of nodeinfo packets missing ids (#426) by @l5yth in https://github.com/l5yth/potato-mesh/pull/427\r\n* Ensure chat history fetches full message limit by @l5yth in https://github.com/l5yth/potato-mesh/pull/428\r\n* Add standalone full-screen map, chat, and nodes views by @l5yth in https://github.com/l5yth/potato-mesh/pull/429\r\n* Guard NodeInfo handler against missing IDs by @l5yth in https://github.com/l5yth/potato-mesh/pull/431\r\n* Add encrypted filter to messages API by @l5yth in https://github.com/l5yth/potato-mesh/pull/432\r\n* Fetch encrypted chat log entries for log tab by @l5yth in https://github.com/l5yth/potato-mesh/pull/434\r\n* Tighten map auto-fit behaviour by @l5yth in https://github.com/l5yth/potato-mesh/pull/435\r\n* Add debug payload tracing and ignored packet logging by @l5yth in https://github.com/l5yth/potato-mesh/pull/437\r\n* Filter zero-valued fields from API responses by @l5yth in https://github.com/l5yth/potato-mesh/pull/438\r\n* Ensure Meshtastic nodeinfo patch runs before importing interfaces by @l5yth in https://github.com/l5yth/potato-mesh/pull/440\r\n* Add node detail route and page by @l5yth in https://github.com/l5yth/potato-mesh/pull/441\r\n* Enable map centering from node table coordinates by @l5yth in https://github.com/l5yth/potato-mesh/pull/439\r\n* Refine node detail view layout by @l5yth in https://github.com/l5yth/potato-mesh/pull/442\r\n* Remove added 1 if reply with emoji by @Alexkurd in https://github.com/l5yth/potato-mesh/pull/443\r\n* Aggregate frontend snapshots across views by @l5yth in https://github.com/l5yth/potato-mesh/pull/447\r\n* nodes: add charts to detail pages by @l5yth in https://github.com/l5yth/potato-mesh/pull/449\r\n* nodes: improve charts on detail pages by @l5yth in https://github.com/l5yth/potato-mesh/pull/450\r\n* fix telemetry parsing for charts by @l5yth in https://github.com/l5yth/potato-mesh/pull/451\r\n* nodes: render charts detail pages as overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/452\r\n* charts: render aggregated telemetry charts for all nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/453\r\n* env: add map zoom by @l5yth in https://github.com/l5yth/potato-mesh/pull/454\r\n* Added reaction-aware handling by @l5yth in https://github.com/l5yth/potato-mesh/pull/455\r\n* Added comprehensive helper unit tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/457\r\n\r\n## New Contributors\r\n* @Alexkurd made their first contribution in https://github.com/l5yth/potato-mesh/pull/443\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.4...v0.5.5",
      "notesHtml": "<p>This is a feature release of the app potato-mesh v0.5.5 which improves performance and stability but also adds new features to the node detail pages.</p>\n<p><img src=\"https://github.com/l5yth/potato-mesh/blob/b23d864f1d67c8e83adb232287e10ef984296976/scrot-0.5.png\" alt=\"screenshot of version 0.5.5\" /></p>\n<ul>\n<li>Clicking a node's location in the table centers the map on it.</li>\n<li>Clicking a node's long name gives full details about all data available for that node, including rendered charts for telemetry. The overlay is also available as deep link at <code>/nodes/${id}</code>.</li>\n<li>For communities, all nodes' stats are rendered at <code>/charts</code> to get some insights.</li>\n<li>Additionally, there are detail pages for <code>/map</code>, <code>/nodes</code>, and <code>/chat</code> if desired.</li>\n<li>Lastly, the default zoom level can be overriden by setting <code>MAP_ZOOM</code> environmental variable. This disables auto-fitting.</li>\n</ul>\n<h2>What's Changed</h2>\n<ul>\n<li>Chore: bump version to 0.5.5 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/423\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/423</a></li>\n<li>Chore: update license headers by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/424\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/424</a></li>\n<li>Fix ingestion of nodeinfo packets missing ids (#426) by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/427\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/427</a></li>\n<li>Ensure chat history fetches full message limit by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/428\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/428</a></li>\n<li>Add standalone full-screen map, chat, and nodes views by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/429\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/429</a></li>\n<li>Guard NodeInfo handler against missing IDs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/431\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/431</a></li>\n<li>Add encrypted filter to messages API by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/432\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/432</a></li>\n<li>Fetch encrypted chat log entries for log tab by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/434\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/434</a></li>\n<li>Tighten map auto-fit behaviour by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/435\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/435</a></li>\n<li>Add debug payload tracing and ignored packet logging by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/437\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/437</a></li>\n<li>Filter zero-valued fields from API responses by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/438\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/438</a></li>\n<li>Ensure Meshtastic nodeinfo patch runs before importing interfaces by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/440\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/440</a></li>\n<li>Add node detail route and page by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/441\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/441</a></li>\n<li>Enable map centering from node table coordinates by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/439\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/439</a></li>\n<li>Refine node detail view layout by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/442\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/442</a></li>\n<li>Remove added 1 if reply with emoji by @Alexkurd in <a href=\"https://github.com/l5yth/potato-mesh/pull/443\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/443</a></li>\n<li>Aggregate frontend snapshots across views by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/447\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/447</a></li>\n<li>nodes: add charts to detail pages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/449\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/449</a></li>\n<li>nodes: improve charts on detail pages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/450\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/450</a></li>\n<li>fix telemetry parsing for charts by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/451\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/451</a></li>\n<li>nodes: render charts detail pages as overlay by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/452\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/452</a></li>\n<li>charts: render aggregated telemetry charts for all nodes by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/453\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/453</a></li>\n<li>env: add map zoom by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/454\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/454</a></li>\n<li>Added reaction-aware handling by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/455\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/455</a></li>\n<li>Added comprehensive helper unit tests by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/457\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/457</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@Alexkurd made their first contribution in <a href=\"https://github.com/l5yth/potato-mesh/pull/443\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/443</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.4...v0.5.5\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.4...v0.5.5</a></p>\n"
    },
    {
      "version": "v0.5.4",
      "name": "app potato-mesh v0.5.4",
      "datetime": "2025-11-08T08:53:45Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.4",
      "prerelease": false,
      "notes": "This is a feature release of the app potato-mesh v0.5.4 which improves performance and stability but also adds new features to the chat panel.\r\n\r\nWith this release, **radio logs** are seperated from the actual chat messages. Messages on different channels are now displayed in **different tabs**. Direct messages will be ignored but anything else that can be decrypted, will be displayed. Encrypted messages just show up in the log with a note. The chat and the logs can now be **filtered by node names** - just use the filter input box on the top of the map. Furthermore, this release also implements **reactions and responses**.\r\n\r\n## What's Changed\r\n* Chore: bump version to 0.5.4 by @l5yth in https://github.com/l5yth/potato-mesh/pull/388\r\n* fix: Mesh-Ingestor: Fix error for non-existing datetime.UTC reference by @KenADev in https://github.com/l5yth/potato-mesh/pull/396\r\n* feat: Mesh-Ingestor: Ability to provide already-existing interface instance by @KenADev in https://github.com/l5yth/potato-mesh/pull/395\r\n* Config: Read PROM_REPORT_IDS from environment by @nicjansma in https://github.com/l5yth/potato-mesh/pull/398\r\n* Add Prometheus monitoring documentation by @l5yth in https://github.com/l5yth/potato-mesh/pull/399\r\n* Document federation refresh cadence by @l5yth in https://github.com/l5yth/potato-mesh/pull/401\r\n* Document environment configuration variables by @l5yth in https://github.com/l5yth/potato-mesh/pull/400\r\n* Ensure Docker images publish versioned tags by @l5yth in https://github.com/l5yth/potato-mesh/pull/403\r\n* Normalize numeric client roles using Meshtastic CLI enums by @l5yth in https://github.com/l5yth/potato-mesh/pull/402\r\n* Add tabbed chat panel with channel grouping by @l5yth in https://github.com/l5yth/potato-mesh/pull/404\r\n* Handle missing instance domain outside production by @l5yth in https://github.com/l5yth/potato-mesh/pull/405\r\n* Add chat log entries for telemetry, position, and neighbor events by @l5yth in https://github.com/l5yth/potato-mesh/pull/408\r\n* display encrypted messages in frontend log window by @l5yth in https://github.com/l5yth/potato-mesh/pull/409\r\n* agents: add instructions by @l5yth in https://github.com/l5yth/potato-mesh/pull/410\r\n* ingestor: ignore direct messages on default channel by @l5yth in https://github.com/l5yth/potato-mesh/pull/414\r\n* implement support for replies and reactions app by @l5yth in https://github.com/l5yth/potato-mesh/pull/411\r\n* gem: add erb as dependency removed from std by @l5yth in https://github.com/l5yth/potato-mesh/pull/416\r\n* allow filtering chat and logs by node name by @l5yth in https://github.com/l5yth/potato-mesh/pull/417\r\n* Parallelize federation tasks with worker pool by @l5yth in https://github.com/l5yth/potato-mesh/pull/419\r\n* Add preset mode to logs by @l5yth in https://github.com/l5yth/potato-mesh/pull/420\r\n* handle edge case when primary channel has a name by @l5yth in https://github.com/l5yth/potato-mesh/pull/421\r\n* handle naming when primary channel has a name by @l5yth in https://github.com/l5yth/potato-mesh/pull/422\r\n\r\n## New Contributors\r\n* @KenADev made their first contribution in https://github.com/l5yth/potato-mesh/pull/396\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.3...v0.5.4",
      "notesHtml": "<p>This is a feature release of the app potato-mesh v0.5.4 which improves performance and stability but also adds new features to the chat panel.</p>\n<p>With this release, <strong>radio logs</strong> are seperated from the actual chat messages. Messages on different channels are now displayed in <strong>different tabs</strong>. Direct messages will be ignored but anything else that can be decrypted, will be displayed. Encrypted messages just show up in the log with a note. The chat and the logs can now be <strong>filtered by node names</strong> - just use the filter input box on the top of the map. Furthermore, this release also implements <strong>reactions and responses</strong>.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>Chore: bump version to 0.5.4 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/388\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/388</a></li>\n<li>fix: Mesh-Ingestor: Fix error for non-existing datetime.UTC reference by @KenADev in <a href=\"https://github.com/l5yth/potato-mesh/pull/396\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/396</a></li>\n<li>feat: Mesh-Ingestor: Ability to provide already-existing interface instance by @KenADev in <a href=\"https://github.com/l5yth/potato-mesh/pull/395\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/395</a></li>\n<li>Config: Read PROM_REPORT_IDS from environment by @nicjansma in <a href=\"https://github.com/l5yth/potato-mesh/pull/398\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/398</a></li>\n<li>Add Prometheus monitoring documentation by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/399\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/399</a></li>\n<li>Document federation refresh cadence by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/401\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/401</a></li>\n<li>Document environment configuration variables by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/400\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/400</a></li>\n<li>Ensure Docker images publish versioned tags by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/403\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/403</a></li>\n<li>Normalize numeric client roles using Meshtastic CLI enums by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/402\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/402</a></li>\n<li>Add tabbed chat panel with channel grouping by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/404\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/404</a></li>\n<li>Handle missing instance domain outside production by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/405\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/405</a></li>\n<li>Add chat log entries for telemetry, position, and neighbor events by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/408\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/408</a></li>\n<li>display encrypted messages in frontend log window by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/409\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/409</a></li>\n<li>agents: add instructions by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/410\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/410</a></li>\n<li>ingestor: ignore direct messages on default channel by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/414\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/414</a></li>\n<li>implement support for replies and reactions app by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/411\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/411</a></li>\n<li>gem: add erb as dependency removed from std by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/416\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/416</a></li>\n<li>allow filtering chat and logs by node name by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/417\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/417</a></li>\n<li>Parallelize federation tasks with worker pool by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/419\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/419</a></li>\n<li>Add preset mode to logs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/420\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/420</a></li>\n<li>handle edge case when primary channel has a name by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/421\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/421</a></li>\n<li>handle naming when primary channel has a name by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/422\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/422</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@KenADev made their first contribution in <a href=\"https://github.com/l5yth/potato-mesh/pull/396\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/396</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.3...v0.5.4\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.3...v0.5.4</a></p>\n"
    },
    {
      "version": "v0.5.3",
      "name": "app potato-mesh v0.5.3",
      "datetime": "2025-10-19T10:30:55Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.3",
      "prerelease": false,
      "notes": "This is a bug-fix release of the app potato-mesh v0.5.3. It mainly improves the working federation between instances. Also, _federation is now visible_ in frontend. If you do not wish to be part of the federation, disable it with `FEDERATION=0` or `PRIVATE=1` env variables.\r\n\r\n## What's Changed\r\n* Chore: bump version to 0.5.3 by @l5yth in https://github.com/l5yth/potato-mesh/pull/372\r\n* Expose FEDERATION environment option across tooling by @l5yth in https://github.com/l5yth/potato-mesh/pull/375\r\n* Restrict /api/instances results to recent records by @l5yth in https://github.com/l5yth/potato-mesh/pull/374\r\n* Fix frontend coverage export for Codecov by @l5yth in https://github.com/l5yth/potato-mesh/pull/376\r\n* Expose PRIVATE environment configuration across tooling by @l5yth in https://github.com/l5yth/potato-mesh/pull/377\r\n* Disable federation features when FEDERATION=0 by @l5yth in https://github.com/l5yth/potato-mesh/pull/379\r\n* Ensure private mode disables chat messaging by @l5yth in https://github.com/l5yth/potato-mesh/pull/378\r\n* Ensure private mode disables federation by @l5yth in https://github.com/l5yth/potato-mesh/pull/380\r\n* Harden federation announcements by @l5yth in https://github.com/l5yth/potato-mesh/pull/381\r\n* Add instance selector dropdown for federation deployments by @l5yth in https://github.com/l5yth/potato-mesh/pull/382\r\n* Respect PORT environment override by @l5yth in https://github.com/l5yth/potato-mesh/pull/384\r\n* Add full support to telemetry schema and API by @l5yth in https://github.com/l5yth/potato-mesh/pull/385\r\n* Prune blank values from API responses by @l5yth in https://github.com/l5yth/potato-mesh/pull/386\r\n* Add telemetry formatting utilities and extend node overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/387\r\n\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.2...v0.5.3",
      "notesHtml": "<p>This is a bug-fix release of the app potato-mesh v0.5.3. It mainly improves the working federation between instances. Also, <em>federation is now visible</em> in frontend. If you do not wish to be part of the federation, disable it with <code>FEDERATION=0</code> or <code>PRIVATE=1</code> env variables.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>Chore: bump version to 0.5.3 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/372\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/372</a></li>\n<li>Expose FEDERATION environment option across tooling by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/375\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/375</a></li>\n<li>Restrict /api/instances results to recent records by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/374\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/374</a></li>\n<li>Fix frontend coverage export for Codecov by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/376\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/376</a></li>\n<li>Expose PRIVATE environment configuration across tooling by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/377\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/377</a></li>\n<li>Disable federation features when FEDERATION=0 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/379\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/379</a></li>\n<li>Ensure private mode disables chat messaging by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/378\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/378</a></li>\n<li>Ensure private mode disables federation by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/380\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/380</a></li>\n<li>Harden federation announcements by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/381\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/381</a></li>\n<li>Add instance selector dropdown for federation deployments by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/382\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/382</a></li>\n<li>Respect PORT environment override by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/384\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/384</a></li>\n<li>Add full support to telemetry schema and API by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/385\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/385</a></li>\n<li>Prune blank values from API responses by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/386\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/386</a></li>\n<li>Add telemetry formatting utilities and extend node overlay by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/387\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/387</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.2...v0.5.3\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.2...v0.5.3</a></p>\n"
    },
    {
      "version": "v0.5.2",
      "name": " app potato-mesh v0.5.2",
      "datetime": "2025-10-17T19:40:45Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.2",
      "prerelease": false,
      "notes": "This is a bug-fix release of the app potato-mesh v0.5.2. It resolves mainly issues with docker connections and finally restores a working federation between instances. :lady_beetle: \r\n\r\n## What's Changed\r\n* Gracefully retry federation announcements over HTTP by @l5yth in https://github.com/l5yth/potato-mesh/pull/355\r\n* chore: bump version to 0.5.2 by @l5yth in https://github.com/l5yth/potato-mesh/pull/356\r\n* Ensure INSTANCE_DOMAIN propagates to containers by @l5yth in https://github.com/l5yth/potato-mesh/pull/358\r\n* Harden instance domain validation by @l5yth in https://github.com/l5yth/potato-mesh/pull/359\r\n* Fix ingestor reconnection detection by @l5yth in https://github.com/l5yth/potato-mesh/pull/361\r\n* Decouple message API node hydration by @l5yth in https://github.com/l5yth/potato-mesh/pull/360\r\n* Prefer reported primary channel names by @l5yth in https://github.com/l5yth/potato-mesh/pull/363\r\n* Add federation ingestion limits and tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/364\r\n* Guard federation DNS resolution against restricted networks by @l5yth in https://github.com/l5yth/potato-mesh/pull/362\r\n* Ensure well-known document stays in sync on startup by @l5yth in https://github.com/l5yth/potato-mesh/pull/365\r\n* Delay initial federation announcements by @l5yth in https://github.com/l5yth/potato-mesh/pull/366\r\n* Fixes POST request 403 errors on instances behind Cloudflare proxy by @varna9000 in https://github.com/l5yth/potato-mesh/pull/368\r\n* Align theme and info controls by @l5yth in https://github.com/l5yth/potato-mesh/pull/371\r\n\r\n## New Contributors\r\n* @varna9000 made their first contribution in https://github.com/l5yth/potato-mesh/pull/368\r\n\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.1...v0.5.2",
      "notesHtml": "<p>This is a bug-fix release of the app potato-mesh v0.5.2. It resolves mainly issues with docker connections and finally restores a working federation between instances. :lady_beetle: </p>\n<h2>What's Changed</h2>\n<ul>\n<li>Gracefully retry federation announcements over HTTP by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/355\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/355</a></li>\n<li>chore: bump version to 0.5.2 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/356\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/356</a></li>\n<li>Ensure INSTANCE_DOMAIN propagates to containers by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/358\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/358</a></li>\n<li>Harden instance domain validation by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/359\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/359</a></li>\n<li>Fix ingestor reconnection detection by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/361\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/361</a></li>\n<li>Decouple message API node hydration by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/360\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/360</a></li>\n<li>Prefer reported primary channel names by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/363\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/363</a></li>\n<li>Add federation ingestion limits and tests by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/364\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/364</a></li>\n<li>Guard federation DNS resolution against restricted networks by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/362\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/362</a></li>\n<li>Ensure well-known document stays in sync on startup by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/365\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/365</a></li>\n<li>Delay initial federation announcements by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/366\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/366</a></li>\n<li>Fixes POST request 403 errors on instances behind Cloudflare proxy by @varna9000 in <a href=\"https://github.com/l5yth/potato-mesh/pull/368\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/368</a></li>\n<li>Align theme and info controls by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/371\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/371</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@varna9000 made their first contribution in <a href=\"https://github.com/l5yth/potato-mesh/pull/368\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/368</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.1...v0.5.2\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.1...v0.5.2</a></p>\n"
    },
    {
      "version": "v0.5.1",
      "name": "app potato-mesh v0.5.1",
      "datetime": "2025-10-15T20:22:44Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.1",
      "prerelease": false,
      "notes": "This is a bug-fix release of the app potato-mesh v0.5.1. It resolves mainly issues with docker builds, federation, and the user interface. :lady_beetle: \r\n\r\nNotably, this release also ships channel names and operating frequencies. :tada:\r\n\r\n## What's Changed\r\n* Fix ingestor docker import path by @l5yth in https://github.com/l5yth/potato-mesh/pull/336\r\n* docs: update changelog for 0.5.0 by @l5yth in https://github.com/l5yth/potato-mesh/pull/337\r\n* Bump fallback version string to v0.5.1 by @l5yth in https://github.com/l5yth/potato-mesh/pull/338\r\n* Display message frequency and channel in chat log by @l5yth in https://github.com/l5yth/potato-mesh/pull/339\r\n* Add modem preset display to node overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/340\r\n* Ensure Docker deployments persist keyfile and well-known assets by @l5yth in https://github.com/l5yth/potato-mesh/pull/345\r\n* Fix ingestor device mounting for non-serial connections by @l5yth in https://github.com/l5yth/potato-mesh/pull/346\r\n* Handle malformed instance records gracefully by @l5yth in https://github.com/l5yth/potato-mesh/pull/348\r\n* Harden federation domain validation and tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/347\r\n* Improve federation instance error diagnostics by @l5yth in https://github.com/l5yth/potato-mesh/pull/350\r\n* Close unrelated short info overlays when opening short info by @l5yth in https://github.com/l5yth/potato-mesh/pull/351\r\n* Remove federation timeout environment overrides by @l5yth in https://github.com/l5yth/potato-mesh/pull/352\r\n* Recursively ingest federated instances by @l5yth in https://github.com/l5yth/potato-mesh/pull/353\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.5.0...v0.5.1",
      "notesHtml": "<p>This is a bug-fix release of the app potato-mesh v0.5.1. It resolves mainly issues with docker builds, federation, and the user interface. :lady_beetle: </p>\n<p>Notably, this release also ships channel names and operating frequencies. :tada:</p>\n<h2>What's Changed</h2>\n<ul>\n<li>Fix ingestor docker import path by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/336\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/336</a></li>\n<li>docs: update changelog for 0.5.0 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/337\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/337</a></li>\n<li>Bump fallback version string to v0.5.1 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/338\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/338</a></li>\n<li>Display message frequency and channel in chat log by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/339\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/339</a></li>\n<li>Add modem preset display to node overlay by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/340\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/340</a></li>\n<li>Ensure Docker deployments persist keyfile and well-known assets by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/345\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/345</a></li>\n<li>Fix ingestor device mounting for non-serial connections by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/346\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/346</a></li>\n<li>Handle malformed instance records gracefully by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/348\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/348</a></li>\n<li>Harden federation domain validation and tests by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/347\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/347</a></li>\n<li>Improve federation instance error diagnostics by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/350\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/350</a></li>\n<li>Close unrelated short info overlays when opening short info by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/351\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/351</a></li>\n<li>Remove federation timeout environment overrides by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/352\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/352</a></li>\n<li>Recursively ingest federated instances by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/353\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/353</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.5.0...v0.5.1\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.5.0...v0.5.1</a></p>\n"
    },
    {
      "version": "v0.5.0",
      "name": "app potato-mesh v0.5.0",
      "datetime": "2025-10-14T14:16:13Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.5.0",
      "prerelease": false,
      "notes": "This a feature release of the app potato-mesh v0.5.0. It contains a major refactor, changes all defaults (please read carefully below), enables federation between instances and now knows about lora preset, region frequency, and channel names, plus many bug fixes.\r\n\r\n* in production, make sure to set an `INSTANCE_DOMAIN=example.com`, otherwise we attempt reverse DNS\r\n* **breaking**: streamlined environmental variables for simplicity:\r\n  - ~~`MESH_SERIAL`~~ is now `CONNECTION`\r\n  - ~~`DEFAULT_CHANNEL`~~ is now `CHANNEL`\r\n  - ~~`DEFAULT_FREQUENCY`~~ is now `FREQUENCY`\r\n  - ~~`MAP_CENTER_LAT` and `MAP_CENTER_LON`~~ are now merged to `MAP_CENTER=\"38.761944,-27.090833\"`\r\n  - ~~`MAX_NODE_DISTANCE_KM`~~ is now `MAX_DISTANCE`\r\n  - ~~`MATRIX_ROOM`~~ is now `CONTACT_LINK` and does not have to be Matrix\r\n* **breaking**: moved database and config to respective XDG directories (the app has migration built in, but make sure to update your backup scripts)\r\n* turn on `ENERGY_SAVING=1` if you want to query remote/solar nodes but don't want to cycle their power too much\r\n* add a `/metrics` endpoint for prometheus (thanks @nicjansma)\r\n* deployed production instances of potato-mesh now talk to each other (turn off with `FEDERATION=0`)\r\n\r\n\r\n## What's Changed\r\n* Update changelog by @l5yth in https://github.com/l5yth/potato-mesh/pull/238\r\n* Add inline documentation to config helpers and frontend scripts by @l5yth in https://github.com/l5yth/potato-mesh/pull/240\r\n* Add comprehensive coverage tests for mesh ingestor by @l5yth in https://github.com/l5yth/potato-mesh/pull/241\r\n* docs: add ingestor inline docstrings by @l5yth in https://github.com/l5yth/potato-mesh/pull/244\r\n* Add tests for helper utilities and asset routes by @l5yth in https://github.com/l5yth/potato-mesh/pull/243\r\n* Refactor front-end assets into external modules by @l5yth in https://github.com/l5yth/potato-mesh/pull/245\r\n* Fix mesh ingestor telemetry and neighbor handling by @l5yth in https://github.com/l5yth/potato-mesh/pull/249\r\n* Add JSDoc documentation across client scripts by @l5yth in https://github.com/l5yth/potato-mesh/pull/253\r\n* Document Ruby helper methods with RDoc comments by @l5yth in https://github.com/l5yth/potato-mesh/pull/254\r\n* Handle missing node IDs in Meshtastic nodeinfo packets by @l5yth in https://github.com/l5yth/potato-mesh/pull/251\r\n* Document mesh ingestor modules with PDoc-style docstrings by @l5yth in https://github.com/l5yth/potato-mesh/pull/255\r\n* Force dark theme default based on sanitized cookie by @l5yth in https://github.com/l5yth/potato-mesh/pull/252\r\n* docs: add matrix to readme by @l5yth in https://github.com/l5yth/potato-mesh/pull/259\r\n* chore: restore apache headers by @l5yth in https://github.com/l5yth/potato-mesh/pull/260\r\n* Add energy saving cycle to ingestor daemon by @l5yth in https://github.com/l5yth/potato-mesh/pull/256\r\n* v0.4.0 version string in web UI by @nicjansma in https://github.com/l5yth/potato-mesh/pull/265\r\n* Relocate JS coverage export script into web directory by @l5yth in https://github.com/l5yth/potato-mesh/pull/266\r\n* Add fullscreen toggle to map view by @l5yth in https://github.com/l5yth/potato-mesh/pull/263\r\n* Added prometheus /metrics endpoint by @nicjansma in https://github.com/l5yth/potato-mesh/pull/262\r\n* Dockerfile fixes by @nicjansma in https://github.com/l5yth/potato-mesh/pull/268\r\n* Add hourly reconnect handling for inactive mesh interface by @l5yth in https://github.com/l5yth/potato-mesh/pull/267\r\n* Prometheus metrics updates on startup and for position/telemetry by @nicjansma in https://github.com/l5yth/potato-mesh/pull/270\r\n* Add targeted API endpoints and expose version metadata by @l5yth in https://github.com/l5yth/potato-mesh/pull/271\r\n* Document production deployment configuration by @l5yth in https://github.com/l5yth/potato-mesh/pull/273\r\n* Add configurable instance domain with reverse DNS fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/272\r\n* Add persistent federation metadata endpoint by \n…",
      "notesHtml": "<p>This a feature release of the app potato-mesh v0.5.0. It contains a major refactor, changes all defaults (please read carefully below), enables federation between instances and now knows about lora preset, region frequency, and channel names, plus many bug fixes.</p>\n<ul>\n<li>in production, make sure to set an <code>INSTANCE_DOMAIN=example.com</code>, otherwise we attempt reverse DNS</li>\n<li><strong>breaking</strong>: streamlined environmental variables for simplicity:<ul>\n<li><del><code>MESH_SERIAL</code></del> is now <code>CONNECTION</code></li>\n<li><del><code>DEFAULT_CHANNEL</code></del> is now <code>CHANNEL</code></li>\n<li><del><code>DEFAULT_FREQUENCY</code></del> is now <code>FREQUENCY</code></li>\n<li><del><code>MAP_CENTER_LAT</code> and <code>MAP_CENTER_LON</code></del> are now merged to <code>MAP_CENTER=\"38.761944,-27.090833\"</code></li>\n<li><del><code>MAX_NODE_DISTANCE_KM</code></del> is now <code>MAX_DISTANCE</code></li>\n<li><del><code>MATRIX_ROOM</code></del> is now <code>CONTACT_LINK</code> and does not have to be Matrix</li>\n</ul>\n</li>\n<li><strong>breaking</strong>: moved database and config to respective XDG directories (the app has migration built in, but make sure to update your backup scripts)</li>\n<li>turn on <code>ENERGY_SAVING=1</code> if you want to query remote/solar nodes but don't want to cycle their power too much</li>\n<li>add a <code>/metrics</code> endpoint for prometheus (thanks @nicjansma)</li>\n<li>deployed production instances of potato-mesh now talk to each other (turn off with <code>FEDERATION=0</code>)</li>\n</ul>\n<h2>What's Changed</h2>\n<ul>\n<li>Update changelog by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/238\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/238</a></li>\n<li>Add inline documentation to config helpers and frontend scripts by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/240\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/240</a></li>\n<li>Add comprehensive coverage tests for mesh ingestor by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/241\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/241</a></li>\n<li>docs: add ingestor inline docstrings by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/244\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/244</a></li>\n<li>Add tests for helper utilities and asset routes by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/243\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/243</a></li>\n<li>Refactor front-end assets into external modules by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/245\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/245</a></li>\n<li>Fix mesh ingestor telemetry and neighbor handling by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/249\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/249</a></li>\n<li>Add JSDoc documentation across client scripts by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/253\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/253</a></li>\n<li>Document Ruby helper methods with RDoc comments by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/254\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/254</a></li>\n<li>Handle missing node IDs in Meshtastic nodeinfo packets by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/251\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/251</a></li>\n<li>Document mesh ingestor modules with PDoc-style docstrings by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/255\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/255</a></li>\n<li>Force dark theme default based on sanitized cookie by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/252\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/252</a></li>\n<li>docs: add matrix to readme by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/259\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/259</a></li>\n<li>chore: restore apache headers by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/260\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/260</a></li>\n<li>Add energy saving cycle to ingestor daemon by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/256\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/256</a></li>\n<li>v0.4.0 version string in web UI by @nicjansma in <a href=\"https://github.com/l5yth/potato-mesh/pull/265\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/265</a></li>\n<li>Relocate JS coverage export script into web directory by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/266\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/266</a></li>\n<li>Add fullscreen toggle to map view by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/263\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/263</a></li>\n<li>Added prometheus /metrics endpoint by @nicjansma in <a href=\"https://github.com/l5yth/potato-mesh/pull/262\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/262</a></li>\n<li>Dockerfile fixes by @nicjansma in <a href=\"https://github.com/l5yth/potato-mesh/pull/268\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/268</a></li>\n<li>Add hourly reconnect handling for inactive mesh interface by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/267\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/267</a></li>\n<li>Prometheus metrics updates on startup and for position/telemetry by @nicjansma in <a href=\"https://github.com/l5yth/potato-mesh/pull/270\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/270</a></li>\n<li>Add targeted API endpoints and expose version metadata by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/271\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/271</a></li>\n<li>Document production deployment configuration by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/273\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/273</a></li>\n<li>Add configurable instance domain with reverse DNS fallback by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/272\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/272</a></li>\n<li>Add persistent federation metadata endpoint by \n…</li>\n</ul>\n"
    },
    {
      "version": "v0.4.0",
      "name": "app potato-mesh v0.4.0",
      "datetime": "2025-10-06T06:15:47Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.4.0",
      "prerelease": false,
      "notes": "This a feature release of the app potato-mesh v0.4.0. It contains new features, improved design, some tweaks the frontend, and an improved ingestor that also works via Bluetooth.\r\n\r\n![screenshot of the fourth version](https://github.com/l5yth/potato-mesh/blob/41976a3b43ecba28e798cf944caccd3f55d7ff48/scrot-0.4.png)\r\n\r\n* Bluetooth (BLE) is supported now by the ingestor script, just set `MESH_SERIAL=\"ED:4D:9E:95:CF:60\"` to the devices hardware address\r\n* Added support for telemetry, environmental data, and neighbors and integrated them into the frontend\r\n* Add a private mode that hides chat and messages, just set app to `PRIVATE=1`\r\n* Added armv7 Docker images for older Raspberry Pi\r\n\r\n## What's Changed\r\n* fix api in readme by @l5yth in https://github.com/l5yth/potato-mesh/pull/197\r\n* Update node last seen when ingesting encrypted messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/198\r\n* Update Docker documentation by @l5yth in https://github.com/l5yth/potato-mesh/pull/200\r\n* Add linux/armv7 container builds and configuration options by @l5yth in https://github.com/l5yth/potato-mesh/pull/201\r\n* Handle offline-ready map fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/202\r\n* Add private mode to hide chat and message APIs by @l5yth in https://github.com/l5yth/potato-mesh/pull/204\r\n* Add telemetry API and ingestion support by @l5yth in https://github.com/l5yth/potato-mesh/pull/205\r\n* Stop repeating ingestor node info snapshot and timestamp debug logs by @l5yth in https://github.com/l5yth/potato-mesh/pull/210\r\n* Normalize stored message debug output by @l5yth in https://github.com/l5yth/potato-mesh/pull/211\r\n* Improve debug logging for node and telemetry data by @l5yth in https://github.com/l5yth/potato-mesh/pull/213\r\n* Update node last seen when events are received by @l5yth in https://github.com/l5yth/potato-mesh/pull/212\r\n* Add debug logs for unknown node creation and last-heard updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/214\r\n* Add neighbor info ingestion and API endpoints by @l5yth in https://github.com/l5yth/potato-mesh/pull/218\r\n* Add BLE and fallback mesh interface handling by @l5yth in https://github.com/l5yth/potato-mesh/pull/219\r\n* Adjust mesh priorities and receive topics by @l5yth in https://github.com/l5yth/potato-mesh/pull/220\r\n* Handle Bluetooth shutdown hangs gracefully by @l5yth in https://github.com/l5yth/potato-mesh/pull/221\r\n* Add clear control to filter input by @l5yth in https://github.com/l5yth/potato-mesh/pull/225\r\n* Visualize neighbor connections on map canvas by @l5yth in https://github.com/l5yth/potato-mesh/pull/224\r\n* Reduce neighbor line opacity by @l5yth in https://github.com/l5yth/potato-mesh/pull/226\r\n* Add telemetry environment metrics to node UI by @l5yth in https://github.com/l5yth/potato-mesh/pull/227\r\n* Show neighbor short names in info overlays by @l5yth in https://github.com/l5yth/potato-mesh/pull/228\r\n* Improve live node positions and expose precision metadata by @l5yth in https://github.com/l5yth/potato-mesh/pull/231\r\n* Remove last position timestamp from map info overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/233\r\n* Hide humidity and pressure columns on mobile by @l5yth in https://github.com/l5yth/potato-mesh/pull/232\r\n* Add overlay for clickable neighbor links on map by @l5yth in https://github.com/l5yth/potato-mesh/pull/234\r\n* Hide Air Util Tx column on mobile by @l5yth in https://github.com/l5yth/potato-mesh/pull/235\r\n* Add legend toggle for neighbor lines by @l5yth in https://github.com/l5yth/potato-mesh/pull/236\r\n* Reformat neighbor overlay layout by @l5yth in https://github.com/l5yth/potato-mesh/pull/237\r\n\r\n\r\n**Full Changelog**: https://github.com/l5yth/potato-mesh/compare/v0.3.0...v0.4.0",
      "notesHtml": "<p>This a feature release of the app potato-mesh v0.4.0. It contains new features, improved design, some tweaks the frontend, and an improved ingestor that also works via Bluetooth.</p>\n<p><img src=\"https://github.com/l5yth/potato-mesh/blob/41976a3b43ecba28e798cf944caccd3f55d7ff48/scrot-0.4.png\" alt=\"screenshot of the fourth version\" /></p>\n<ul>\n<li>Bluetooth (BLE) is supported now by the ingestor script, just set <code>MESH_SERIAL=\"ED:4D:9E:95:CF:60\"</code> to the devices hardware address</li>\n<li>Added support for telemetry, environmental data, and neighbors and integrated them into the frontend</li>\n<li>Add a private mode that hides chat and messages, just set app to <code>PRIVATE=1</code></li>\n<li>Added armv7 Docker images for older Raspberry Pi</li>\n</ul>\n<h2>What's Changed</h2>\n<ul>\n<li>fix api in readme by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/197\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/197</a></li>\n<li>Update node last seen when ingesting encrypted messages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/198\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/198</a></li>\n<li>Update Docker documentation by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/200\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/200</a></li>\n<li>Add linux/armv7 container builds and configuration options by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/201\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/201</a></li>\n<li>Handle offline-ready map fallback by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/202\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/202</a></li>\n<li>Add private mode to hide chat and message APIs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/204\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/204</a></li>\n<li>Add telemetry API and ingestion support by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/205\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/205</a></li>\n<li>Stop repeating ingestor node info snapshot and timestamp debug logs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/210\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/210</a></li>\n<li>Normalize stored message debug output by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/211\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/211</a></li>\n<li>Improve debug logging for node and telemetry data by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/213\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/213</a></li>\n<li>Update node last seen when events are received by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/212\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/212</a></li>\n<li>Add debug logs for unknown node creation and last-heard updates by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/214\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/214</a></li>\n<li>Add neighbor info ingestion and API endpoints by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/218\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/218</a></li>\n<li>Add BLE and fallback mesh interface handling by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/219\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/219</a></li>\n<li>Adjust mesh priorities and receive topics by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/220\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/220</a></li>\n<li>Handle Bluetooth shutdown hangs gracefully by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/221\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/221</a></li>\n<li>Add clear control to filter input by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/225\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/225</a></li>\n<li>Visualize neighbor connections on map canvas by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/224\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/224</a></li>\n<li>Reduce neighbor line opacity by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/226\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/226</a></li>\n<li>Add telemetry environment metrics to node UI by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/227\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/227</a></li>\n<li>Show neighbor short names in info overlays by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/228\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/228</a></li>\n<li>Improve live node positions and expose precision metadata by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/231\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/231</a></li>\n<li>Remove last position timestamp from map info overlay by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/233\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/233</a></li>\n<li>Hide humidity and pressure columns on mobile by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/232\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/232</a></li>\n<li>Add overlay for clickable neighbor links on map by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/234\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/234</a></li>\n<li>Hide Air Util Tx column on mobile by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/235\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/235</a></li>\n<li>Add legend toggle for neighbor lines by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/236\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/236</a></li>\n<li>Reformat neighbor overlay layout by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/237\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/237</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/l5yth/potato-mesh/compare/v0.3.0...v0.4.0\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/compare/v0.3.0...v0.4.0</a></p>\n"
    },
    {
      "version": "v0.3.0",
      "name": " app potato-mesh v0.3.0",
      "datetime": "2025-09-27T17:07:01Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.3.0",
      "prerelease": false,
      "notes": "This a feature release of the app potato-mesh v0.3.0. It contains new features, improved design, some tweaks the frontend, and an improved ingestor that also works via TCP.\r\n\r\n![screenshot of the third version](./scrot-0.3.png)\r\n\r\n* Docker releases available on GHPR\r\n* Ingestor script now also works via TCP/IP\r\n* Map can now be filtered by role in legend\r\n* Store not only nodes and messages but also position data\r\n* Also store encrypted messages in the database\r\n* Unannounced nodes are now treated as `CLIENT_HIDDEN`\r\n* Addes support for new role `CLIENT_BASE`\r\n\r\n## What's Changed\r\n* update changelog by @l5yth in https://github.com/l5yth/potato-mesh/pull/119\r\n* Add responsive controls for map legend by @l5yth in https://github.com/l5yth/potato-mesh/pull/129\r\n* Add footer version display by @l5yth in https://github.com/l5yth/potato-mesh/pull/128\r\n* Switch map tiles to OSM HOT and add theme filters by @l5yth in https://github.com/l5yth/potato-mesh/pull/130\r\n* Fix dark mode tile styling on new map tiles by @l5yth in https://github.com/l5yth/potato-mesh/pull/132\r\n* chore: bump version to 0.2.1 by @l5yth in https://github.com/l5yth/potato-mesh/pull/134\r\n* feat: Add comprehensive Docker support by @trose in https://github.com/l5yth/potato-mesh/pull/122\r\n* fix: use supported ruby image by @l5yth in https://github.com/l5yth/potato-mesh/pull/135\r\n* fix: support windows ingestor build by @l5yth in https://github.com/l5yth/potato-mesh/pull/136\r\n* fix: retain alpine runtime libs after removing build deps by @l5yth in https://github.com/l5yth/potato-mesh/pull/138\r\n* Rebuild chat log on each refresh by @l5yth in https://github.com/l5yth/potato-mesh/pull/139\r\n* Add clickable role filters to the map legend by @l5yth in https://github.com/l5yth/potato-mesh/pull/140\r\n* Fix Docker workflow matrix for supported platforms by @l5yth in https://github.com/l5yth/potato-mesh/pull/142\r\n* Support mock serial interface in CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/143\r\n* Ensure sqlite3 builds from source on Alpine by @l5yth in https://github.com/l5yth/potato-mesh/pull/145\r\n* Fix web app startup binding by @l5yth in https://github.com/l5yth/potato-mesh/pull/147\r\n* Fix sqlite3 native extension on Alpine by @l5yth in https://github.com/l5yth/potato-mesh/pull/146\r\n* Define docker compose network by @l5yth in https://github.com/l5yth/potato-mesh/pull/148\r\n* Require time library before formatting ISO timestamps by @l5yth in https://github.com/l5yth/potato-mesh/pull/149\r\n* Limit chat log to recent entries by @l5yth in https://github.com/l5yth/potato-mesh/pull/151\r\n* tests: create helper script to dump all mesh data from serial by @l5yth in https://github.com/l5yth/potato-mesh/pull/152\r\n* Derive SEO metadata from existing config values by @l5yth in https://github.com/l5yth/potato-mesh/pull/153\r\n* Add support for NODEINFO_APP packets by @l5yth in https://github.com/l5yth/potato-mesh/pull/159\r\n* Add POSITION_APP ingestion and API support by @l5yth in https://github.com/l5yth/potato-mesh/pull/160\r\n* Remove raw payload storage from database schema by @l5yth in https://github.com/l5yth/potato-mesh/pull/166\r\n* Handle proto values in nodeinfo payloads by @l5yth in https://github.com/l5yth/potato-mesh/pull/167\r\n* Move lint checks after tests in CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/168\r\n* Ensure routers render above other node types by @l5yth in https://github.com/l5yth/potato-mesh/pull/169\r\n* Add fallback display names for unnamed nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/171\r\n* Handle encrypted messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/173\r\n* Handle plain IP addresses in mesh TCP detection by @l5yth in https://github.com/l5yth/potato-mesh/pull/154\r\n* Update role colors and ordering for firmware 2.7.10 by @l5yth in https://github.com/l5yth/potato-mesh/pull/180\r\n* Add placeholder nodes for unknown senders by @l5yth in https://github.com/l5yth/potato-mesh/pull/181\r\n* Update role color theme to lat\n…",
      "notesHtml": "<p>This a feature release of the app potato-mesh v0.3.0. It contains new features, improved design, some tweaks the frontend, and an improved ingestor that also works via TCP.</p>\n<p><img src=\"https://github.com/l5yth/potato-mesh/blob/HEAD/scrot-0.3.png\" alt=\"screenshot of the third version\" /></p>\n<ul>\n<li>Docker releases available on GHPR</li>\n<li>Ingestor script now also works via TCP/IP</li>\n<li>Map can now be filtered by role in legend</li>\n<li>Store not only nodes and messages but also position data</li>\n<li>Also store encrypted messages in the database</li>\n<li>Unannounced nodes are now treated as <code>CLIENT_HIDDEN</code></li>\n<li>Addes support for new role <code>CLIENT_BASE</code></li>\n</ul>\n<h2>What's Changed</h2>\n<ul>\n<li>update changelog by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/119\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/119</a></li>\n<li>Add responsive controls for map legend by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/129\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/129</a></li>\n<li>Add footer version display by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/128\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/128</a></li>\n<li>Switch map tiles to OSM HOT and add theme filters by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/130\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/130</a></li>\n<li>Fix dark mode tile styling on new map tiles by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/132\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/132</a></li>\n<li>chore: bump version to 0.2.1 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/134\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/134</a></li>\n<li>feat: Add comprehensive Docker support by @trose in <a href=\"https://github.com/l5yth/potato-mesh/pull/122\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/122</a></li>\n<li>fix: use supported ruby image by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/135\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/135</a></li>\n<li>fix: support windows ingestor build by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/136\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/136</a></li>\n<li>fix: retain alpine runtime libs after removing build deps by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/138\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/138</a></li>\n<li>Rebuild chat log on each refresh by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/139\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/139</a></li>\n<li>Add clickable role filters to the map legend by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/140\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/140</a></li>\n<li>Fix Docker workflow matrix for supported platforms by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/142\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/142</a></li>\n<li>Support mock serial interface in CI by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/143\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/143</a></li>\n<li>Ensure sqlite3 builds from source on Alpine by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/145\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/145</a></li>\n<li>Fix web app startup binding by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/147\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/147</a></li>\n<li>Fix sqlite3 native extension on Alpine by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/146\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/146</a></li>\n<li>Define docker compose network by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/148\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/148</a></li>\n<li>Require time library before formatting ISO timestamps by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/149\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/149</a></li>\n<li>Limit chat log to recent entries by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/151\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/151</a></li>\n<li>tests: create helper script to dump all mesh data from serial by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/152\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/152</a></li>\n<li>Derive SEO metadata from existing config values by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/153\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/153</a></li>\n<li>Add support for NODEINFO_APP packets by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/159\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/159</a></li>\n<li>Add POSITION_APP ingestion and API support by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/160\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/160</a></li>\n<li>Remove raw payload storage from database schema by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/166\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/166</a></li>\n<li>Handle proto values in nodeinfo payloads by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/167\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/167</a></li>\n<li>Move lint checks after tests in CI by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/168\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/168</a></li>\n<li>Ensure routers render above other node types by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/169\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/169</a></li>\n<li>Add fallback display names for unnamed nodes by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/171\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/171</a></li>\n<li>Handle encrypted messages by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/173\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/173</a></li>\n<li>Handle plain IP addresses in mesh TCP detection by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/154\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/154</a></li>\n<li>Update role colors and ordering for firmware 2.7.10 by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/180\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/180</a></li>\n<li>Add placeholder nodes for unknown senders by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/181\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/181</a></li>\n<li>Update role color theme to lat\n…</li>\n</ul>\n"
    },
    {
      "version": "v0.2.0",
      "name": "app potato-mesh v0.2.0",
      "datetime": "2025-09-17T08:26:44Z",
      "url": "https://github.com/l5yth/potato-mesh/releases/tag/v0.2.0",
      "prerelease": false,
      "notes": "This a feature release of the app potato-mesh v0.2.0. It contains new features, improved design, some tweaks for small screens, and security hardening.\r\n\r\n![screenshot of the second version](./scrot-0.2.png)\r\n\r\n* Web app with chat window and map view showing nodes and messages.\r\n* API to POST (authenticated) and to GET nodes and messages.\r\n* Supplemental Python ingestor to feed the POST APIs of the Web app with data remotely.\r\n* Shows new node notifications (first seen) in chat.\r\n* Allows searching and filtering for nodes in map and table view.\r\n\r\n## What's Changed\r\n* feat: add dark mode toggle by @l5yth in https://github.com/l5yth/potato-mesh/pull/54\r\n* feat: parameterize community info by @l5yth in https://github.com/l5yth/potato-mesh/pull/55\r\n* Add message ingestion API and stricter auth by @l5yth in https://github.com/l5yth/potato-mesh/pull/56\r\n* Use packet id as message primary key by @l5yth in https://github.com/l5yth/potato-mesh/pull/58\r\n* Convert boolean flags for SQLite binding by @l5yth in https://github.com/l5yth/potato-mesh/pull/59\r\n* Send mesh data to Potatomesh API by @l5yth in https://github.com/l5yth/potato-mesh/pull/60\r\n* Initialize database on startup by @l5yth in https://github.com/l5yth/potato-mesh/pull/61\r\n* Log node object on snapshot update failure by @l5yth in https://github.com/l5yth/potato-mesh/pull/62\r\n* Fix nested dataclass serialization for node snapshots by @l5yth in https://github.com/l5yth/potato-mesh/pull/63\r\n* Log debug details for messages without sender by @l5yth in https://github.com/l5yth/potato-mesh/pull/64\r\n* style: condense node table by @l5yth in https://github.com/l5yth/potato-mesh/pull/65\r\n* Normalize message sender IDs using node numbers by @l5yth in https://github.com/l5yth/potato-mesh/pull/67\r\n* Improve mobile layout by @l5yth in https://github.com/l5yth/potato-mesh/pull/68\r\n* Align refresh controls with status text by @l5yth in https://github.com/l5yth/potato-mesh/pull/72\r\n* Add RSpec smoke tests for app boot and database init by @l5yth in https://github.com/l5yth/potato-mesh/pull/73\r\n* create ruby workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/74\r\n* docs: update for 0.2.0 release by @l5yth in https://github.com/l5yth/potato-mesh/pull/75\r\n* Add integration specs for node and message APIs by @l5yth in https://github.com/l5yth/potato-mesh/pull/76\r\n* Add Apache license headers to source files by @l5yth in https://github.com/l5yth/potato-mesh/pull/77\r\n* Add Codecov upload step to Ruby workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/78\r\n* fix readme badges by @l5yth in https://github.com/l5yth/potato-mesh/pull/79\r\n* update codecov job by @l5yth in https://github.com/l5yth/potato-mesh/pull/80\r\n* Configure SimpleCov reporting for Codecov by @l5yth in https://github.com/l5yth/potato-mesh/pull/81\r\n* Add JUnit test reporting to Ruby CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/82\r\n* Add coverage for API authentication and payload edge cases by @l5yth in https://github.com/l5yth/potato-mesh/pull/83\r\n* Fix ingestion mapping for message sender IDs by @l5yth in https://github.com/l5yth/potato-mesh/pull/84\r\n* Handle concurrent node snapshot updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/85\r\n* Add coverage for debug logging on messages without sender by @l5yth in https://github.com/l5yth/potato-mesh/pull/86\r\n* Add unit tests for mesh ingestor script by @l5yth in https://github.com/l5yth/potato-mesh/pull/89\r\n* create python yml ga by @l5yth in https://github.com/l5yth/potato-mesh/pull/90\r\n* Skip null identifiers when selecting packet fields by @l5yth in https://github.com/l5yth/potato-mesh/pull/88\r\n* Add Codecov reporting to Python CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/91\r\n* fix py code cov by @l5yth in https://github.com/l5yth/potato-mesh/pull/92\r\n* Add tests covering mesh helper edge cases by @l5yth in https://github.com/l5yth/potato-mesh/pull/93\r\n* Document Python and Ruby source modules by @l5yth in https://gith\n…",
      "notesHtml": "<p>This a feature release of the app potato-mesh v0.2.0. It contains new features, improved design, some tweaks for small screens, and security hardening.</p>\n<p><img src=\"https://github.com/l5yth/potato-mesh/blob/HEAD/scrot-0.2.png\" alt=\"screenshot of the second version\" /></p>\n<ul>\n<li>Web app with chat window and map view showing nodes and messages.</li>\n<li>API to POST (authenticated) and to GET nodes and messages.</li>\n<li>Supplemental Python ingestor to feed the POST APIs of the Web app with data remotely.</li>\n<li>Shows new node notifications (first seen) in chat.</li>\n<li>Allows searching and filtering for nodes in map and table view.</li>\n</ul>\n<h2>What's Changed</h2>\n<ul>\n<li>feat: add dark mode toggle by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/54\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/54</a></li>\n<li>feat: parameterize community info by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/55\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/55</a></li>\n<li>Add message ingestion API and stricter auth by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/56\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/56</a></li>\n<li>Use packet id as message primary key by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/58\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/58</a></li>\n<li>Convert boolean flags for SQLite binding by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/59\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/59</a></li>\n<li>Send mesh data to Potatomesh API by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/60\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/60</a></li>\n<li>Initialize database on startup by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/61\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/61</a></li>\n<li>Log node object on snapshot update failure by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/62\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/62</a></li>\n<li>Fix nested dataclass serialization for node snapshots by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/63\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/63</a></li>\n<li>Log debug details for messages without sender by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/64\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/64</a></li>\n<li>style: condense node table by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/65\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/65</a></li>\n<li>Normalize message sender IDs using node numbers by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/67\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/67</a></li>\n<li>Improve mobile layout by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/68\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/68</a></li>\n<li>Align refresh controls with status text by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/72\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/72</a></li>\n<li>Add RSpec smoke tests for app boot and database init by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/73\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/73</a></li>\n<li>create ruby workflow by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/74\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/74</a></li>\n<li>docs: update for 0.2.0 release by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/75\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/75</a></li>\n<li>Add integration specs for node and message APIs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/76\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/76</a></li>\n<li>Add Apache license headers to source files by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/77\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/77</a></li>\n<li>Add Codecov upload step to Ruby workflow by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/78\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/78</a></li>\n<li>fix readme badges by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/79\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/79</a></li>\n<li>update codecov job by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/80\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/80</a></li>\n<li>Configure SimpleCov reporting for Codecov by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/81\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/81</a></li>\n<li>Add JUnit test reporting to Ruby CI by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/82\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/82</a></li>\n<li>Add coverage for API authentication and payload edge cases by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/83\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/83</a></li>\n<li>Fix ingestion mapping for message sender IDs by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/84\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/84</a></li>\n<li>Handle concurrent node snapshot updates by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/85\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/85</a></li>\n<li>Add coverage for debug logging on messages without sender by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/86\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/86</a></li>\n<li>Add unit tests for mesh ingestor script by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/89\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/89</a></li>\n<li>create python yml ga by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/90\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/90</a></li>\n<li>Skip null identifiers when selecting packet fields by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/88\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/88</a></li>\n<li>Add Codecov reporting to Python CI by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/91\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/91</a></li>\n<li>fix py code cov by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/92\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/92</a></li>\n<li>Add tests covering mesh helper edge cases by @l5yth in <a href=\"https://github.com/l5yth/potato-mesh/pull/93\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/l5yth/potato-mesh/pull/93</a></li>\n<li>Document Python and Ruby source modules by @l5yth in <a href=\"https://gith/\" target=\"_blank\" rel=\"noopener noreferrer\">https://gith</a>\n…</li>\n</ul>\n"
    }
  ],
  "changelogSource": "github",
  "changelogUpdatedAt": "2026-06-23T20:09:30.304Z"
}
