• v2.3.0 4709ef221f

    DinoX v2.3.0
    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 48m8s
    Build / Build AppImage (push) Successful in 1h11m12s
    Build / Build Flatpak (push) Successful in 41m13s
    Stable

    Ralf released this 2026-08-26 20:43:41 +02:00 | 21 commits to master since this release

    DinoX v2.3.0

    Modern XMPP client with extended features.

    What's New

    Highlights

    • Reliable calls across devices and reconnects: One-to-one Google/libwebrtc calls now implement the current XEP-0353 signalling lifecycle, including ringing, final call state, simultaneous-call tie-breaking, active-device migration and passive reconstruction from Carbons and MAM. Archived signalling never starts media or rings again, and private-room MUJI calls remain on their separate lifecycle.
    • Room avatars before joining: Bookmarked rooms can obtain and verify their XEP-0486 avatar before the first join without delaying room lists or starting unbounded network work.

    Added

    • Room avatars before joining: Bookmarked rooms can obtain their XEP-0486 avatar from muc#roominfo_avatarhash and the room vCard before the first join. Image bytes are accepted only when their SHA-1 hash was advertised by the room. Status code 104 refreshes changed or removed avatars after joining.
    • Complete XEP-0353 0.8.0 signalling: One-to-one Google/libwebrtc calls support ringing and finish alongside the existing proposal actions, including final reasons, migration metadata and the required message-storage hints. Malformed or conflicting events are rejected while known legacy wire variants remain accepted for interoperability.

    Changed

    • Bounded room-avatar discovery: Pre-join discovery runs one room at a time after a short low-priority delay, deduplicates account/room work, caps server-provided representations, and fences disconnects and superseded results. Bounded batches refill from the authoritative bookmark set instead of dropping rooms above the active queue limit, and reconnects discard freshness state from the previous stream. Image decoding, hashing and encrypted cache I/O stay off the UI thread; conference and member lists continue to read only from the local avatar cache.
    • Room-avatar interoperability: Live ejabberd and Gajim tests cover discovery before joining, joined-room refreshes, publication and removal. The smoke test showed no visible UI stalls; it was not a large-room timing benchmark.
    • Persistent multi-device call state: Call ownership is scoped by account, peer and session ID, survives restarts, and expires bounded recovered proposals. MAM and Carbon replay is ordered, deduplicated and passive; another own device accepting or ending a call settles the local state without allocating a media worker. The production call engine remains Google/libwebrtc, with RTP disabled.

    Fixed

    • Attachment actions after transfer completion: File, image and video rows retain their exact backing message across restart and archive replay. Reply, reaction and delete actions update as soon as the message identifiers become available instead of remaining unavailable or targeting transport metadata.
    • Visible attachment controls on Windows: Disabled symbolic message-action icons remain visible in compact attachment toolbars, while their unavailable state is still clearly dimmed.
    • Inline MP4 playback startup: Preview generation and playback use separate generation ownership, bounded startup timeouts and deterministic temporary-file cleanup. Starting playback while a thumbnail is still being prepared no longer leaves a stale pipeline, and Windows packages now verify the complete MP4/H.264/AAC playback runtime.
    • Contact conversation selection: Opening the contact chooser no longer treats the first visible contact as an implicit selection. The start button becomes available only after an explicit selection, avoiding a disabled button for a row that merely appeared selected.
    • Legacy GTK file drops on X11: DinoX removes only GTK's conflicting private root-window drop controller on affected native X11 versions. The application COPY target, portal drops, Wayland and Windows behavior remain unchanged.

    Known issues

    • Repeated file drops on X11: The open GTK issue #3755 can log a gdk_drop_set_actions critical from the second file drop onwards. File sending continues normally and DinoX release launchers do not make GLib criticals fatal. Wayland and Windows are not affected by this X11-specific GTK bug; developer runs that explicitly enable fatal criticals can terminate on the assertion.

    Installation

    Ubuntu 24.04 / Linux Mint 22 (.deb)

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

    AppImage

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

    Build from Source

    (
    set -e
    tar xf dinox-2.3.0.tar.gz
    cd dinox-2.3.0
    # 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