<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2026, Jiri Eischmann <jiri@eischmann.cz> and the meshy contributors -->
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
<component type="desktop-application">
  <id>page.codeberg.sesivany.Meshy</id>
  <metadata_license>CC0-1.0</metadata_license>
  <project_license>GPL-3.0-or-later</project_license>
  <name>Meshy</name>
  <summary>MeshCore mesh network client</summary>
  <description>
    <p>
      Meshy is a client for MeshCore LoRa mesh networking devices.
      Connect to your companion device over Bluetooth to send and receive
      encrypted messages, manage contacts, configure channels, and monitor
      your mesh network.
    </p>
    <p>Features:</p>
    <ul>
      <li>Bluetooth LE and USB serial connectivity</li>
      <li>End-to-end encrypted messaging</li>
      <li>Public, private, and hashtag channels</li>
      <li>Contact management with location tracking</li>
      <li>Interactive map view with route tracing</li>
      <li>Device and repeater management</li>
      <li>QR code scanning for quick contact exchange</li>
    </ul>
  </description>

  <developer id="page.codeberg.sesivany">
    <name>Jiri Eischmann</name>
  </developer>

  <launchable type="desktop-id">page.codeberg.sesivany.Meshy.desktop</launchable>

  <url type="homepage">https://codeberg.org/sesivany/meshy</url>
  <url type="bugtracker">https://codeberg.org/sesivany/meshy/issues</url>
  <url type="vcs-browser">https://codeberg.org/sesivany/meshy</url>

  <screenshots>
    <screenshot type="default">
      <image>https://meshy-app.org/screenshot1.png</image>
      <caption>Channel chats</caption>
    </screenshot>
    <screenshot>
      <image>https://meshy-app.org/screenshot2.png</image>
      <caption>Repeater management</caption>
    </screenshot>
    <screenshot>
      <image>https://meshy-app.org/screenshot3-dark.png</image>
      <caption>Settings - Dark Style</caption>
    </screenshot>
    <screenshot>
      <image>https://meshy-app.org/screenshot4.png</image>
      <caption>Map view showing contact locations</caption>
    </screenshot>
  </screenshots>

  <content_rating type="oars-1.1">
    <content_attribute id="social-chat">intense</content_attribute>
    <content_attribute id="social-location">intense</content_attribute>
  </content_rating>

  <requires>
    <display_length compare="ge">360</display_length>
  </requires>

  <supports>
    <control>pointing</control>
    <control>keyboard</control>
    <control>touch</control>
  </supports>

  <releases>
    <release version="26.08" date="2026-08-03">
      <description translate="no">
        <p>New features:</p>
        <ul>
          <li>Room server remote management — login, ACL, settings, CLI, regions, and reboot</li>
          <li>Channel moderation — participant list with blocking and message deletion</li>
          <li>Per-channel message retention settings (1 day to forever)</li>
          <li>Clear all messages in a channel</li>
          <li>Live graphs for noise floor, RSSI, and SNR in device statistics</li>
          <li>Remove individual paths from smart routing history</li>
          <li>Global default routing strategy (Classic/Smart) in Settings with per-contact override</li>
          <li>Persistent contact sort mode and favorites-first preference</li>
          <li>TCP companion address editing via right-click context menu</li>
          <li>Wrong PIN error feedback with automatic retry</li>
          <li>Clickable channel name in header bar opens channel details</li>
        </ul>
        <p>Improvements:</p>
        <ul>
          <li>Repeat mode compatibility — correct frequency, writable radio parameters, Device Info badge</li>
          <li>Reworked message compose panel with split button for send options</li>
          <li>Refined Device Info panel layout</li>
          <li>Improved app-side trip time calculation for accurate smart routing scoring</li>
          <li>Localized number and time formatting across the application</li>
          <li>All UI definitions moved to XML</li>
          <li>Performance optimizations — SQL query batching, O(1) contact sync, dict-based message lookups</li>
        </ul>
        <p>Fixes:</p>
        <ul>
          <li>BLE write serialization preventing InProgress errors during channel sync</li>
          <li>Radio settings not reflecting actual device values after Apply</li>
          <li>Custom preset overwritten by incoming device info updates</li>
          <li>Ghost messages appearing from unconfigured channel slots</li>
          <li>Crash on auto-connect when no BLE transport is available</li>
          <li>Race condition when the connection drops immediately after connecting</li>
          <li>Missed messages counter reset during contact/channel sync</li>
        </ul>
      </description>
    </release>

    <release version="26.07.1" date="2026-07-06">
      <description translate="no">
        <p>Improvements:</p>
        <ul>
          <li>New icon</li>
        </ul>
      </description>
    </release>

    <release version="26.07" date="2026-07-02">
      <description translate="no">
        <p>New features:</p>
        <ul>
          <li>Smart routing — automatic path selection based on success history, reliability, and latency scoring</li>
          <li>One-time routing override via long-press/right-click on the Send button</li>
          <li>Region discovery — scan for nearby repeaters and query them for regions</li>
          <li>Custom map tile sources (Ctrl+M)</li>
          <li>Map view for routing paths in contact details</li>
          <li>Hop count displayed on received channel messages</li>
          <li>Arrival Time sorting option for discovered contacts</li>
          <li>New message indicators in the roster</li>
          <li>Receive Errors percentage in device stats</li>
          <li>Disconnect shortcut and app menu item</li>
          <li>Experimental macOS support with CoreBluetooth BLE transport</li>
        </ul>
        <p>Improvements:</p>
        <ul>
          <li>Reworked message deduplication for contact chats — more reliable duplicate detection with fewer false positives</li>
          <li>More reliable BLE connection handling</li>
          <li>Support for non-Linux/macOS unix systems (FreeBSD etc.)</li>
          <li>Redesigned routing section in contact details with Classic/Smart strategy toggle</li>
          <li>Improved search bar UX — search field hidden when not active</li>
          <li>MeshCore 1.16 protocol support (channel data, default scope, login fields, unscoped flood override)</li>
          <li>Updated radio presets — added Australia (Mid/Wide), Australia QLD, Brazil, Netherlands; revised existing presets</li>
          <li>Significant memory consumption optimizations — map tile cleanup, view lifecycle management</li>
          <li>Code refactoring and performance optimizations across the application</li>
          <li>New user documentation (Zola-based)</li>
          <li>New translations: French, Spanish, Dutch</li>
        </ul>
        <p>Fixes:</p>
        <ul>
          <li>Messages getting stuck on 'Sending' status</li>
          <li>Contacts with invalid GPS coordinates breaking map views</li>
          <li>'Order by last message' not updating after received messages</li>
          <li>Custom radio settings overwritten by preset detection after save</li>
          <li>Spurious 'Device error: illegal argument' toast on connect</li>
          <li>Chat view shifting up when switching focus</li>
          <li>Map node layering order making nodes invisible</li>
          <li>ACK rewards incorrectly assigned to retry attempts</li>
          <li>Missing BLE device import in Linux BLE transport</li>
          <li>Broken device connection caused by missing CONTACT_TYPE_ICONS export</li>
          <li>Unsupported max-width and max-height CSS properties</li>
          <li>Various issues found by static analysis</li>
        </ul>
      </description>
    </release>

    <release version="26.06" date="2026-06-05">
      <description translate="no">
        <p>First stable release of Meshy.</p>
      </description>
    </release>
  </releases>
  <branding>
    <color type="primary" scheme_preference="light">#98E9FF</color>
    <color type="primary" scheme_preference="dark">#003C47</color>
  </branding>
</component>
