{
  "id": "sestriere",
  "name": "Sestriere",
  "kind": "client",
  "status": "active",
  "maturity": "beta",
  "description": "Native Haiku OS MeshCore client with encrypted messaging, voice, images, topology and geographic maps, packet analysis, telemetry, repeater administration and an optional MQTT bridge.",
  "screenshots": [
    {
      "file": "messaging.png",
      "caption": "Native Haiku messaging interface"
    },
    {
      "file": "topology.png",
      "caption": "Mesh topology and packet-flow visualization"
    },
    {
      "file": "map.png",
      "caption": "Geographic map and line-of-sight tools"
    },
    {
      "file": "telemetry.png",
      "caption": "Node telemetry and network health"
    }
  ],
  "maintainers": [
    {
      "name": "atomozero",
      "url": "https://github.com/atomozero"
    }
  ],
  "repository": "https://github.com/atomozero/Sestriere",
  "documentation": "https://github.com/atomozero/Sestriere/blob/main/docs/MANUAL.md",
  "license_type": "source-available",
  "languages": [
    "cpp"
  ],
  "platforms": [
    "haiku"
  ],
  "interfaces": [
    "gui"
  ],
  "connections": [
    "serial",
    "usb",
    "mqtt"
  ],
  "node_roles": [
    "companion",
    "repeater",
    "room-server"
  ],
  "capabilities": [
    "messaging",
    "contacts",
    "channels",
    "node-configuration",
    "remote-administration",
    "monitoring",
    "telemetry",
    "packet-analysis",
    "mapping",
    "notifications",
    "bridging"
  ],
  "install": [
    {
      "type": "github-release",
      "package": "Sestriere-1.8-haiku.zip",
      "url": "https://github.com/atomozero/Sestriere/releases"
    },
    {
      "type": "source",
      "url": "https://github.com/atomozero/Sestriere"
    }
  ],
  "popularity": {
    "githubStars": 33,
    "githubForks": 0,
    "githubWatchers": 2,
    "githubOpenIssues": 13,
    "githubContributors": 2,
    "releaseDownloads": 35,
    "latestReleaseDownloads": 12,
    "lastChecked": "2026-06-23"
  },
  "verification": {
    "sourceAvailable": true,
    "releasesAvailable": true,
    "signedReleases": false,
    "ciBuilds": false,
    "hasDocumentation": true,
    "lastChecked": "2026-06-23",
    "notes": [
      "The repository does not currently declare an SPDX license.",
      "Requires Haiku system libraries plus Mosquitto, libcurl, giflib and Codec2."
    ]
  },
  "tags": [
    "haiku",
    "native",
    "voice",
    "image-messaging",
    "mqtt"
  ],
  "last_reviewed": "2026-06-23",
  "source": {
    "path": "data/software/sestriere/software.yaml",
    "updatedAt": "2026-06-24T01:55:49+02:00"
  },
  "latest_version": "1.8",
  "released": "2026-03-15",
  "releases": [
    {
      "version": "1.8",
      "name": "Sestriere 1.8 \"Augusto Righi\"",
      "datetime": "2026-03-15T22:33:43Z",
      "url": "https://github.com/atomozero/Sestriere/releases/tag/1.8",
      "prerelease": false,
      "notes": "Sestriere 1.8.0                                                                                   \r\n                                                                                                                          \r\n  Native MeshCore LoRa mesh client for Haiku OS.                                                                          \r\n\r\n  New features\r\n  - Voice messages — push-to-talk via Codec2, compatible with meshcore-sar (Alphaaaaa)\r\n  - Image sharing — color WebP over LoRa with chunked transfer and drag-and-drop\r\n  - SAR markers — search and rescue pin display in chat and geographic map\r\n  - Line-of-Sight analysis — terrain profile between nodes via Open-Meteo elevation API\r\n  - Multi-companion support — switch radios without mixing data, DB partitioned per device\r\n  - Contact groups and muting — organize sidebar, silence notifications per contact/channel\r\n  - Serial Monitor — CLI terminal for repeaters and standalone devices\r\n\r\n  Improvements\r\n  - Telemetry dashboard redesigned with card-based layout\r\n  - Mission Control: Ping All, Trace Route quick actions\r\n  - Geographic map: zoom/pan/tile state persisted across sessions\r\n  - Deskbar replicant: lightweight add-on with Send Advert shortcut\r\n  - Inline emoji rendering via Twemoji\r\n  - Tile cache: corrupt PNG auto-recovery, 50 MB LRU eviction\r\n  - Database: incremental vacuum after pruning, WAL fallback for Haiku compatibility\r\n  - 56 automated tests (make test)\r\n\r\n  Bug fixes\r\n  - Fixed thread safety in child window access and database singleton\r\n  - Fixed protocol compliance: full 32-byte pubkeys, frequency in kHz, V3 SNR offsets\r\n  - Fixed GIF cache miss, image buffer overread, delivery status tracking\r\n  - Fixed memory leaks in BMessageRunner and GIF picker threads\r\n  - Replaced VLAs and non-reentrant libc calls (localtime_r, strlcpy)",
      "notesHtml": "<p>Sestriere 1.8.0                                                                                   </p>\n<p>  Native MeshCore LoRa mesh client for Haiku OS.                                                                          </p>\n<p>  New features</p>\n<ul>\n<li>Voice messages — push-to-talk via Codec2, compatible with meshcore-sar (Alphaaaaa)</li>\n<li>Image sharing — color WebP over LoRa with chunked transfer and drag-and-drop</li>\n<li>SAR markers — search and rescue pin display in chat and geographic map</li>\n<li>Line-of-Sight analysis — terrain profile between nodes via Open-Meteo elevation API</li>\n<li>Multi-companion support — switch radios without mixing data, DB partitioned per device</li>\n<li>Contact groups and muting — organize sidebar, silence notifications per contact/channel</li>\n<li>Serial Monitor — CLI terminal for repeaters and standalone devices</li>\n</ul>\n<p>  Improvements</p>\n<ul>\n<li>Telemetry dashboard redesigned with card-based layout</li>\n<li>Mission Control: Ping All, Trace Route quick actions</li>\n<li>Geographic map: zoom/pan/tile state persisted across sessions</li>\n<li>Deskbar replicant: lightweight add-on with Send Advert shortcut</li>\n<li>Inline emoji rendering via Twemoji</li>\n<li>Tile cache: corrupt PNG auto-recovery, 50 MB LRU eviction</li>\n<li>Database: incremental vacuum after pruning, WAL fallback for Haiku compatibility</li>\n<li>56 automated tests (make test)</li>\n</ul>\n<p>  Bug fixes</p>\n<ul>\n<li>Fixed thread safety in child window access and database singleton</li>\n<li>Fixed protocol compliance: full 32-byte pubkeys, frequency in kHz, V3 SNR offsets</li>\n<li>Fixed GIF cache miss, image buffer overread, delivery status tracking</li>\n<li>Fixed memory leaks in BMessageRunner and GIF picker threads</li>\n<li>Replaced VLAs and non-reentrant libc calls (localtime_r, strlcpy)</li>\n</ul>\n"
    },
    {
      "version": "1.7",
      "name": "Sestriere 1.7 \"Marconi\"",
      "datetime": "2026-03-06T20:49:09Z",
      "url": "https://github.com/atomozero/Sestriere/releases/tag/1.7",
      "prerelease": false,
      "notes": "Sestriere 1.7 \"Marconi\"\r\n\r\n  Native MeshCore LoRa mesh client for Haiku OS\r\n\r\n  Sestriere is a native Haiku application for communicating over LoRa mesh networks via MeshCore-compatible radios. It\r\n  provides a Telegram-style interface with real-time messaging, network visualization, telemetry dashboards, and a\r\n  Wireshark-style packet analyzer — all built with the Be API.\r\n\r\n  What's new in 1.7\r\n\r\n  GIF Sharing — Send and receive animated GIFs via GIPHY. The built-in picker shows animated thumbnails in a grid, and\r\n  only the short GIF ID travels over LoRa (zero overhead). Fully compatible with meshcore-open (Flutter).\r\n\r\n  Emoji Rendering — Unicode emoji displayed as color PNG sprites with proper alpha blending over chat bubbles.\r\n\r\n  Image Sharing — Send photos over LoRa using chunked transfer. Images are compressed, transmitted in fragments,\r\n  auto-fetched on the receiving end, and displayed inline in the chat.\r\n\r\n  SAR Markers — Search and Rescue markers (meshcore-sar protocol) parsed and displayed in chat and on the geographic map.\r\n\r\n  OpenStreetMap Tiles — The geographic map now shows real OSM tiles with offline caching, plus world coastline rendering.\r\n\r\n  Delivery Queue — Messages now use a FIFO queue with automatic retry and clear status (Pending, Sent, Confirmed, Failed).\r\n\r\n  Ping All — Ping every contact in one click to check who's online.\r\n\r\n  UI Polish — Compact default layout, flexible panel resizing, contact filter state (Chat/Repeater/Room) persisted across\r\n  restarts.\r\n\r\n  Requirements\r\n\r\n  - Haiku OS R1/beta5 or later (x86_64)\r\n  - MeshCore-compatible LoRa radio with USB serial\r\n  - pkgman install mosquitto sqlite curl giflib\r\n\r\n  Feedback and bug reports welcome!",
      "notesHtml": "<p>Sestriere 1.7 \"Marconi\"</p>\n<p>  Native MeshCore LoRa mesh client for Haiku OS</p>\n<p>  Sestriere is a native Haiku application for communicating over LoRa mesh networks via MeshCore-compatible radios. It\n  provides a Telegram-style interface with real-time messaging, network visualization, telemetry dashboards, and a\n  Wireshark-style packet analyzer — all built with the Be API.</p>\n<p>  What's new in 1.7</p>\n<p>  GIF Sharing — Send and receive animated GIFs via GIPHY. The built-in picker shows animated thumbnails in a grid, and\n  only the short GIF ID travels over LoRa (zero overhead). Fully compatible with meshcore-open (Flutter).</p>\n<p>  Emoji Rendering — Unicode emoji displayed as color PNG sprites with proper alpha blending over chat bubbles.</p>\n<p>  Image Sharing — Send photos over LoRa using chunked transfer. Images are compressed, transmitted in fragments,\n  auto-fetched on the receiving end, and displayed inline in the chat.</p>\n<p>  SAR Markers — Search and Rescue markers (meshcore-sar protocol) parsed and displayed in chat and on the geographic map.</p>\n<p>  OpenStreetMap Tiles — The geographic map now shows real OSM tiles with offline caching, plus world coastline rendering.</p>\n<p>  Delivery Queue — Messages now use a FIFO queue with automatic retry and clear status (Pending, Sent, Confirmed, Failed).</p>\n<p>  Ping All — Ping every contact in one click to check who's online.</p>\n<p>  UI Polish — Compact default layout, flexible panel resizing, contact filter state (Chat/Repeater/Room) persisted across\n  restarts.</p>\n<p>  Requirements</p>\n<ul>\n<li>Haiku OS R1/beta5 or later (x86_64)</li>\n<li>MeshCore-compatible LoRa radio with USB serial</li>\n<li>pkgman install mosquitto sqlite curl giflib</li>\n</ul>\n<p>  Feedback and bug reports welcome!</p>\n"
    },
    {
      "version": "1.4",
      "name": "Sestriere 1.4 \"Granito\" ",
      "datetime": "2026-02-22T13:41:48Z",
      "url": "https://github.com/atomozero/Sestriere/releases/tag/1.4",
      "prerelease": false,
      "notes": "Solid as Alpine granite — a stability and code quality release.                                   \r\n\r\n  No flashy new features this time. Instead, we went deep under the hood to rebuild the foundations for what comes next.\r\n\r\n  Architecture\r\n\r\n  - Protocol parsing extracted from MainWindow into a dedicated ProtocolHandler class\r\n  - Common utilities consolidated into Utils.h: FormatUptime, FormatTimeAgo, ParseHexPrefix, FormatContactKey\r\n  - All magic numbers replaced with named constants across the entire codebase\r\n  - Dead code removed: legacy MqttSettingsWindow, StatusBarView, unused message codes\r\n\r\n  Security\r\n\r\n  - Hardcoded credentials removed from source\r\n  - All database queries migrated to parameterized prepared statements\r\n  - User input validated before all protocol operations\r\n  - Bounds checks on every incoming protocol frame\r\n\r\n  Thread Safety\r\n\r\n  - DatabaseManager singleton protected with mutex\r\n  - Child window access guarded by new _LockIfVisible() helper\r\n  - MQTT connect/disconnect race condition fixed\r\n  - BMessageRunner lifecycle hardened: always NULL after delete, no use-after-free\r\n\r\n  Protocol Bug Fixes\r\n\r\n  - CMD_REMOVE_CONTACT and CMD_RESET_PATH now send full 32-byte public key (was 6-byte, causing silent failures)\r\n  - CMD_SET_RADIO_PARAMS sends frequency in kHz as V3 spec requires (was Hz)\r\n  - Packet Analyzer V3 message text offsets corrected\r\n  - localtime() replaced with reentrant localtime_r() throughout\r\n  - strtok() replaced with thread-safe strtok_r()\r\n  - Blocking snooze() removed from LoginWindow UI thread\r\n\r\n  UX Polish\r\n\r\n  - All windows centered on screen (or on parent) instead of hardcoded pixel positions\r\n  - Mission Control cards gracefully truncate long text in narrow windows\r\n  - MQTT password field with show/hide toggle\r\n  - Theme-aware Stats Window using system colors\r\n  - Reduced minimum sizes for Telemetry and Packet Analyzer to fit smaller screens\r\n  - Unified battery percentage formula across all views",
      "notesHtml": "<p>Solid as Alpine granite — a stability and code quality release.                                   </p>\n<p>  No flashy new features this time. Instead, we went deep under the hood to rebuild the foundations for what comes next.</p>\n<p>  Architecture</p>\n<ul>\n<li>Protocol parsing extracted from MainWindow into a dedicated ProtocolHandler class</li>\n<li>Common utilities consolidated into Utils.h: FormatUptime, FormatTimeAgo, ParseHexPrefix, FormatContactKey</li>\n<li>All magic numbers replaced with named constants across the entire codebase</li>\n<li>Dead code removed: legacy MqttSettingsWindow, StatusBarView, unused message codes</li>\n</ul>\n<p>  Security</p>\n<ul>\n<li>Hardcoded credentials removed from source</li>\n<li>All database queries migrated to parameterized prepared statements</li>\n<li>User input validated before all protocol operations</li>\n<li>Bounds checks on every incoming protocol frame</li>\n</ul>\n<p>  Thread Safety</p>\n<ul>\n<li>DatabaseManager singleton protected with mutex</li>\n<li>Child window access guarded by new _LockIfVisible() helper</li>\n<li>MQTT connect/disconnect race condition fixed</li>\n<li>BMessageRunner lifecycle hardened: always NULL after delete, no use-after-free</li>\n</ul>\n<p>  Protocol Bug Fixes</p>\n<ul>\n<li>CMD_REMOVE_CONTACT and CMD_RESET_PATH now send full 32-byte public key (was 6-byte, causing silent failures)</li>\n<li>CMD_SET_RADIO_PARAMS sends frequency in kHz as V3 spec requires (was Hz)</li>\n<li>Packet Analyzer V3 message text offsets corrected</li>\n<li>localtime() replaced with reentrant localtime_r() throughout</li>\n<li>strtok() replaced with thread-safe strtok_r()</li>\n<li>Blocking snooze() removed from LoginWindow UI thread</li>\n</ul>\n<p>  UX Polish</p>\n<ul>\n<li>All windows centered on screen (or on parent) instead of hardcoded pixel positions</li>\n<li>Mission Control cards gracefully truncate long text in narrow windows</li>\n<li>MQTT password field with show/hide toggle</li>\n<li>Theme-aware Stats Window using system colors</li>\n<li>Reduced minimum sizes for Telemetry and Packet Analyzer to fit smaller screens</li>\n<li>Unified battery percentage formula across all views</li>\n</ul>\n"
    },
    {
      "version": "1.3",
      "name": "Sestriere 1.3 \"Mission Control\"",
      "datetime": "2026-02-19T23:19:19Z",
      "url": "https://github.com/atomozero/Sestriere/releases/tag/1.3",
      "prerelease": false,
      "notes": "Mission Control Dashboard (Cmd+Shift+D)                                                                                 \r\n  A unified real-time dashboard consolidating all device, radio, and network metrics into a single window:                \r\n  - Device status card with battery gauge, uptime, and pulsing connection indicator\r\n  - Radio health card showing RSSI, SNR, noise floor, TX power, frequency, and bandwidth\r\n  - Composite health score arc (0–100) based on connection, battery, signal quality, and contacts\r\n  - Dual-axis SNR/RSSI rolling chart (200 points) with color-coded quality zones\r\n  - TX/RX packet rate histogram (60 bars, auto-scaling)\r\n  - Contact heatmap grid with per-contact signal quality coloring\r\n  - Mini network topology with radial node layout and SNR sparklines\r\n  - Session timeline showing event markers since connection\r\n  - Alert banner for critical conditions (disconnect, low battery, poor signal)\r\n  - Quick action buttons: Send Advert, Sync Contacts, Refresh Stats\r\n  - Color-coded activity feed with timestamped event log\r\n  - Dashboard icon in the toolbar for quick access\r\n\r\n  Protocol Coverage\r\n  11 new MeshCore V3 commands implemented: trace path, raw data exchange, device time read/write, radio tuning parameters,\r\n   contact sharing, custom variables, advert path query, binary requests, control data, and device PIN.\r\n\r\n  Admin Panel\r\n  Repeater/room administration integrated directly into the contact info panel with a tabbed CLI console supporting remote\r\n   commands (ver, neighbors, clock, clear stats, set name, password) and remote telemetry.\r\n\r\n  Bug Fixes\r\n  - Statistics window now correctly parses and displays all V3 fields: battery voltage, noise floor, SNR (no longer\r\n  incorrectly divided by 4), and proper flood/direct packet breakdown.",
      "notesHtml": "<p>Mission Control Dashboard (Cmd+Shift+D)<br />  A unified real-time dashboard consolidating all device, radio, and network metrics into a single window:                </p>\n<ul>\n<li>Device status card with battery gauge, uptime, and pulsing connection indicator</li>\n<li>Radio health card showing RSSI, SNR, noise floor, TX power, frequency, and bandwidth</li>\n<li>Composite health score arc (0–100) based on connection, battery, signal quality, and contacts</li>\n<li>Dual-axis SNR/RSSI rolling chart (200 points) with color-coded quality zones</li>\n<li>TX/RX packet rate histogram (60 bars, auto-scaling)</li>\n<li>Contact heatmap grid with per-contact signal quality coloring</li>\n<li>Mini network topology with radial node layout and SNR sparklines</li>\n<li>Session timeline showing event markers since connection</li>\n<li>Alert banner for critical conditions (disconnect, low battery, poor signal)</li>\n<li>Quick action buttons: Send Advert, Sync Contacts, Refresh Stats</li>\n<li>Color-coded activity feed with timestamped event log</li>\n<li>Dashboard icon in the toolbar for quick access</li>\n</ul>\n<p>  Protocol Coverage\n  11 new MeshCore V3 commands implemented: trace path, raw data exchange, device time read/write, radio tuning parameters,\n   contact sharing, custom variables, advert path query, binary requests, control data, and device PIN.</p>\n<p>  Admin Panel\n  Repeater/room administration integrated directly into the contact info panel with a tabbed CLI console supporting remote\n   commands (ver, neighbors, clock, clear stats, set name, password) and remote telemetry.</p>\n<p>  Bug Fixes</p>\n<ul>\n<li>Statistics window now correctly parses and displays all V3 fields: battery voltage, noise floor, SNR (no longer\n  incorrectly divided by 4), and proper flood/direct packet breakdown.</li>\n</ul>\n"
    }
  ],
  "changelogSource": "github",
  "changelogUpdatedAt": "2026-06-23T21:03:37.740Z"
}
