• v2.3.2 a0a718d363

    DinoX v2.3.2
    All checks were successful
    Build / Validate Manual Selection (push) Has been skipped
    Build / Release Preflight (push) Successful in 1m9s
    Build / Mirror AppImage Runtimes (push) Has been skipped
    Build / Core Build (push) Successful in 1h3m6s
    Build / Build AppImage (push) Successful in 1h46m46s
    Build / Build Flatpak (push) Successful in 1h2m32s
    Stable

    dinoxim released this 2026-10-24 00:07:27 +02:00 | 0 commits to master since this release

    DinoX v2.3.2

    Modern XMPP client with extended features.

    Choose your Linux download

    • Ubuntu 24.04 / Linux Mint 22.x (64-bit Intel/AMD): use the .deb, AppImage or Flatpak.
    • **Debian 13 use AppImage or Flatpak. The Ubuntu-built .deb requires different system libraries.

    Installation help

    What's New

    Changes since 2.3.1. Release preparation and package acceptance are tracked in
    Release readiness.

    Highlights

    • Feeds and account security: Read and share web feeds, publish personal XMPP posts, choose DNSSEC/DANE per connection, and see whether additional login protection is available and active.
    • More video effects, processed locally: Camera controls now include additional filters and image adjustments, background blur and replacement, automatic framing, and face accessories. The optional person and face detection runs offline and starts only when the selected effect needs it.
    • Turn a one-to-one call into a conference: Invite another participant during an ongoing 1:1 audio or video call. DinoX checks group-call support, prepares a private temporary call room and preserves the existing microphone/camera choices. This requires group-capable participants.
    • Clearer group-call controls: Start a call in an existing private chat room, join a running call, return to its room, or invite another participant from a one-to-one call. Compact controls keep the video-effects button accessible.
    • Easier voice messages and stickers: Recording stays in a popover with a live waveform and explicit Send/Discard actions. Chat audio players are compact, with seeking, playback speed and clearer time labels; sticker imports show progress and animation settings apply to chat previews.
    • Account-specific privacy and key management: Profile operations and server administration retain their selected account. OpenPGP key assignment, publication and server-backup cleanup distinguish the selected key from keys used by other accounts.
    • Better recovery from stale OMEMO keys: Refreshes the device's published keys after one-time keys are consumed and can repair eligible failed sessions with trusted contacts. The account's device identity and trust decisions are preserved; old messages that require missing private keys remain unreadable.
    • Clearer chats and easier history access: Compact message headers, persistent mention markers and improved narrow-window layouts make conversations easier to follow. One-to-one chats and groups can request archived messages directly, with an optional history period for each group.
    • Compact chat list and controlled Tor recovery: Collapse the wide-window chat list to small avatars with visible unread and group badges. If Tor or a proxy is unavailable after restart, DinoX stays usable so the route can be changed explicitly; it does not silently connect directly.

    Added

    • Visible account login protection: A green check confirms usable SCRAM-PLUS protection for the selected account; a red cross identifies unavailable protection. Policy choices remain disabled until availability is confirmed. Changing the selection automatically reconnects that account and reports the result. Connection failures remain distinct from missing support, and existing requirements are never relaxed automatically.
    • Feeds in chats and XMPP social posts: Preview and share RSS 1.0, RSS 2.0 and Atom articles through the selected chat's normal encryption. Optional subscriptions post new articles while DinoX is running, preserve their account and destination, skip existing articles and pause if chat encryption changes. A separate XMPP feed view reads and subscribes to PubSub nodes and publishes text posts and replies under XEP-0472; these posts are not end-to-end encrypted.
    • Optional DNSSEC and DANE: Each XMPP account and MQTT broker can independently leave verification off, check supporting domains, or require it. Validated DNS records bind the actual TLS connection before authentication. Proxy connections use an explicitly configured HTTPS resolver through the same proxy; DNS failures do not silently disable verification or select a direct route. Existing account and broker settings remain off.
    • Camera filters and adjustments: Adds Cold tone, Sepia, Light leak, Dreamy, Prism light, Fisheye, Vintage TV, Frosted glass, Duo tone and Underwater alongside the existing Grayscale and Warm tone. Brightness, contrast, saturation and sharpness have separate controls, with optional gentle touch-up and low-light enhancement.
    • Backgrounds and face accessories: Adds background blur, solid colours, built-in scenes and selection of a still PNG/JPEG image, plus automatic framing. Glasses, hats and beards offer several styles; puppy and karaoke accessories and fireworks, confetti, stars and football animations are also available. Face tracking is limited to one face.
    • Join and participant actions: The group-call menu distinguishes starting a new call, joining a live call and rejoining the remembered call room. Adding a participant to an ongoing one-to-one audio or video call prepares a private temporary room and verifies group-call support before moving the existing call.
    • Separate device tests: Preferences distinguish call microphone, speaker and camera tests from voice/video-message capture tests. Each test uses its selected configuration, reports its result and releases its recording or preview resources when closed.
    • Account server-backup management: Key Management can explicitly delete the selected account's complete server backup while keeping local keys and public-key publications. Pending key-related cleanup is shown separately with a checked reconnect retry.
    • Group history period: Personal group settings can retrieve 1–365 days of archived messages, separately for each group and account. With the custom period off, DinoX keeps its automatic rules. “Load now” requests older messages without leaving the room; the server's available history remains the limit.
    • History shortcut: One-to-one chats and groups offer “Load messages now” in their chat menu and through Ctrl+Shift+H, documented in the keyboard-shortcut overview. One-to-one requests filter the selected account's archive for that contact; group requests use their saved period.
    • Collapsible chat list: The wide-window conversation list can collapse to small contact pictures with orange unread and mention markers. Group rooms show a people badge and private rooms a lock, independently of contact presence. A centred arrow or Ctrl+Shift+L switches views; shrinking the window still uses the automatic narrow-window navigation. The keyboard-shortcut overview now includes message editing, search and dialog controls.
    • Feed keyboard shortcut: Open Feeds with Ctrl+Shift+F. Web subscriptions offer a 5-minute to 24-hour interval, defaulting to 30 minutes; automated chat delivery runs only while DinoX and the selected account are online.

    Changed

    • Offline effect runtimes: Package pins now include matching Google/libwebrtc M152 ABI 40 / IPC 10 libraries, the isolated vision worker, pinned models, licenses and provenance. Ordinary colour filters do not require model inference; effects stay off until selected for the call.
    • Call controls and room use: Participant invitations use a compact button, and video effects also apply to MUJI video calls. Calls started in an existing private chat room use that room. Temporary rooms used for one-to-one call conversion have a checked nonpersistent configuration.
    • Server administration: Commands are grouped by the selected account's server, target and interface. ejabberd API commands remain distinct from node and standard ad-hoc commands; Prosody commands use their advertised identifiers. The catalog covers ejabberd 26.09, including invitation and password-reset commands when the server exposes them. Forms, action buttons and result text use clearer labels.
    • Server-directory search: The contact dialog explains that this searches a server-provided user directory, rather than the local contact list. Known form labels and search instructions are translated without changing the field names or values sent to the server.
    • OpenPGP key management: Shows the owning account, assigns explicitly imported private keys without activating them, displays import progress and refreshes the key list directly. Legacy keys can be assigned even when their email identity differs from the account's XMPP address. XEP-0373/0374 keeps its matching xmpp: identity requirement.
    • Tray menus: Adds coloured status/action icons on Linux and Windows. The Windows menu includes Show DinoX, follows the application's light/dark theme, scales with monitor DPI and exposes readable names to accessibility tools; high-contrast mode uses native menu items.
    • Linux input compatibility: A private compatible IBus client handles the affected input-method versions without replacing the system library or requiring a PPA. Its C17 build settings also avoid the emoji-helper declaration failure with newer compilers.
    • Message headers and mention styling: Keeps the sender, date, encryption and delivery indicators together. Mentions use a small indicator beside the header and a subtle side marker in light and dark themes, replacing the full coloured message background. Conversation details adapt their controls and navigation to narrow windows.
    • Group hats and member labels: Member lists show readable coloured hat badges instead of plain labels. Hat management separates available labels from assignments, explains that hats do not grant permissions, and shows the selected room and account. Creation, assignment and removal use clearer actions and the choices allowed by the server.
    • OMEMO device management: Key dialogs identify the account, contact and device and explain verification, rejection, session reset and device removal. The key list refreshes after changes; a changed fingerprint requires another review instead of applying an action to a replacement key.
    • German translations: Completes account-creation headings, sign-in actions and form labels, and adds the new history, hat-management, font and encryption-status text to the German translation and translation templates.
    • Linux package-build parallelism: Package jobs can use four compiler jobs and four CPUs, while keeping the existing pinned build dependencies.
    • libsoup 3.4 baseline: Source builds and Debian packages now require libsoup 3.4 or newer, so package installation rejects an older incompatible runtime.

    Fixed

    • Choosing a Linux package: Release downloads, the README and the DEB description now identify the Ubuntu 24.04/Mint 22 binary explicitly. Installation help explains runtime dependencies, APT installation and the AppImage/Flatpak alternatives for Debian Trixie derivatives; development packages are not a workaround for incompatible system libraries.
    • Reconnect while avatar or read-state requests are pending: Cancelling a request while changing login protection no longer crashes on an empty asynchronous PubSub result. Avatar reads, uploads and removal retain their cancellation and uncertain-write outcomes; cancelled read-state synchronization and OMEMO bundle publication cannot be mistaken for confirmed success. Applies to the shared Linux and Windows code.
    • Repeated login-protection checks: Locally cancelled blocklist, message-carbon and OMEMO device-list requests no longer produce misleading failure warnings during a reconnect. An interrupted device-list request does not report an empty list or fail pending encrypted messages. The replacement connection fetches its state again; real server and transport errors remain visible.
    • Feed setup and subscriptions: Separates reading other people's XMPP feeds from publishing a personal feed and explains who hosts posts and how updates arrive. Web-feed intervals are visible before setup and editable for each saved subscription without resetting delivery history or encryption. Missing XMPP feeds show a translated explanation; other server errors remain visible.
    • Unicode in feed previews and sharing: Shortened text keeps combining accents, composite emoji and flags intact. Feed decoding recognizes UTF-16/32 byte order with or without a BOM and validates the converted UTF-8. Invalid outgoing text is rejected before queuing or publishing. The implementation is shared by Linux and Windows.
    • OMEMO send retries: Pending messages retain their original direct-chat or group-chat type. Missing device lists no longer cause repeated queries for already known recipients. An authoritative empty list stops the send with a translated explanation and an explicit retry, instead of repeatedly attempting encryption. Group sends never treat a room address as a recipient when room state is unavailable.
    • Windows TLS with Unicode profile paths: The portable package includes a pinned GIO/GnuTLS module that loads CA certificates from paths containing Cyrillic characters and spaces. Certificate validation remains enabled.
    • MUJI readiness confirmation: New outgoing group-call connections wait for the room to reflect the current READY presence, with the Monocles profile's five-second fallback. Incoming connections remain available during the wait, and an existing direct call continues when another participant is invited. Cancellation, stream changes and replaced call owners cannot release stale outgoing attempts.
    • MUJI connection ownership: Initial and later participants use the same nickname-based initiator rule as the Monocles MUJI profile proposal, including identical Unicode ordering. Removes the join-order dependency and the mutual-preparation timeout exception while retaining room, device and trust checks. Existing direct-call sessions remain intact when inviting another participant; DinoX continues to use legacy OMEMO for these calls.
    • Linux VP8 decoder selection: Checks real key/delta decoding, usable image output and hardware/software latency before selecting VA-API, instead of relying only on a reported decoding profile. Unsuitable hardware uses libvpx; encoder selection remains independent. The short worker-local check does not certify all resolutions or network conditions.
    • Accurate call diagnostics: Signaling logs report the actual first SDP payload instead of incorrectly labeling the preferred codec as selected. SDP preference order does not prove which codec is being sent; native codec negotiation remains unchanged.
    • Inviting a group-call participant again: Uses a fresh reference for each direct invitation to an existing conference, so a participant who left can be invited again without triggering duplicate-invite protection. Old replies and timeouts are matched to their original invitation; replay checks and room-invitation references remain intact.
    • OMEMO sending from fresh profiles: Excludes the current sending device from its own key recipients, so a new profile does not wait indefinitely for a session to itself. Other own devices still receive encrypted copies and missing sessions still block incomplete delivery. Empty recipient payloads fail closed; device identities, trust decisions and published lists are preserved.
    • First messages to new encrypted group participants: Prepares pending recipient sessions before sending, even when another group member is already ready. A new participant no longer has to send first to receive subsequent messages. Denied access to a needed key reports a failed send in the current private room instead of silently omitting the participant.
    • OMEMO authentication of call fingerprints: Direct and private-group Google/libwebrtc calls wait for the selected device's encryption session before sending a protected DTLS fingerprint. Failed key preparation no longer silently sends an ordinary fingerprint. Once protection is negotiated, later fingerprints must retain the same accepted device identity. Ending a call cancels only its own pending requests; adding a participant preserves the existing direct connection. Rejected incoming setup removes the waiting participant instead of leaving a stalled group call. Peers that do not negotiate the optional extension continue to use ordinary DTLS-SRTP.
    • First group-call invitations: An eligible contact's group-call invitation can create its incoming call entry without requiring an existing direct chat. Joining the room and starting media still require accepting the invitation. Incoming invites retain their actual connection and bound recipient, use the existing contact/block policy, and preserve the separate identity checks for live private rooms.
    • Long addresses in contact and participant choosers: Directory-search labels can shrink to the dialog width, with their complete text retained for tooltips and accessibility, avoiding GTK sizing warnings while entering long addresses.
    • Group-call media and participants: Releases closed peer video attachments, preserves active MUJI presence during room/status updates, shows initial participants and keeps an established conference open when a peer leaves. Video pipelines close asynchronously, and controls recover after the last video peer leaves.
    • Call conversion and cancellation: Cancelling the participant chooser restores the invite control. Unsupported contacts and failed room preparation no longer leave conversion controls disabled or partially moved media state. Stale events from a closed call window are ignored.
    • Call audio after restart/rejoin: Reapplies selected audio devices and volume when the WebRTC worker is reactivated, instead of retaining an inactive device state.
    • Incoming one-to-one calls: Validates JMI initiation and the peer identity before allocating a media session, so invalid initiation cannot leave subsequent transport messages attached to a session that never started.
    • Voice-message sending and playback: Keeps a finished recording path until the chat receives it. Playback waits for decoder readiness and completed seeks, preserves positions across cancellation/speed changes, and supports replay after the previous output session has ended.
    • Audio-player layout: Bounds the player's width and reduces its play-button size so it does not collide with message actions, including in narrow chat windows.
    • Device selection and tests: Prefers exact/stable device identifiers before display-name fallbacks, excludes empty GUID matches and explicitly restores the system-default output. Tests use separate contexts from message playback; interrupted device refreshes restart, and test callbacks are disconnected on completion or cancellation.
    • Sticker previews and imports: Identical images update all waiting thumbnail widgets. Folder and XMPP-link imports show a spinner while working, and the animation switch controls sticker playback in the chat. Stopped or superseded previews release their callbacks and files.
    • Responsive chat navigation and dialogs: Keeps the selected chat visible when narrowing the window, preserves settings scroll position after device tests, and corrects group-dialog minimum/natural sizing when returning from details.
    • Contact and encryption diagnostics: Contact-permission notices can be dismissed. Expected missing OpenPGP publication data is quieter; OMEMO diagnostics distinguish a missing recipient key for this device from local key-store or session failures.
    • Edited-message reloads: Resolves correction rows through persisted message identity and preserves the original sender when reloading an edited message.
    • Directory requests and administration forms: Discovers the actual search service, handles unavailable or timed-out forms, and cancels obsolete searches. Administration requests and form results retain their account/target context, and malformed or missing display values no longer reach unsafe string formatting.
    • Network overview: Includes connected standalone MQTT in the overall status, removes stale provider rows after account changes, and bounds long account labels and the scrolling account list.
    • Password changes and account deletion: An offline or failed password change reports an error without overwriting the stored password. Account deletion can offer managed CloudBot cleanup when only cloud management tokens are present.
    • Botmother API and backups: Correcting API settings retries a failed server start without requiring an off/on toggle. Profile backups also snapshot an existing bot database when its plugin is disabled and uninitialized, including committed WAL data.
    • OpenPGP backup/restore and key switches: Uses the uppercase XEP-0373 backup code, while accepting older DinoX backups; requests the private key's original passphrase before export. Restoring a multi-key backup skips only keys already present. Offline A-to-B-to-A selection no longer retracts the reactivated key, and deactivating XMPP OpenPGP resynchronizes a restored Legacy presence key.
    • Windows tray notifications and visibility: Each queued balloon keeps its own action and account/conversation target. Retracting one notification leaves unrelated calls/invites intact; Explorer restart and shutdown release pending actions. Reopening a hidden window through a notification no longer confuses the next tray click, and the status-message action opens a visible dialog.
    • Cross-platform bindings and packaging checks: Corrects Windows pointer/format types, preserves required Android JNI exports, and checks the matched video-effect runtimes and Linux SNI sandbox permission without bringing back external libdbusmenu.
    • Release and Windows ZIP helpers: Preparing an existing version promotes its changelog and XML entries while preserving the notes and avoiding duplicate releases. Publication rejects development/unreleased metadata until it is promoted to one approved date. The Windows ZIP helper rejects an output directory inside dist/, keeping the generated archive outside its own source tree.
    • Avatar context menus: Close the chat-avatar menu when clicking elsewhere, pressing Escape, switching applications, hiding the message or minimizing the chat window. Wait until the initiating mouse button is released before opening, avoiding GTK active-state warnings on repeated clicks. Closed menus release their callbacks and room data while keeping subsequent actions and the fast cached member list intact.
    • Windows interface text: Restores a readable 11-point minimum while retaining the Windows font family, larger system fonts and later system-font changes. Applies the intended font hinting and aligns letters to the pixel grid on current GTK versions. Uses the display's text resolution instead of forcing 96 DPI; chat-font preferences remain separate.
    • Tor bridge checks: Avoids HTTP/2 session-cleanup warnings when requesting bridges and checking WebTunnel endpoints on Linux and Windows. These short-lived helper requests use HTTP/1.1 while retaining HTTPS certificate validation, timeouts and existing status handling.
    • AppImage builds during repository outages: Retries temporary Ubuntu snapshot download failures and rejects incomplete source indexes. Persistent outages now report the failed snapshot fetch clearly, while retaining the exact dependency versions and source checks.
    • Windows native type compatibility: Corrects string-array types used by OMEMO trust updates and group hats, along with image and popover bindings in the GTK tests. Layout tests also check whether position measurements succeeded. The changes retain support for the existing Linux GTK baseline.
    • OMEMO key publication after receiving messages: Updates the published device bundle only after consumption of a one-time key is safely saved. Concurrent receives, failed publications and reconnects retain pending work and retry delays instead of leaving the published bundle out of sync with the local keys.
    • Trusted OMEMO session recovery: Eligible live legacy-OMEMO failures can send a fresh encrypted handshake to the same trusted device in direct chats and eligible private groups whose participants can be identified. A repair deferred by a temporary room or connection change can be sent later without repeatedly replacing the session. This does not recover the contents of an already failed message.
    • Encrypted group history and device readiness: Corrects historical private-group sender checks and recipient-readiness updates. Temporary device-bundle failures can be retried, while stale replies and changes in account, room membership or trust cannot complete an obsolete operation.
    • Trust changes in existing conversations: Accepting or rejecting a key updates the visibility of messages tied to that exact account and fingerprint. Historical trust indicators use the recorded key identity. Older hidden messages without a recorded fingerprint stay hidden with an explanation; changing trust does not create new-message notifications or bring back cleared history.
    • Encrypted group recipients: Private-group messages wait for an actual participant's encryption session instead of being considered sendable with only the user's own devices. If no trusted participant device is available, the chat explains what needs attention.
    • Readable encryption errors: Undecryptable messages and their chat-list previews use translated diagnostics. Failed sends explain missing room membership, trusted devices or incompatible encryption settings. Ordinary received text is not mistaken for a local error.
    • Missing group history after rejoining: Resets the room's live archive cursor for a new visit and only resumes tracking new messages after catch-up succeeds. A complete response to a limited archive query no longer hides older available messages. Existing archive coverage metadata is rebuilt without deleting local messages or keys.
    • Mentions after restart and history loading: Saves mention classification with the message and keeps it scoped to the receiving account and room. Chat markers, unread lists and notifications use the same result across restarts, archived messages, edits and nickname changes, without needing a chat switch to refresh. Full Unicode nicknames and explicit mention references are recognized, while quoted reply text does not create a false mention.
    • Pinned chats in the compact sidebar: Pinned conversations retain a visible pin badge when the chat list is collapsed to contact pictures, alongside unread, mute and group indicators.
    • Multiline message input and restored controls: Keeps attachment, recording, emoji and send controls aligned when a draft spans several lines. Controls in the initially restored chat refresh as its connection and permissions become available. Switching chats preserves draft formatting, cursor and selection; nickname completion replaces only the word at the cursor. Native text context menus open without stale popover state.
    • Reactions, previews and narrow chat content: Reaction buttons stay beside one another and wrap when needed. Website preview images retain their full aspect ratio. Images, files, call rows and previews respect the available chat width instead of forcing the window wider or clipping their controls.
    • Member-list refresh and search: An initially empty participant list updates when members arrive. Search handles Unicode names consistently, and reopening a populated list keeps the fast cached path without requiring a new network fetch.
    • Chat font settings: A saved font that is no longer installed remains visibly identified and can be reset to System default. Updating the font list or reopening settings no longer silently rewrites the selection. Long font names are shown as plain text; Windows follows its native interface font when available, with Segoe UI as a fallback.
    • Provider selection and registration fallback: Offers the provider's registration website when a server refuses in-app registration. Updating the bundled provider snapshot validates a candidate before replacing the last usable list, so an incompatible download cannot erase it.
    • Windows Tor build and test setup: Declares the Windows SDK level needed for owned-process cleanup and includes the required crypto library in the noninstalled Tor-startup test's library search path.
    • IBus package validation: Recognizes compatible library aliases without falsely rejecting a usable Linux package runtime.
    • Tor startup and recovery: Account login waits for the local Tor listener, successful bootstrap and the current proxy port. Restarting or stopping Tor cancels stale starts and callbacks. The Tor switch remains usable during bridge changes so users can stop a failed connection attempt.
    • Shutdown of bundled Tor transports: DinoX waits for its own Tor and Lyrebird process tree to stop. Linux process groups and Windows Job Objects preserve unrelated services, including other Tor instances; tray exit timers allow plugin cleanup to finish.
    • Flatpak tray fallback: The existing alternative StatusNotifierWatcher has its required targeted permission. Package checks also reject launchers that disable the GTK accessibility backend.
    • OpenPGP history after switching encryption: Older XEP-0374 messages from the account's own archive can be read after switching the direct chat to OMEMO. They retain their original encryption label and use the account's stored sender key, with signature, identity and recipient checks; loading history does not switch the current chat mode or start key discovery.
    • Tor helpers in local Linux builds: Keeps the pinned Tor, Lyrebird and GeoIP files outside the disposable Meson build directory, so release preparation does not remove WebTunnel support. The preparation command reuses a complete verified runtime; normal application builds do not download helper programs.
    • Windows sticker folder imports: Recognizes Windows image file types when importing a sticker folder instead of reporting a folder containing usable images as empty.
    • Windows binding corrections: Uses correctly typed backup-fingerprint and webhook-retry lists, native audio-player popover bindings and binary HTTP test responses, avoiding invalid pointer and value conversions during Windows compilation.
    • Narrow-window chat transitions: Coordinates initial message rendering with the GTK frame clock and waits for a usable viewport before loading more history. Reaction emoji menus are created on demand; call subtitles avoid repeated layout searches. The compact sidebar no longer forces a blocking rebuild at the start of the chat transition.
    • Conversation details: Avoids constructing hidden detail pages while opening a contact or room from either the sidebar or chat menu, reducing the opening delay and stale menu state.
    • Encryption controls and device actions: Context-menu shortcuts open the selected conversation's encryption page directly. Composer controls show the current encryption and trust state; trusted and verified remain distinct. Device-key actions have visible buttons, inactive-device removal is clearly marked, and destructive confirmation explains the next action.
    • Contact/group dialogs and translations: Equal-sized action buttons, narrower group selection, completed German labels and activity plurals, and Unicode-aware search improve contacts and rooms, including Cyrillic names.
    • Delayed ICE acknowledgements: A written transport-info IQ without a timely response no longer tears down an otherwise connected native call. Native ICE determines connectivity; the missing acknowledgement is a debug diagnostic, while actual send failures remain errors.
    • Linux packaging: Pins the qualified VP8 decoder runtime across package formats, includes libunbound and its runtime checks, uses the GNOME SDK's Expat when building Flatpak Unbound, and preserves the Vision worker bytes required by its size/hash manifest checks.
    • Repeatable interop and Windows checks: Retains bounded native/mixed-client call fixtures, source/identity tracking and cleanup checks. Android-only Monocles fixtures live in the Monocles fork. Windows builds explicitly run DNSSEC/DANE, SASL/TLS, reconnect and account-isolation checks. Login-protection UI checks run in an interactive desktop; test programs and fixture keys are excluded from portable packages. The Windows compiler fixes also cover the DNS-over-HTTPS ALPN binding and completion of asynchronous MQTT reconnects.

    Security

    • Account login downgrade protection: Validates SCRAM mechanism/binding hashes (XEP-0474) and negotiated TLS versions (XEP-0515). Confirmed SCRAM use is saved per account and prevents later PLAIN fallback. PLAIN-only servers require explicit permission in account settings, including for existing accounts after upgrade; TLS remains mandatory. Invalid proofs and security failures have distinct German and English messages on Linux and Windows.
    • Tor reconnect privacy: Disabling an account's SOCKS5 override while global Tor is enabled but not ready retains the override and reports the wait state, instead of reconnecting directly.
    • Private profile fields: Fields excluded from public access are not additionally published through unrestricted legacy vCard-temp. Asynchronous profile loads and saves use an account snapshot and reject responses after switching accounts.
    • OpenPGP keyring isolation: A missing or unavailable DinoX GnuPG directory produces an error instead of falling back to the operating system's default keyring. Linux and Windows continue to use DinoX's own user-data keyring.
    • Scoped key and backup cleanup: Key revocation/deletion is blocked while another account uses that local key. Key-related server-backup cleanup verifies that the backup belongs to the selected key, keeps unrelated/multi-key backups, and preserves a checked retry when cleanup fails rather than claiming success and discarding the local key.
    • Botmother disabled state: Removes the incoming-message listener and stops delayed bot starts, Telegram polling and webhook retries when disabled. Re-enabling creates a fresh runtime without duplicate listeners or background work from the previous activation.
    • Provider refresh through Tor: Manual provider-directory downloads use the enabled integrated Tor route. They wait or fail when it is unavailable and are cancelled when the route changes, without silently falling back to a direct connection.
    • OMEMO key and trust boundaries: One-time key numbers remain reserved after use and across restarts, preventing their reuse for different keys. Recovery and key-management actions recheck the exact account, device identity and trust state; private-group sender checks recheck the room's participant identity information. Stable builds continue to use legacy OMEMO; the OMEMO 2 path remains disabled.
    • Asynchronous send targets: File choices, recordings, stickers and location dialogs retain their original account and conversation and recheck current send permissions. Direct transfers in private messages to room participants also retain the original participant identity across retries, preventing a chat switch or nickname reuse from redirecting a send.
    • History deletion boundaries: Archive retrieval continues to respect panic wipes, cleared history and message expiry. Excluded archived messages are rejected before decryption, including if the policy changes while an earlier message-processing step is waiting.
    • Unavailable Tor stays selected: Tor startup failures, exhausted retries and bootstrap timeouts keep Tor enabled and its XMPP accounts offline. A direct connection requires the user to turn Tor off; an explicit SOCKS5 override remains independent.
    • Archived group identities and privacy: Historical group senders are resolved from authenticated archive or encryption evidence instead of whoever currently uses the same nickname. Real-address links are stored only while the room's current disclosure rules allow them.
    • OMEMO 2 preparation, still disabled: The inactive OMEMO 2 path also checks the account and encrypted sender/recipient context and discards unauthenticated outer text in key exchanges. Its own-key publication and retry handling have additional safeguards; these changes do not enable OMEMO 2 in stable builds.

    Known issues

    • Windows sizing diagnostic: An intermittent GTK minimum/natural-height warning remains reported on Windows. Its exact trigger has not been confirmed; the reported case did not restrict normal use.
    • Repeated file drops with GTK/X11: Repeated dragging from some GTK3 sources can trigger GTK's gdk_drop_set_actions assertion and prevent later drops. This was reproduced without DinoX; the existing root-window controller workaround does not resolve this separate backend failure. Use the attachment button if dragging stops working.

    Installation

    Ubuntu 24.04 / Linux Mint 22 (.deb)

    sha256sum -c dinox_2.3.2_amd64.deb.sha256
    sudo apt update
    sudo apt install ./dinox_2.3.2_amd64.deb
    

    Run in the download folder. APT installs the required runtime dependencies from your configured Ubuntu/Mint repositories.
    This package is not a Debian Trixie binary; use AppImage or Flatpak there. Do not force installation or add Ubuntu repositories to Debian.

    AppImage

    sha256sum -c DinoX-2.3.2-x86_64.AppImage.sha256
    chmod +x DinoX-2.3.2-x86_64.AppImage
    ./DinoX-2.3.2-x86_64.AppImage
    

    The matching .AppImage.sources.tar.xz file is a separate compliance download.
    It is not required to install or run DinoX.

    Flatpak

    sha256sum -c dinox-2.3.2-x86_64.flatpak.sha256
    # Required runtimes are resolved automatically from the bundle metadata.
    flatpak install --user ./dinox-2.3.2-x86_64.flatpak
    flatpak run im.dinox.dinox
    

    Build from Source

    (
    set -e
    sha256sum -c dinox-2.3.2.tar.gz.sha256
    tar xf dinox-2.3.2.tar.gz
    cd dinox-2.3.2
    # Install the normal distribution development packages from docs/internal/BUILD.md.
    test "$(uname -m)" = x86_64
    bash scripts/prepare-linux-source-build-deps.sh
    export DINOX_LIBWEBRTC_RUNTIME_ROOT=$PWD/.vendor-deps/libwebrtc-m152-linux-x86_64-runtime
    export DINOX_LOCAL_LIBOMEMO_C_ROOT=$PWD/.vendor-deps/linux-source-deps
    export PKG_CONFIG_PATH=$DINOX_LOCAL_LIBOMEMO_C_ROOT/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}
    ./scripts/check-libwebrtc-linux-runtime.sh "$DINOX_LIBWEBRTC_RUNTIME_ROOT"
    meson setup --wipe --buildtype=debugoptimized --prefix=/usr build -Dlocal-libomemo-c-root="$DINOX_LOCAL_LIBOMEMO_C_ROOT" -Dplugin-mqtt=enabled -Dplugin-rtp=disabled -Dplugin-google-webrtc=enabled -Dgoogle-libwebrtc-wrapper=enabled -Dgoogle-libwebrtc-runtime-root="$DINOX_LIBWEBRTC_RUNTIME_ROOT" -Dgoogle-libwebrtc-test-oracle=false -Dgoogle-libwebrtc-tests=false -Dlocation-sharing=enabled -Dplugin-http-files=enabled -Dplugin-ice=enabled -Dplugin-omemo=enabled -Dplugin-openpgp=enabled -Dplugin-notification-sound=enabled
    ./scripts/build.sh
    ./build/main/dinox --version
    # For Tor/obfs4/WebTunnel, first follow the optional private Tor runtime section in BUILD.md.
    DINOX_TOR_DATA_DIR="$PWD/.vendor-deps/linux-tor-runtime/share/tor" ./build/main/dinox
    )
    
    Downloads