<component type="desktop-application">
<id>com.github.paolostivanin.OTPClient.desktop</id>
<name>OTPClient</name>
<summary>Application for managing TOTP/HOTP tokens with built-in encryption</summary>
<project_license>GPL-3.0+</project_license>
<developer_name>Paolo Stivanin</developer_name>
<description>
<p>Highly secure and easy to use OTP client written in C/GTK3 that supports both TOTP and HOTP and has the following features:</p>
<ul>
<li>integration with the OS' secret service provider via libsecret</li>
<li>support both TOTP and HOTP</li>
<li>support setting custom digits (between 4 and 10 inclusive)</li>
<li>support setting a custom period (between 10 and 120 seconds inclusive)</li>
<li>support SHA1, SHA256 and SHA512 algorithms</li>
<li>support for Steam codes</li>
<li>import and export encrypted/plain andOTP backup</li>
<li>import and export encrypted/plain Aegis backup</li>
<li>import and export plain FreeOTPPlus backup (key URI format only)</li>
<li>import of Google's migration QR codes</li>
<li>local database is encrypted using AES256-GCM (PBKDF2 with SHA512 and 100k iterations) and, while decrypted, it's stored in a secure memory area allocated by GCrypt.</li>
</ul>
</description>
<pkgname>otpclient</pkgname>
<launchable type="desktop-id">com.github.paolostivanin.OTPClient.desktop</launchable>
<icon type="remote" width="48" height="48">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/icons/48x48/otpclient_com.github.paolostivanin.OTPClient.png</icon>
<icon type="cached" width="64" height="64">otpclient_com.github.paolostivanin.OTPClient.png</icon>
<icon type="remote" width="64" height="64">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/icons/64x64/otpclient_com.github.paolostivanin.OTPClient.png</icon>
<icon type="remote" width="128" height="128">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/icons/128x128/otpclient_com.github.paolostivanin.OTPClient.png</icon>
<icon type="stock">com.github.paolostivanin.OTPClient</icon>
<url type="homepage">https://github.com/paolostivanin/OTPClient</url>
<url type="bugtracker">https://github.com/paolostivanin/OTPClient/issues</url>
<categories>
<category>System</category>
<category>Security</category>
</categories>
<provides>
<binary>otpclient</binary>
</provides>
<screenshots>
<screenshot type="default">
<caption>Empty main window</caption>
<image type="source" width="501" height="590">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-1_orig.png</image>
<image type="thumbnail" width="224" height="263">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-1_224x263.png</image>
</screenshot>
<screenshot>
<caption>Add menu</caption>
<image type="source" width="501" height="590">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-2_orig.png</image>
<image type="thumbnail" width="224" height="263">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-2_224x263.png</image>
</screenshot>
<screenshot>
<caption>General menu</caption>
<image type="source" width="501" height="590">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-3_orig.png</image>
<image type="thumbnail" width="224" height="263">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-3_224x263.png</image>
</screenshot>
<screenshot>
<caption>Settings menu</caption>
<image type="source" width="352" height="405">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-4_orig.png</image>
<image type="thumbnail" width="224" height="257">com/github/paolostivanin.OTPClient.desktop/c26d8a5dcd1935218b27a04e2c8abc5d/screenshots/image-4_224x257.png</image>
</screenshot>
</screenshots>
<keywords>
<keyword>otp</keyword>
<keyword>totp</keyword>
<keyword>hotp</keyword>
<keyword>2fa</keyword>
<keyword>2factor</keyword>
<keyword>2fa-client</keyword>
<keyword>2step</keyword>
<keyword>twostep</keyword>
</keywords>
<releases>
<release type="stable" version="4.4.1" timestamp="1772496000">
<description>
<p>OTPClient 4.4.1 includes the following fixes:</p>
<ul>
<li>FIXED: Ctrl+F search not working due to premature key controller destruction.</li>
<li>FIXED: GTK-CRITICAL assertions on close caused by accessing the tree view after widget destruction.</li>
</ul>
</description>
</release>
<release type="stable" version="4.4.0" timestamp="1772496000">
<description>
<p>OTPClient 4.4.0 includes the following improvements and fixes:</p>
<ul>
<li>ADDED: cross-desktop search provider for GNOME Shell and KDE KRunner.</li>
<li>ADDED: --password-file option for CLI to read password from an external file.</li>
<li>IMPROVED: hardened password input by bypassing libc buffering.</li>
<li>IMPROVED: modernised application and window layer to GTK idioms.</li>
<li>IMPROVED: adapted to libcotp v4 API changes.</li>
<li>FIXED: HOTP counter initialisation off by 10^6x.</li>
<li>FIXED: is_steam flag leak, GError misuse, and multiple memory leaks.</li>
<li>FIXED: memory leaks, NULL dereferences, and security issues across the codebase.</li>
<li>FIXED: multiple bugs in search provider (memory leaks, missing gcrypt init).</li>
<li>FIXED: --password-file error handling and terminal detection.</li>
</ul>
</description>
</release>
<release type="stable" version="4.3.1" timestamp="1769385600">
<description>
<p>OTPClient 4.3.1 includes the following improvements and fixes:</p>
<ul>
<li>IMPROVED: Added configurable colors for the countdown display.</li>
<li>IMPROVED: Added support for selecting the countdown display type (numeric value or cake-style).</li>
<li>IMPROVED: Automatically disable countdown color pickers when displaying countdown as seconds.</li>
<li>IMPROVED: Updated color picker sensitivity dynamically when the display mode changes.</li>
<li>IMPROVED: Persisted tree view column widths across application restarts.</li>
<li>IMPROVED: Renamed the “OTP Value” column to “OTP” and added column IDs for width tracking.</li>
</ul>
</description>
</release>
<release type="stable" version="4.3.0" timestamp="1769126400">
<description>
<p>OTPClient 4.3.0 includes the following improvements and fixes:</p>
<ul>
<li>IMPROVED: Refactored the codebase to follow proper GTK coding patterns and lifecycle management</li>
<li>IMPROVED: Added an explicit shutdown event and hardened cleanup to safely handle partially initialized state</li>
<li>IMPROVED: Prevented GTK critical warnings on close while still persisting window size when available</li>
<li>IMPROVED: Added a main-window empty-state view with a clear call-to-action wired to the manual add flow</li>
<li>IMPROVED: Normalized Add menu labels to title case for improved consistency</li>
<li>IMPROVED: Enhanced treeview readability with resizable and expanding columns, ellipsized text, and monospace OTP formatting</li>
<li>IMPROVED: Replaced the validity text column with a progress bar renderer showing remaining seconds for TOTP entries</li>
<li>IMPROVED: Switched visual indicators from bar-based charts to a filled pie for clearer status representation</li>
<li>IMPROVED: Clarified header bar actions with labeled icon buttons for add and reorder controls</li>
<li>IMPROVED: Grouped export formats into app-specific submenus and clarified password dialog warning text</li>
<li>IMPROVED: Improved CLI UX for clearer and more user-friendly interactions</li>
<li>REMOVED: Legacy option-migration code that is no longer needed</li>
</ul>
</description>
</release>
</releases>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">none</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">none</content_attribute>
<content_attribute id="social-info">none</content_attribute>
<content_attribute id="social-audio">none</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">none</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
</component>