-
DinoX v2.2.9
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 44m48sBuild / Build AppImage (push) Successful in 1h5m10sBuild / Build Flatpak (push) Successful in 37m13sreleased this
2026-08-25 05:14:44 +02:00 | 55 commits to master since this releaseDinoX 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_*.debAppImage
sha256sum -c DinoX-2.2.9-*.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.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.dinoxBuild 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
-
Source code (ZIP)
3 downloads
-
Source code (TAR.GZ)
5 downloads