-
DinoX v2.3.0
StableAll checks were successfulBuild / Validate Manual Selection (push) Has been skippedBuild / Release Preflight (push) Successful in 55sBuild / Mirror AppImage Runtimes (push) Has been skippedBuild / Core Build (push) Successful in 48m8sBuild / Build AppImage (push) Successful in 1h11m12sBuild / Build Flatpak (push) Successful in 41m13sreleased this
2026-08-26 20:43:41 +02:00 | 21 commits to master since this releaseDinoX 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_avatarhashand 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
ringingandfinishalongside 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_actionscritical 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_*.debAppImage
sha256sum -c DinoX-2.3.0-*.AppImage.sha256 chmod +x DinoX-*.AppImage ./DinoX-*.AppImageThe matching
.AppImage.sources.tar.xzfile 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.dinoxBuild 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