<?xml version='1.0' encoding='utf-8'?>
<!-- Copyright 2026 Jaakko Keränen <jaakko.keranen@iki.fi> -->
<component type="desktop-application">
    <id>fi.skyjake.Lagrange</id>
    <metadata_license>CC0-1.0</metadata_license>
    <project_license>BSD-2-Clause</project_license>
    <name>Lagrange</name>
    <summary>A Beautiful Gemini Client</summary>
    <description>
        <p>
            Lagrange is a desktop GUI client for browsing Geminispace.
            It offers modern conveniences familiar from web browsers,
            such as smooth scrolling, inline image viewing, multiple
            tabs, visual themes, Unicode fonts, bookmarks, history, and
            page outlines.
        </p>
        <p>
            Like the Gemini protocol, Lagrange has been designed with
            minimalism in mind. It depends on a small number of essential
            libraries. It is written in C and uses SDL for
            hardware-accelerated graphics. OpenSSL is used for secure
            communications.
        </p>
    </description>
    <content_rating type="oars-1.1" />
    <launchable type="desktop-id">fi.skyjake.Lagrange.desktop</launchable>
    <screenshots>
        <screenshot type="default">
            <image>https://gmi.skyjake.fi/lagrange/flathub_screenshot.jpg</image>
        </screenshot>
    </screenshots>
    <url type="homepage">https://gmi.skyjake.fi/lagrange</url>
    <url type="bugtracker">https://github.com/skyjake/lagrange/issues</url>
    <url type="contact">https://skyjake.fi/@jk</url>
    <developer_name>Jaakko Keränen</developer_name>
    <provides>
        <binary>lagrange</binary>
    </provides>
    <update_contact>jaakko.keranen@iki.fi</update_contact>
    <releases>
        <release version="1.20.6" date="2026-06-06">
            <description>
                <ul>
                    <li>Improve legibility of text after a wrapped paragraph by adding a small first-line indent if the next text line follows immediately.</li>
                    <li>Use a smaller font for plain text documents to fit more content in the window, matching the font used in preformatted blocks.</li>
                    <li>Fixed: Prevent overlapping identity activations by removing any existing ones before activating a new identity on a given URL. (To conveniently switch between previously used identities, use the menu that appears when clicking the navbar Identity button. That preserves the current activation scope.)</li>
                    <li>Gopher: Detect an unexpected binary response to a type `0` selector.</li>
                    <li>Gopher: Detect when the response is a gophermap even if we requested type `0`.</li>
                    <li>Gopher: Plain text now respects the "expand to long lines" option, avoiding wrapping when there is room in the window.</li>
                    <li>Gopher: Fixed handling the `.\r\n` terminator in text responses.</li>
                    <li>Updated UI translations.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.20.6</url>
        </release>
        <release version="1.20.5" date="2026-05-06">
            <description>
                <ul>
                    <li>Fixed: Bookmark context menu closes prematurely when any page is loaded.</li>
                    <li>Fixed: Mismatched Bookmarks sidebar filter field background color.</li>
                    <li>Fixed: Reject server responses where the header is too long.</li>
                    <li>Improved build compatibility with old versions of SDL.</li>
                    <li>Adjusted minimum page margins on desktop for increased breathing room.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.20.5</url>
        </release>
        <release version="1.20.4" date="2026-04-16">
            <description>
                <ul>
                    <li>Fixed potential hang when stopping a network connection when a SOCKS proxy is active.</li>
                    <li>Possible fix for Heading subscription entries returning to an unread state after a long time.</li>
                    <li>Quit the app cleanly when receiving a SIGTERM signal.</li>
                    <li>Improved CJK IME presentation.</li>
                    <li>Added a "Copy Link as Gemtext" context menu action and fixed missing items. (Courtesy of Sidney Cammeresi.)</li>
                    <li>Updated UI translations.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.20.4</url>
        </release>
        <release version="1.20.3" date="2026-03-27">
            <description>
                <ul>
                    <li>Fixed crash when hovering on an empty bookmark folder in the Bookmarks menu.</li>
                    <li>Improved CJK IME support in text fields. (Courtesy of Sidney Cammeresi.)</li>
                    <li>Upload dialog's text editor uses the modifier-key-only Return key behavior when that is the active one. This should help with composing CJK text.</li>
                    <li>Added option to easily toggle SOCKS5 without losing the configuration.</li>
                    <li>Fixed localhost addresses not being ignored by the SOCKS5 proxy.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.20.3</url>
        </release>
        <release version="1.20.2" date="2026-03-21">
            <description>
                <ul>
                    <li>Fixed a crash during event handling when no gamepad is connected.</li>
                    <li>Fixed a crash when there are cached feed entries belonging to a subscription whose bookmark has been deleted.</li>
                    <li>Fixed build issue with glibc 2.43+.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.20.2</url>
        </release>
        <release version="1.20.1" date="2026-03-19">
            <description>
                <ul>
                    <li>Preferences: Hide the SOCKS5 password in the input field (use "sensitive" mode).</li>
                    <li>Updated UI translations.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.20.1</url>
        </release>
        <release version="1.20" date="2026-03-18">
            <description>
                <ul>
                    <li>SOCKS5 proxy support. When enabled, all connections and DNS resolution are tunneled through the proxy.</li>
                    <li>Option to show input prompts at bottom of window (Preferences &gt; Appearance). The placement can also be toggled in the input prompt […] menu.</li>
                    <li>Scroll the page and lists by dragging with the middle mouse button.</li>
                    <li>Context menu for error/warning messages. These messages are not selectable text so this way one can copy the message to the clipboard.</li>
                    <li>Context menu for input dialog prompt text.</li>
                    <li>Option for Return key behavior: Shift for newline, Command/Control for accept.</li>
                    <li>Option to prefer IPv6 in DNS resolution.</li>
                    <li>Fixed ability to scroll the page while an input prompt is open.</li>
                    <li>Plain text lines are wrapped to the maximum available width when the expand-to-long-lines option is enabled.</li>
                    <li>Improved warning message when there is a problem with the proxy server certificate.</li>
                    <li>Revised order of input prompt […] menu items; added prompt position toggle.</li>
                    <li>Stability and behavior issues with audio players. For example, history navigation was not releasing audio player resources when leaving a page. (Previously, they were just paused.)</li>
                    <li>Auto-stopping an audio player when at end of content.</li>
                    <li>Excessive audio player refresh interval.</li>
                    <li>Opening a link context menu using the keyboard shortcut will remember which link as hovered using the keyboard.</li>
                    <li>Gopher: Misdetected menu styling particularly with non-ASCII characters.</li>
                    <li>Potential hang when laying out text into a narrow space.</li>
                    <li>Invalid initial layout for resizable input fields, causing a flicker.</li>
                    <li>OpenSSL error messages are no longer printed to stderr.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.20.0</url>
        </release>
        <release version="1.19.4" date="2025-11-26">
            <description>
                <ul>
                    <li>Fixed: Context menu for Nex links.</li>
                    <li>Titan: Don't send requests with an empty path.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.19.4</url>
        </release>
        <release version="1.19.3" date="2025-10-02">
            <description>
                <ul>
                    <li>Updated bundled Noto Emoji font (Unicode 17).</li>
                    <li>Changed priority for focusing search fields: focus the page contents search field unless the sidebar has focus.</li>
                    <li>Fixed garbled stereo Opus playback.</li>
                    <li>Fixed media type associated with .opus file extension.</li>
                    <li>Fixed opening Opus audio as an inline player.</li>
                    <li>Misfin: Parse URIs with the format "misfin://user@host" as well, because these may be more compatible with external applications.</li>
                    <li>Updated UI translations.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.19.3</url>
        </release>
        <release version="1.19.2" date="2025-09-13">
            <description>
                <ul>
                    <li>Indicate automatic reloading in the Tabs list.</li>
                    <li>Fixed broken timestamp calculation when creating identities.</li>
                    <li>Fixed parsing Gemini response header when there are excessive whitespace characters present.</li>
                    <li>Fixed event handling glitch when opening a popup in split view mode.</li>
                </ul>
                <p>The full release notes can be viewed inside the app by opening
                    the "about:version" page.</p>
            </description>
            <url>https://github.com/skyjake/lagrange/releases/tag/v1.19.2</url>
        </release>
    </releases>
</component>