• v2.2.9 9dfd85fa8a

    DinoX v2.2.9
    All checks were successful
    Build / Validate Manual Selection (push) Has been skipped
    Build / Release Preflight (push) Successful in 55s
    Build / Mirror AppImage Runtimes (push) Has been skipped
    Build / Core Build (push) Successful in 44m48s
    Build / Build AppImage (push) Successful in 1h5m10s
    Build / Build Flatpak (push) Successful in 37m13s
    Stable

    Ralf released this 2026-08-25 05:14:44 +02:00 | 55 commits to master since this release

    DinoX v2.2.9

    Modern XMPP client with extended features.

    What's New

    Added

    • Read-state synchronisation between devices: An optional XEP-0490 setting synchronises the latest displayed position through the account server for one-to-one chats, group chats, and private MUC messages. This remains separate from contact-visible read receipts, uses server assistance only when advertised, and otherwise falls back to regular private PEP storage.
    • Private-room read receipts: Read receipts can now be configured per private room. Sent messages show how many verified room participants have read them without folding different readers into one room-wide state.

    Changed

    • Stable displayed-marker references: XEP-0333 markers use sender stanza IDs for one-to-one chats and MUC private messages, and room-assigned XEP-0359 IDs for group-chat messages. Read pointers move forward only. Early one-to-one and MUC-private markers are applied after the matching live or archived message appears, while unknown group-chat targets are rejected.
    • Bounded avatar loading: Avatar cache reads run outside the GTK main thread, duplicate requests share one load, and memory use is bounded. Large rooms fetch participant avatars on demand with bounded prefetching instead of starting an unbounded burst.

    Fixed

    • Account avatar publication: The independent XEP-0084 and vCard/XEP-0153 publication paths are coordinated across initial connection and reconnect, including directed room presence. Transient vCard fetch failures no longer overwrite the stored avatar, and interrupted or superseded publication attempts cannot restore stale state.
    • Avatar state isolation: Avatar assignments, source priorities, waiters, observers, and room occupants remain scoped to the exact account and JID, while validated image bytes are deduplicated by content hash. Live room updates cannot be replaced by an older membership snapshot. Explicit removals clear the mapped avatar, while invalid metadata is ignored without changing verified state.
    • Delivery and read indicators: Receipts continue to match when a server rewrites an outer stanza ID, when a receipt arrives before its message, or when a MUC echo supplies the authoritative room ID.
    • Private-room encryption startup: Incoming encrypted messages now wait for an already-running room-information query before applying the conversation encryption policy, instead of being discarded while a newly opened private room still temporarily reports no encryption.
    • Read-receipt privacy and lifecycle: Delivery and displayed responses are limited to eligible, unblocked contacts or current room occupants. Malformed, ambiguous, cross-account, and wrong-room references are rejected; reconnects fence stale operations, and remote read-state updates no longer clear unrelated notifications.
    • Persistent read pointers: Message and content-item read positions are stored together and reconciled when an attachment item arrives after its message, avoiding read-state regressions after restart or history catch-up.

    Installation

    Ubuntu 24.04 / Linux Mint 22 (.deb)

    sha256sum -c dinox_2.2.9_*.deb.sha256
    sudo apt install ./dinox_2.2.9_*.deb
    

    AppImage

    sha256sum -c DinoX-2.2.9-*.AppImage.sha256
    chmod +x DinoX-*.AppImage
    ./DinoX-*.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.2.9-x86_64.flatpak.sha256
    # Required runtimes are resolved automatically from the bundle metadata.
    flatpak install --user ./dinox-2.2.9-x86_64.flatpak
    flatpak run im.dinox.dinox
    

    Build from Source

    (
    set -e
    tar xf dinox-2.2.9.tar.gz
    cd dinox-2.2.9
    # 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-m150-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 --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
    DINOX_TOR_ALLOW_SYSTEM_FALLBACK=1 ./build/main/dinox
    )
    
    Downloads