DinoX - Secure XMPP messenger for Linux and Windows with encrypted chat, calls, files, optional Tor, MQTT and automation APIs https://dinox.im
  • Vala 89.8%
  • Shell 4.6%
  • Python 3.4%
  • C 1.2%
  • Meson 0.6%
  • Other 0.3%
Find a file
rallep71 f939266393 Fix Jingle receive cancel/teardown path for Windows stability
Adjust receive-side Jingle file transfer cancellation and stream close behavior to avoid transport half-close races on Windows.

- Route received file cancel actions through JingleFileProvider so they terminate Jingle sessions instead of just cancelling local cancellables.
- Add FileManager.cancel_download with received-transfer handling and provider dispatch.
- Update file UI widgets (file + video) to call FileManager.cancel_download when available.
- In Jingle transfer stream wrapper, remove output-side close on InputStream.close/close_async; keep close as stream-finalization-only and emit completion.
- Keep stream ownership and transport teardown in Jingle Session/Content terminate path.
- Preserve close idempotency with guarded state in FileTransferInputStream.

Validation: meson compile -C build xmpp-vala (successful).
2026-06-08 17:30:38 +02:00
.github Remove Meson tests from package workflow 2026-06-06 09:23:12 +02:00
.guix/modules Clean public project metadata 2026-05-01 17:56:04 +02:00
ci/images chore: Release version 2.0.2 2026-06-04 22:37:16 +02:00
crypto-vala Fix libgcrypt initialization order 2026-06-05 07:36:37 +02:00
docs Point docs landing page to repository wiki 2026-06-08 17:30:38 +02:00
libdino Fix Jingle receive cancel/teardown path for Windows stability 2026-06-08 17:30:38 +02:00
main Fix Jingle receive cancel/teardown path for Windows stability 2026-06-08 17:30:38 +02:00
MQTT/Node Red Examples Clean public project metadata 2026-05-01 17:56:04 +02:00
plugins Handle OMEMO devicelist publish option fallback 2026-06-06 10:53:07 +02:00
qlite Rework systray and stabilize chat and MUC behavior 2026-05-01 07:37:18 +02:00
scripts Remove Meson tests from package workflow 2026-06-06 09:23:12 +02:00
tests audit: 16 spec-based security tests — 14 FAIL = 14 bugs found 2026-02-23 11:42:34 +01:00
xmpp-vala Fix Jingle receive cancel/teardown path for Windows stability 2026-06-08 17:30:38 +02:00
.dockerignore Harden Flatpak builder image workflow 2026-05-15 12:08:55 +02:00
.gitignore packaging: narrow bundled libevent selection 2026-05-14 20:07:04 +02:00
.guix-channel packaging: add dinox guix channel 2026-04-22 01:08:15 +02:00
AUTHORS Clean public project metadata 2026-05-01 17:56:04 +02:00
CONTRIBUTING.md Document Forgejo AGit contribution flow 2026-06-04 12:01:41 +02:00
dino.doap chore: Release version 2.1.0 2026-06-06 12:37:34 +02:00
dino.doap.in Update public project links for Forgejo 2026-05-01 14:23:08 +02:00
guix.scm packaging: add dinox guix channel 2026-04-22 01:08:15 +02:00
im.dinox.dinox.json packaging: Tighten Flatpak manifest for Flathub 2026-06-05 09:26:24 +02:00
LICENSE Initial commit 2026-02-02 17:00:26 +01:00
meson.build chore: Release version 2.1.0 2026-06-06 12:37:34 +02:00
meson_options.txt docs: add GeoClue2 (libgeoclue-2-dev) to all dependency lists 2026-03-13 18:50:31 +01:00
NOTICE Clean public project metadata 2026-05-01 17:56:04 +02:00
README.md README.md aktualisiert 2026-06-07 10:47:57 +02:00
SECURITY.md docs: add root security policy 2026-05-08 06:22:15 +02:00
VERSION chore: Release version 2.1.0 2026-06-06 12:37:34 +02:00

DinoX Logo

DinoX

License: GPL-3.0 GTK4 Release

Secure XMPP messenger for desktop chat, calls, files and automation

DinoX is a GTK4/libadwaita XMPP client for Linux and Windows. It focuses on private messaging, self-hosted infrastructure and practical interoperability: encrypted 1:1 chats, group chats, file sharing, voice/video calls, voice/video messages, optional Tor routing, local data encryption and OpenPGP/OMEMO key management.

Beyond normal messenger use, DinoX includes optional modules for local REST automation, Botmother bot management, AI provider integration, MQTT/IoT topics and DTMF dialpad support for XMPP SIP provider workflows.

DinoX is developed based on the XMPP servers Ejabberd 26.04 and Prosody 13.06. The latest updates or further development of both servers are integrated into DinoX immediately. Other XMPP servers are supported in their basic functions as well, but there is no guarantee they will work flawlessly.

WebsiteSourceReleasesMilestone 2.0.0DownloadFeaturesXEP SupportBuildDebugTestingChangelogContributing


Key Features

Feature Description
Encrypted File Upload AES-GCM URI scheme and XEP-0448 support for encrypted file sharing
Local File Encryption Local avatars, stickers and transfers are encrypted at rest (AES-256-GCM)
Secure Deletion Global history deletion with throttling and local cache cleanup
OMEMO Encryption End-to-end encryption for messages and files (legacy OMEMO + OMEMO 2 paths)
OpenPGP Encryption XEP-0027 plus XEP-0373/0374 with key management, generation, deletion and revocation
Encrypted Local Database Local data is stored in an encrypted SQLCipher database (password required at startup)
Change Database Password Change the local database password via Preferences (SQLCipher rekey)
Panic Wipe Quickly wipe local DinoX data (Ctrl+Shift+Alt+P) and exit (also triggered after 3 failed unlock attempts)
OpenPGP Keyring Isolation Uses an app-scoped GNUPGHOME so Panic Wipe can remove app OpenPGP material
Disappearing Messages Auto-delete messages after 15min, 30min, 1h, 24h, 7d or 30d
MUJI Group Calls Multi-party audio/video conference support (mesh-based)
1:1 Voice & Video Calls with optional echo cancellation, noise suppression, AGC and transient suppression
DTMF & Dialpad RFC 4733 telephone-event support with Dialpad UI for XMPP SIP Provider telephony (hotlines, IVR, conference controls)
Voice Messages Record and send audio messages (AAC format)
Video Messages Record and send video messages with camera preview (H.264+AAC in MP4, max 720p, 120s)
Inline Video Player Play videos directly in chat (no external player)
Group Chats (MUC) Group chats with moderation, roles and private-room workflows
Tor Routing Optional integrated Tor and Obfs4proxy support
System Tray Background mode with StatusNotifierItem
Message Retraction Delete messages for everyone (XEP-0424)
Emoji Reactions React to messages (XEP-0444)
Stickers Send & receive sticker packs (XEP-0449)
Message Replies Quote and reply to messages (XEP-0461)
MQTT Plugin IoT sensor data via MQTT 5.0 — topic subscriptions, alerts, sparkline charts, XMPP bridging, Home Assistant integration, Prosody mod_pubsub_mqtt support, ejabberd mod_mqtt support, Node-RED integration with free-text publish/response
MUC Moderation Kick, ban and role-management workflows (XEP-0425)
TLS Certificate Pinning Trust self-signed certs for self-hosted servers
TLS Certificate Info View TLS certificate details (issuer, validity, fingerprint) in account settings
Backup & Restore Full data backup with optional GPG encryption (AES-256)
Database Maintenance Clean orphaned records, optimize storage
PGP Key Management Generate, select, delete, revoke OpenPGP keys in-app. Automatic key exchange via PEP
47 Languages ~85% translated
Dark Mode System theme or manual toggle

Installation

Windows

Download the newest release that contains a Windows ZIP/prebuild artifact from DinoX Releases. Extract the ZIP archive and run dinox.exe.

To build DinoX from source on Windows, see the build instructions: Deutsch | English

On first start after unpacking, Windows Defender may briefly scan the extracted files. After that, DinoX should start normally. Audio/video calls and audio/video messages load their media stack on demand.

Geolocation for locations is not available on Windows.

Debian/Ubuntu

Download the .deb package and matching .sha256 file from a DinoX release that contains Debian package artifacts: DinoX Releases.

sha256sum -c dinox_*.deb.sha256
sudo apt install ./dinox_*.deb

Flatpak

Download the Flatpak bundle and matching checksum from a DinoX release that contains Flatpak artifacts: DinoX Releases.

# 1. Install the GNOME runtime (required, one-time setup)
flatpak install flathub org.gnome.Platform//50

# 2. Verify and install DinoX
sha256sum -c ./dinox-*-x86_64.flatpak.sha256
flatpak install --user ./dinox-*-x86_64.flatpak

# 3. Run
flatpak run im.dinox.dinox

AppImage

  • Download the AppImage and matching checksum from a DinoX release that contains AppImage artifacts: DinoX Releases.

    sha256sum -c DinoX-*.AppImage.sha256
    chmod +x DinoX-*.AppImage
    ./DinoX-*.AppImage
    
  • Install via AppMan (rootless)

    appman -i dinox
    
  • Install via AM

    am -i dinox
    

Build from Source

DinoX uses Meson/Ninja and requires several custom dependencies (SQLCipher with FTS5, webrtc-audio-processing 2.1, libnice 0.1.23, etc.). The current source-build reference is Debian/Ubuntu 24.04 based systems, including Linux Mint 22.x. For complete build instructions and packaging notes, see BUILD.md.

Local data encryption

DinoX stores your local data (accounts, messages, settings, cached metadata) in an encrypted SQLCipher database.

  • You will be prompted for a password on startup.
  • If you forget the password, the database cannot be recovered.
  • A Panic Wipe action is available via the app menu and the shortcut Ctrl+Shift+Alt+P.

Audio/Video calling notes

DinoX 1:1 calling focuses on cross-client interoperability (notably with Conversations (Android) and Monal (iOS)) while keeping the existing media stack:

  • Media stack: GStreamer (RTP/rtpbin + WebRTC elements), libnice (ICE), gnutls (DTLS), libsrtp2 (SRTP).
  • PipeWire Support: DinoX integrates explicitly with PipeWire for modern audio support.

    Important: On Debian/Ubuntu based systems, install gstreamer1.0-pipewire. Without the GStreamer PipeWire plugin, calls or voice notes may fall back to legacy audio paths, which can cause stability issues or incorrect device selection.

  • Security profile: DTLS-SRTP only (no SDES-SRTP).
  • Baseline codecs: Opus (audio) and VP8 (video) for reliable interop.
  • Optional audio quality: webrtc-audio-processing enables AEC/NS/AGC if present.

    Note: Many distributions ship outdated versions. For best quality (Echo Cancellation), use the tested dependency set from scripts/ci-build-deps.sh. See BUILD.md.

If you are building from source using distro packages, ensure you are on a sufficiently new libnice (recommended: >= 0.1.23). For collecting reproducible call logs, see DEBUG.md.

XEP Support

DinoX tracks XMPP extension support in the machine-readable dino.doap file. That file currently lists 90 XEP entries across implemented, partial, deprecated and helper-protocol implementations. The table below highlights the user-visible and interoperability-critical XEPs. "Implemented" describes DinoX project coverage, not formal XSF specification maturity or certification. "Partial" means DinoX supports the relevant product workflow, but not every optional or historical part of the specification.

Messaging

XEP Name Status
XEP-0080 User Location Implemented
XEP-0085 Chat State Notifications Implemented
XEP-0184 Message Delivery Receipts Implemented
XEP-0280 Message Carbons Implemented
XEP-0308 Last Message Correction Implemented
XEP-0313 Message Archive Management Partial
XEP-0333 Chat Markers Implemented
XEP-0359 Unique and Stable Stanza IDs Implemented
XEP-0424 Message Retraction Implemented
XEP-0444 Message Reactions Implemented
XEP-0449 Stickers Implemented
XEP-0461 Message Replies Implemented

Profile & Contact

XEP Name Status
XEP-0054 vCard-temp Implemented
XEP-0055 Jabber Search Implemented
XEP-0077 In-Band Registration Implemented
XEP-0158 CAPTCHA Forms Implemented
XEP-0172 User Nickname Implemented
XEP-0292 vCard4 Partial

Security

XEP Name Status
XEP-0027 Current Jabber OpenPGP Usage (legacy interop) Implemented
XEP-0373 OpenPGP for XMPP (experimental spec) Implemented
XEP-0374 OpenPGP for XMPP Instant Messaging (deferred spec) Implemented
XEP-0384 OMEMO Encryption (legacy namespace + OMEMO 2 paths, experimental spec) Implemented
XEP-0420 Stanza Content Encryption (experimental spec) Implemented
XEP-0448 Encryption for Stateless File Sharing Implemented
XEP-0454 OMEMO Media Sharing Partial

Voice & Video

XEP Name Status
XEP-0166 Jingle Partial
XEP-0167 Jingle RTP Sessions Partial
XEP-0176 Jingle ICE-UDP Transport Partial
XEP-0272 MUJI Partial
XEP-0320 Use of DTLS-SRTP in Jingle Sessions Implemented
XEP-0353 Jingle Message Initiation Implemented

Multi-User Chat

XEP Name Status
XEP-0045 Multi-User Chat Partial
XEP-0249 Direct MUC Invitations Partial
XEP-0402 PEP Native Bookmarks Implemented
XEP-0421 Anonymous Unique Occupant Identifiers Implemented
XEP-0425 Message Moderation Implemented
XEP-0486 MUC Avatars Implemented

File Transfer

XEP Name Status
XEP-0066 Out of Band Data Implemented
XEP-0234 Jingle File Transfer Partial
XEP-0260 Jingle SOCKS5 Bytestreams Transport Implemented
XEP-0261 Jingle In-Band Bytestreams Transport Implemented
XEP-0363 HTTP File Upload Implemented
XEP-0447 Stateless File Sharing Partial

Core

XEP Name Status
XEP-0004 Data Forms Implemented
XEP-0030 Service Discovery Implemented
XEP-0049 Private XML Storage Implemented
XEP-0059 Result Set Management Partial
XEP-0060 Publish-Subscribe Partial
XEP-0082 XMPP Date and Time Profiles Implemented
XEP-0092 Software Version Implemented
XEP-0115 Entity Capabilities Implemented
XEP-0163 Personal Eventing Protocol Implemented
XEP-0198 Stream Management Implemented
XEP-0199 XMPP Ping Implemented
XEP-0352 Client State Indication Implemented
XEP-0368 SRV records for XMPP over TLS Implemented

Roadmap / Not Yet Claimed

XEP Name Status
XEP-0357 Push Notifications Roadmap
XEP-0386 Bind 2 Roadmap
XEP-0388 Extensible SASL Profile / SASL2 Roadmap
XEP-0484 Fast Authentication Streamlining Tokens Roadmap

Screenshots

DinoX chat window Private MUC Rooms

Voice Messages Data Backup

Resources

Resource Link
Website dinox.im
Source git.dinox.im/dinoxim/dinox
Releases DinoX Releases
Milestone DinoX 2.0.0 Relaunch
Issues Bug Tracker
Security Security Policy
XMPP Chat Room [email protected]
XMPP Contact [email protected]
Email [email protected]

Contributing

Use Forgejo Issues for bug reports and feature requests. For code changes, DinoX uses Forgejo AGit pull requests instead of forks:

git clone ssh://[email protected]:2222/dinoxim/dinox.git
cd dinox
git checkout -b fix-short-topic
# edit, build, test, commit
git push origin HEAD:refs/for/master -o topic="fix-short-topic"

See CONTRIBUTING.md for the full contributor workflow.

Debug Mode

See DEBUG.md for debugging instructions.

License

GPL-3.0 - See LICENSE for details.


Made for the XMPP community

Repository | Report Issues