- Vala 89.8%
- Shell 4.6%
- Python 3.4%
- C 1.2%
- Meson 0.6%
- Other 0.3%
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). |
||
|---|---|---|
| .github | ||
| .guix/modules | ||
| ci/images | ||
| crypto-vala | ||
| docs | ||
| libdino | ||
| main | ||
| MQTT/Node Red Examples | ||
| plugins | ||
| qlite | ||
| scripts | ||
| tests | ||
| xmpp-vala | ||
| .dockerignore | ||
| .gitignore | ||
| .guix-channel | ||
| AUTHORS | ||
| CONTRIBUTING.md | ||
| dino.doap | ||
| dino.doap.in | ||
| guix.scm | ||
| im.dinox.dinox.json | ||
| LICENSE | ||
| meson.build | ||
| meson_options.txt | ||
| NOTICE | ||
| README.md | ||
| SECURITY.md | ||
| VERSION | ||
DinoX
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.
Website • Source • Releases • Milestone 2.0.0 • Download • Features • XEP Support • Build • Debug • Testing • Changelog • Contributing
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-processingenables 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
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 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