Releases: rallep71/dinox
DinoX moved to Forgejo
DinoX has moved from GitHub to Forgejo.
This GitHub repository is now only a historical archive. New source code, packages, issues and pull requests are maintained here:
- Website: https://dinox.im
- Source code: https://git.dinox.im/dinoxim/dinox
- Releases and downloads: https://git.dinox.im/dinoxim/dinox/releases
- Issues: https://git.dinox.im/dinoxim/dinox/issues
- Pull requests: https://git.dinox.im/dinoxim/dinox/pulls
Please use the Forgejo release page for DinoX 2.0.0 and later packages.
DinoX v1.1.8.1
DinoX v1.1.8.1
Modern XMPP client with extended features.
What's New
Fixed
- Call Termination: Fixed a crash that occurred when terminating a call.
- Video Compatibility: Improved video encoding compatibility for calls.
- UI Improvements: Fixed various UI bugs including conversation list selection issues and edge cases.
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.8.0-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.8.0.tar.gz
cd dinox-1.1.8.0
meson setup build
ninja -C build
./build/main/dinoxDinoX v1.1.8.0
DinoX v1.1.8.0
Modern XMPP client with extended features.
What's New
Fixed — Windows Database Reset
- Race condition in database reset: On Windows, two separate batch files (delete DBs + restart dinox.exe) ran in parallel with the same ~2s delay — dinox.exe often restarted before files were deleted, making the reset appear to do nothing (all old OMEMO keys and messages still present)
- Fix: Delete + restart combined into a single sequential batch file: wait for process exit → delete all DB files → then restart dinox.exe
- Factory reset fixed too: Same race condition pattern fixed for factory reset on Windows
Fixed — Build & CI
- AppImage build fix: Removed
--no-netflag from appimagetool — the "continuous" release (commit 5735cc5, 2023-03-08) does not support this option, causing both x86_64 and aarch64 CI builds to fail withOption parsing failed: Unknown option --no-net
Stats
- 2 commits, 2 files changed
- Critical Windows bug fix: database/factory reset now works reliably
- CI fix: AppImage builds restored
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.8.0-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.8.0.tar.gz
cd dinox-1.1.8.0
meson setup build
ninja -C build
./build/main/dinoxDinoX v1.1.7.9
DinoX v1.1.7.9
Modern XMPP client with extended features.
What's New
Added — Windows Sound Notifications
- Cross-platform sound notifications: Windows now uses GStreamer playbin with bundled WAV files (GResource); Linux libcanberra path completely unchanged
- 4 notification sounds: message.wav, incoming-call.wav, outgoing-ringback.wav, alert.wav — embedded as GResource, played via
resource://URIs - 3 independent playbin channels: Message, ringtone, and ringback can play concurrently without interrupting each other
- MQTT CRITICAL alert sound: Alert playbin in MQTT plugin plays alert.wav on CRITICAL priority messages
- Toast audio silenced: Windows Toast notifications now use
silent="true"— sound comes from GStreamer plugin instead of brokenms-winsoundevent
Performance — Windows Video Message Recording
- GStreamer MF warm-up thread: Background thread at startup pre-loads Media Foundation DLLs (mfvideosrc, mfh264enc, wasapi2src, avenc_aac, mp4mux) — first video recording starts in ~2s instead of ~8s
- Faster video message thumbnails: Improved thumbnail display speed
Fixed — Windows Distribution
- Missing GStreamer
gioplugin: Added toupdate_dist.sh— required forresource://URI playback of bundled sounds - Video bitrate optimized: 1500→800 kbps for mobile-friendly video messages, receive REMB 256→800
Fixed — Build & CI
- AppImage build: Added
--no-netto appimagetool — decouples AppImage build from website availability - README images: Restored appdata screenshots in docs/
Cleanup
- Debug warnings removed: All TIMING warnings from video_recorder.vala (18 warnings) and voice_processor_native.cpp
g_warning→g_debug - Diagnostic warnings→debug(): All remaining diagnostic
warning()calls converted todebug()across RTP and video recording
Stats
- 7 commits, ~15 files changed
- Major new feature: Windows sound notifications via GStreamer
- Major performance improvement: MF DLL pre-warming (~6s faster first video recording)
- Windows distribution fix: gio plugin for resource:// URI support
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.7.9-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.7.9.tar.gz
cd dinox-1.1.7.9
meson setup build
ninja -C build
./build/main/dinoxDinoX v1.1.7.8
DinoX v1.1.7.8
Modern XMPP client with extended features.
What's New
Added — Audio/Video Device Settings
- Preferences page for audio/video devices: New "Audio & Video" tab in Preferences with persistent device selection for microphone, speaker, and camera — survives app restarts
- Device deduplication: Filters duplicate audio/video devices on Windows where WASAPI2 and legacy APIs expose the same hardware under different names
- DINOX_LOG_FILE environment variable: Set this on Windows to redirect all debug logging to a file without modifying shell environment
Fixed — Audio/Video Calls (Windows)
- Audio send broken: Decoupling queue added in
create()prevents audio pipeline stall; device element leak indestroy()fixed - WASAPI2 S16LE capsfilter: Audio capsfilter must specify
format=S16LEexplicitly for WASAPI2 compatibility on Windows - audioresample in all playback paths: Added
audioresampleto voice message and call playback pipelines — fixes sample rate mismatch with WASAPI2 - VoiceProcessor skipped on Windows: WASAPI2 already handles AEC/NS/AGC — running DinoX VoiceProcessor on top caused double-processing artifacts
- Audio crackling reduced: rtpbin latency 100→150ms, Opus bitrate 24→48kbps, FEC status logging
- Video send bitrate: Initial 256→1500 kbps, floor 128→256 kbps — fixes REMB chicken-and-egg problem where receiver never sends REMB until it gets video
- mfh264enc NV12 format: Windows Media Foundation H.264 encoder now receives correct pixel format
- CRT invalid-parameter-handler crash: Suppressed MSVC CRT dialog at startup via IAT-patch of GLib's
MessageBoxW - Explicit WASAPI2/MF sources: Voice/video messages use
wasapi2src/mfh264encdirectly on Windows instead of auto-detection
Fixed — Audio/Video Calls (Linux)
- TOCTOU race in deep_copy_buffer_probe: DMA-BUF memory pinned during copy to prevent PipeWire SIGSEGV from recycled shared memory
- pipewiresrc EINVAL (-22): Source-side capsfilter with device-negotiated caps fixes PipeWire rejection of range-based caps
- Video buffer deep copy: C pad probe replaces invalid
copy-buffersqueue property — prevents SIGSEGV from recycled PipeWire shared memory - Video recorder fixed caps: Uses 640×480@30fps instead of ranges to prevent backwards caps propagation to pipewiresrc
Fixed — Audio/Video Calls (Both Platforms)
- Video call stability: Multiple SIGSEGV fixes in call state sync, Jingle correctness, senders negotiation, teardown race
- Video message stop recording: EOS via blocking pad probes —
stop_recordingnow ~70ms instead of 3–20s timeout - H.264 encoder caching: Probe timeout reduced from 2s→500ms, encoder element cached for reuse
- Video message quality: Reduced to 640×480@24fps with
add-bordersto prevent stretching - Voice message click eliminated: Smooth ramp-up for recording start
- Comprehensive null-dereference guards: RTP pipeline guards for device changes during active calls
- Diagnostic timers removed: Timer callbacks causing SIGSEGV on pipeline teardown eliminated
Performance — GStreamer Pipeline Linking
- TEMPLATE_CAPS: Skip expensive CAPS queries during pipeline linking
- NO_RECONFIGURE link flags: Prevent post-link caps cascade
- PadLinkCheck.NOTHING: Explicit pad names bypass all caps queries — Windows pipeline setup significantly faster
Fixed — SOCKS5 Proxy / Tor
- SOCKS5 proxy overhaul: Tor/SOCKS5 coexistence fixed, HTTP proxy bypass corrected
Fixed — OMEMO
- Partial MUC delivery: Allow OMEMO message delivery when some MUC participants are unreachable instead of failing the entire send
Fixed — Windows Stability
- Panic wipe / DB reset: Batch launch broken on Windows portable — fixed
- GStreamer plugin list: Clean plugin dir before copy, remove deprecated directsound, add missing plugins (videotestsrc, audiotestsrc, audiomixer, videoflip, audiorate, level, wavenc)
- Shell pipe/redirect preserved: Console attach no longer breaks pipe and redirect operators
- devices_changed null guard: Prevent crash when monitor reports null media device
Changed — Windows CI
- gst-plugins-ugly: Added to CI packages (x264, voaac codecs)
- cantarell-fonts: Added to CI packages (Adwaita font fallback)
Stats
- 62 commits, 43 files changed across RTP/calls, GStreamer, Windows platform, OMEMO, proxy
- Major new feature: Audio/Video device preferences with persistent selection
- Major performance improvement: GStreamer pipeline linking (TEMPLATE_CAPS, NO_RECONFIGURE)
- 20+ crash fixes (SIGSEGV, null dereference, race conditions)
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.7.8-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.7.8.tar.gz
cd dinox-1.1.7.8
meson setup build
ninja -C build
./build/main/dinoxDinoX v1.1.7.7
DinoX v1.1.7.7
Modern XMPP client with extended features.
What's New
Fixed — Audio/Video Calls (Linux + Windows)
- CRITICAL: Echo probe null dereference (
voice_processor.vala):echo_probe.delaycalled whenecho_probe == nullinstart()→ SIGSEGV. Now uses safe conditional:int initial_delay = echo_probe != null ? echo_probe.delay : 200; - CRITICAL: SRTP crypto_session destroy race (
stream.vala):crypto_session = nullwas set BEFORErecv_rtp.end_of_stream(), causing incoming packets to hit null SRTP decryptor. Moved nulling AFTER EOS. - CRITICAL: on_send_rtp_eos/on_send_rtcp_eos null crash (
stream.vala): EOS callbacks could fire aftersend_rtp/send_rtcpwas already nulled. Added null guards. - HIGH: Video caps.get_size() crash (
video_widget.vala):input_caps_changed()calledcaps.get_size()without checking for 0 → out-of-bounds access. Added size check. - HIGH: EOS timeout too short (
audio_recorder.vala): 500ms EOS timeout was insufficient for MP4 faststart file rewrite on slow storage → truncated voice messages. Increased to 3000ms. - Windows: Missing H.264 encoder (
video_recorder.vala): Windows Media Foundationmfh264encadded as first H.264 encoder in fallback chain (before VAAPI/VA/x264/avenc/openh264). - GStreamer pipeline stability (
plugin.vala,codec_util.vala):pause()kept as safe no-op; pad probe added inupdate_rescale_caps()to prevent capsfilter race.
Fixed — SOCKS5 Proxy / Tor (Linux + Windows)
- CRITICAL: Tor DNS anonymity leak (
stream_connect.vala): SRV DNS lookups were performed locally BEFORE connecting through Tor proxy — ISP DNS sees which XMPP server user contacts. Fix: skip SRV lookups whenproxy_type == "tor", connect directly todomain:5222/domain:443through the Tor circuit. - CRITICAL: is_transitioning permanent deadlock (
tor_manager.vala): Ifstart_tor()/stop_tor()threw an exception,is_transitioningflag was never reset → Tor could never be toggled again. Fixed with try-finally inset_enabled(),set_bridges(),update_use_bridges(),update_firewall_ports(). - HIGH: lyrebird.exe zombie processes (
tor_controller.vala): Windows only —lyrebird.exe(pluggable transport bridge) was not killed on Tor restart, accumulating zombie processes holding ports. Addedtaskkill /F /IM lyrebird.exeto the zombie killer instart().
Changed — Logging
- Quieter startup: Demoted 39×
message()calls todebug()inmain.vala,application.vala,muc_manager.vala— reduces noise in normal operation while keeping full diagnostics at debug level.
Fixed — URL Display
- Body-only URLs: Incoming messages containing only a URL in the body were displayed as broken file transfer offers instead of clickable text links.
Changed — Documentation
- README updates: startup instructions, SmartScreen removal, geolocation limitation, PipeWire migration plan
Stats
- 11 files changed across 4 subsystems (RTP/calls, Tor/proxy, XMPP core, UI)
- 6 AV bugs fixed (3 CRITICAL, 2 HIGH, 1 Windows-specific)
- 3 proxy bugs fixed (2 CRITICAL, 1 HIGH)
- Major security fix: Tor DNS leak prevention
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.7.7-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.7.7.tar.gz
cd dinox-1.1.7.7
meson setup build
ninja -C build
./build/main/dinoxDinoX v1.1.7.6
DinoX v1.1.7.6
Modern XMPP client with extended features.
What's New
Fixed — Windows: Font Rendering
- gtk-font-name: Was never set → GTK4 default
"Sans 10"→ fontconfig without alias rules resolved to random fonts (Microsoft Sans Serif). Now explicitly set to"Segoe UI 10"inGtk.Settingsandsettings.ini. - gtk-hint-font-metrics: Enabled (was false by default) → forces pixel-aligned glyph positioning for sharper text rendering.
- fontconfig fonts.conf: Generated in
update_dist.shwith proper alias mappings: Sans→Segoe UI, monospace→Consolas, serif→Times New Roman, system-ui→Segoe UI. Plus font rendering defaults (antialias, hinting, hintslight, rgb, lcddefault). - Avatar letters: Used generic
"Sans"font family which resolved badly on Windows. Now uses"Segoe UI"on Windows via#if WINDOWSconditional.
Fixed — Windows: GDK Surface Assertions
gdk_surface_get_device_position: assertion 'GDK_IS_SURFACE (surface)' failed: Addedget_realized()guards at 6 critical code paths where motion events fired on widgets whose GDK surface was already destroyed (conversation switch, window close):conversation_view.vala:update_highlight()→pick()(primary crash source),on_leave_notify_event()chat_text_view.vala:queue_resize_if_needed()timeoutchat_input/view.vala:highlight_state_description()timeoutfile_image_widget.vala: motion leave handlervideo_player_widget.vala: motion leave handler
Fixed — Windows: Systray Context Menu
- Owner-drawn GDI painting removed: The right-click menu used
MF_OWNERDRAWwith raw Win32 GDI calls (Ellipse(),DEFAULT_GUI_FONT,GetSysColor()) — looked like Windows 98. - Native MF_STRING rendering: Now uses plain
MF_STRINGmenu items that Windows 10/11 renders natively with Segoe UI, ClearType, DPI scaling, and theme-aware colors (light/dark mode support). - Colored emoji indicators: Status circles provided by Unicode emoji (🟢🟠🔴⚪) already embedded in labels by
systray_windows.vala— no more custom GDI circle painting.
Fixed — Windows: Portable ZIP / CI Build
- GDK-Pixbuf loaders: Copied to wrong path (
dist/lib/instead ofdist/lib/gdk-pixbuf-2.0/) — image loading broken in portable builds. - loaders.cache: Had MSYS2 absolute paths (
/mingw64/lib/...) — regenerated withgdk-pixbuf-query-loadersfor portable relative paths. - Missing CI packages:
glib-networking(GIO TLS backend!),hicolor-icon-theme,adwaita-icon-themewere only transitively installed — now explicitly listed inwindows-build.yml. - MQTT plugin: Added
-Dplugin-mqtt=enabledto CI meson setup and all build documentation.
Fixed — Windows: Window Buttons + Prior Font Pass
- CSD window buttons: Positioned on the left side (Windows convention) via
headerbar-close-button-positionsetting. - Xft font settings: Initial hinting/antialiasing settings in
settings.ini(later superseded by the comprehensive font fix above).
Fixed — Windows: Icon Discovery
- hicolor index.theme: System
hicolor-icon-themeindex.themewas being overwritten by our sparse icon directory listing. Now preserves the system file so GTK4 icon discovery works correctly.
Fixed — MUC Reactions After Restart
- Broken reactions in group chats: After app restart or reconnect, reactions (XEP-0444) on MUC messages were silently dropped because the occupant→JID mapping was lost. Fixed the stanza-id lookup path.
Fixed — Encryption/Mark Icons After Avatar Refactor
- Missing icons: Encryption lock and delivery mark icons disappeared after the avatar defer refactor. Fixed icon loading path.
Fixed — Build Warnings
- abseil-cpp >= 20250814: New
absl::Nullable/absl::Nonnullannotations broke webrtc-audio-processing v2.1 build. CI now patches them out. - Various: Unused variable, const annotations, critical build warnings resolved across platforms.
Changed — Documentation
- WINDOWS_BUILD.md / WINDOWS_BUILD_EN.md: Added
-Dplugin-mqtt=enabledto all meson setup commands, mandatory clean rebuild instructions. - Obsolete files: Removed
windowsbuild.txt(superseded by comprehensive docs).
Stats
- 80+ commits, 50+ files changed
- Major areas: font rendering (8 files), systray modernization (1 file, -136 lines), CI hardening (2 files), GDK stability (5 files), icon fixes (3 files), MUC reactions (2 files)
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.7.6-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.7.6.tar.gz
cd dinox-1.1.7.6
meson setup build
ninja -C build
./build/main/dinoxVendored Dependencies
Third-party source tarballs mirrored here for CI reliability. freedesktop.org blocks GitHub Actions runners.
DinoX v1.1.7.5
DinoX v1.1.7.5
Modern XMPP client with extended features.
What's New
Fixed — Windows: App Still Exits After Unlock (GitHub #18 — continued)
- hold()/release() safety net: v1.1.7.4 reordered activate-before-close but the app STILL exits silently on Windows. Added
this.hold()at the start andthis.release()at the end of the entirefinish_post_unlock()transition — this guarantees GApplication use_count never reaches 0, regardless of Win32 message pump re-entry or window lifecycle timing. - Strategic debug messages: Added
message()calls throughoutfinish_post_unlock()and theactivatehandler so Windows users can provide exact diagnostic output showing where execution stops.
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.7.5-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.7.5.tar.gz
cd dinox-1.1.7.5
meson setup build
ninja -C build
./build/main/dinoxDinoX v1.1.7.4
DinoX v1.1.7.4
Modern XMPP client with extended features.
What's New
Fixed — Windows: App Exits After Unlock (GitHub #18)
- GApplication lifecycle race: The v1.1.7.2 fix (
hold()/release()around close→activate) was insufficient — on GDK-Win32,unlock_parent.close()synchronously destroys the window and re-enters the Win32 message pump, terminating the main loop beforeactivate()can create the MainWindow. Fix: callactivate()FIRST (creates MainWindow while unlock_parent is still alive), THENunlock_parent.close(). Removedhold()/release()entirely — GApplication always has ≥1 window, no use_count=0 gap. - libevent DLL naming: MSYS2 renamed
libevent-2-1-7.dll→libevent-7.dllin newer versions.update_dist.shnow lists both naming variants (libevent-7.dll,libevent_core-7.dll,libevent_extra-7.dll).
Fixed — Build (All Distros with GCC 13+)
- webrtc-audio-processing v2.1:
trace_event.husesuint8_t/uintptr_twithout#include <cstdint>— fails on GCC 13+ (openSUSE Tumbleweed, Fedora 39+, Ubuntu 24.04+, Arch).ci-build-deps.shnow auto-patches the header before building.
Fixed — Documentation (openSUSE)
- BUILD.md: Added
libomemo-c-develtozypper installlist - BUILD.md: Updated note —
ci-build-deps.shoverrides with fixed fork from rallep71/libomemo-c - BUILD.md: Added
libcanberra-develinstall example + build-from-source alternative
Installation
Flatpak (Linux)
# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//48
# 2. Install DinoX (replace ARCH with x86_64 or aarch64)
flatpak install dinox-1.1.7.4-ARCH.flatpakAppImage (Linux)
Download the .AppImage file, make it executable and run:
chmod +x DinoX-*.AppImage
./DinoX-*.AppImageWindows
Download and extract the .zip file. Run dinox.exe from the extracted folder.
Note: Windows builds are experimental. See the README for details.
Build from Source
1. Install system dependencies (Debian/Ubuntu):
sudo apt install build-essential meson ninja-build valac \
libgtk-4-dev libadwaita-1-dev libglib2.0-dev libgee-0.8-dev \
libsqlcipher-dev libsecret-1-dev libicu-dev libdbusmenu-glib-dev libgcrypt20-dev \
libgpgme-dev libqrencode-dev libsoup-3.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
libnice-dev libgnutls28-dev libsrtp2-dev libgeoclue-2-dev \
gstreamer1.0-plugins-good gstreamer1.0-pipewire cmake wget2. Build custom dependencies (webrtc-audio-processing 2.1, libnice 0.1.23, libomemo-c -- not available or too old in distro repos):
# Automated (builds all three):
./scripts/ci-build-deps.sh3. Build DinoX:
tar xf dinox-1.1.7.4.tar.gz
cd dinox-1.1.7.4
meson setup build
ninja -C build
./build/main/dinox