• v2.2.8 cdde4eeb7a

    DinoX v2.2.8
    All checks were successful
    Build / Validate Manual Selection (push) Has been skipped
    Build / Release Preflight (push) Successful in 47s
    Build / Mirror AppImage Runtimes (push) Has been skipped
    Build / Core Build (push) Successful in 43m38s
    Build / Build AppImage (push) Successful in 1h5m34s
    Build / Build Flatpak (push) Successful in 15m17s
    Stable

    Ralf released this 2026-08-23 15:39:15 +02:00 | 62 commits to master since this release

    DinoX v2.2.8

    Modern XMPP client with extended features.

    What's New

    Added

    • Private-room audio and video group calls: Joined private rooms can start and receive standards-based MUJI calls, add eligible participants from an active call, and keep one shared call alive as individual peers join or leave.
    • Manual provider-directory refresh: Account creation still opens immediately with the bundled offline provider snapshot. A refresh action can explicitly download, validate, cache, and display the newest directory without making dialog startup depend on the network; failures leave the usable bundled or cached list intact.
    • Manual version check: The application menu can check for a newer DinoX release on demand. It understands complete semantic versions across future major releases, reports when no update exists, and offers a release link only when a newer version is available; no automatic check or redirect occurs.

    Changed

    • Shared Google/libwebrtc call worker: Existing one-to-one and private-room calls reuse one lazily created external media worker. Each MUJI participant adds only a peer connection, while group video uses one worker-owned capture and optional effect pipeline for all peer sessions, with exact full-JID ownership and bounded publisher handover instead of opening one worker or camera path per participant.
    • Google/libwebrtc ABI 38 / IPC 8 / video ring 6: Linux and Windows packages now use immutable, content-addressed ABI 38 runtimes carrying local-source frame diagnostics, five independent bounded frame slots, and the shared-pipeline fan-out capability required by group video. Older ABI 37 assets remain available for reproducible builds of previous source tags.
    • Strict package validation: Production package builds no longer include WebRTC smoke-only sources, while dedicated strict test builds still compile and run the complete Linux and Windows smoke suites. This removes false unused-method release failures without weakening warning gates.

    Fixed

    • Interoperable group-call signaling: XEP-0272 ready presences use the standard MUJI content namespace and required content creator, preserve the room's selected conference content names on every associated Jingle leg, and keep those wire identities separate from libwebrtc's internal SDP MIDs; XEP-0482 groupchat actions use only the room-assigned XEP-0359 stanza ID, wait for the authoritative MUC echo when necessary, reject ambiguous duplicate IDs, and scope accept, reject, retract, and left actions to the exact account, room, target, and resource.
    • Group-call lifecycle races: Bounded preparing waits, private-room ownership checks, transactional Direct-to-MUJI rollback, exact peer teardown, cached-membership fencing, and standard MUJI facet removal prevent duplicate calls, stale joins, accidental room destruction, and terminal actions leaking to unrelated invitees.
    • Private-room call controls: The title-bar audio/video control now recognizes the Google/libwebrtc plugin's separate direct-call and MUJI engine facets, so eligible joined private rooms expose their call actions instead of incorrectly reporting that no group-call engine is available.
    • One-to-one call isolation: Private-room orchestration keeps direct JMI/Jingle content names, payload mapping, media controls, worker ownership and teardown behavior isolated, with dedicated regression coverage for concurrent direct and group calls.
    • File-send target ownership: File-selection callbacks and completed voice or video recordings remain bound to the conversation in which they started, preventing a later conversation switch or overlapping asynchronous action from sending to the wrong contact or dereferencing stale UI state.
    • Malformed HTTP upload servers: XEP-0363 slot URLs and received HTTP URLs are validated as usable HTTP(S) network addresses before libsoup message construction. Invalid or incomplete server responses now fail as a transfer error instead of reaching a crash-prone path, while concurrent HTTP and Jingle transfers keep independent cancellation state.
    • Room-wide history deletion: Normal and private group-chat clear-history dialogs now offer separate local and global actions. Global deletion retracts each eligible own message with XEP-0424 while received or non-retractable items are removed only locally; the confirmation text no longer repeats the same irreversible-action warning.
    • Linux accessibility-bus diagnostics: Debian and AppImage launchers now test whether the advertised AT-SPI bus actually responds instead of trusting a stale socket, preserve a healthy accessibility bridge, and constrain optional per-user repair to the exact accessibility processes.
    • Reproducible AppImage source staging: Corresponding sources are fetched directly from the configured pinned Ubuntu snapshot, avoiding obsolete archive-pool URLs while retaining exact source-version and checksum validation.

    Installation

    Ubuntu 24.04 / Linux Mint 22 (.deb)

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

    AppImage

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

    Build from Source

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