DinoX - Secure XMPP messenger for Linux and Windows with encrypted chat, calls, files, optional Tor, MQTT and automation APIs https://dinox.im
  • Vala 84.5%
  • Shell 6.4%
  • C++ 4%
  • Python 3.3%
  • C 1%
  • Other 0.6%
Find a file
2026-07-31 05:56:18 +02:00
.github ci: initialize Flatpak temp directories before gates 2026-07-30 08:17:38 +02:00
.guix/modules Clean public project metadata 2026-05-01 17:56:04 +02:00
ci/images ci: finalize libwebrtc Linux release packaging 2026-07-26 08:20:02 +02:00
crypto-vala Fix libgcrypt initialization order 2026-06-05 07:36:37 +02:00
docs chore: Release version 2.2.2 2026-07-30 05:57:45 +02:00
google-webrtc Fix packaged libwebrtc media lifecycle 2026-07-27 13:27:56 +02:00
libdino Fix packaged libwebrtc media lifecycle 2026-07-27 13:27:56 +02:00
main chore: Release version 2.2.2 2026-07-30 05:57:45 +02:00
MQTT/Node Red Examples Clean public project metadata 2026-05-01 17:56:04 +02:00
packaging/flatpak Fix packaged libwebrtc media lifecycle 2026-07-27 13:27:56 +02:00
plugins fix: preserve OMEMO sessions during MAM replay 2026-07-28 11:58:42 +02:00
qlite Rework systray and stabilize chat and MUC behavior 2026-05-01 07:37:18 +02:00
scripts ci: initialize Flatpak temp directories before gates 2026-07-30 08:17:38 +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(muc): publish self state before completing join 2026-07-31 05:56:18 +02:00
.dockerignore Harden Flatpak builder image workflow 2026-05-15 12:08:55 +02:00
.gitignore docs: harden Linux source build guide 2026-07-28 18:25:39 +02:00
.guix-channel packaging: add dinox guix channel 2026-04-22 01:08:15 +02:00
AUTHORS docs: clarify licensing and third-party notices 2026-07-27 08:47:26 +02:00
CONTRIBUTING.md Document Forgejo AGit contribution flow 2026-06-04 12:01:41 +02:00
dino.doap chore: Release version 2.2.2 2026-07-30 05:57:45 +02:00
dino.doap.in Update public project links for Forgejo 2026-05-01 14:23:08 +02:00
im.dinox.dinox.json Fix packaged libwebrtc media lifecycle 2026-07-27 13:27:56 +02:00
LICENSE Initial commit 2026-02-02 17:00:26 +01:00
meson.build chore: Release version 2.2.2 2026-07-30 05:57:45 +02:00
meson_options.txt ci: finalize libwebrtc Linux release packaging 2026-07-26 08:20:02 +02:00
NOTICE Add complete Windows license inventory 2026-07-27 10:03:02 +02:00
README.md docs: harden Linux source build guide 2026-07-28 18:25:39 +02:00
SECURITY.md docs: add root security policy 2026-05-08 06:22:15 +02:00
VERSION chore: Release version 2.2.2 2026-07-30 05:57:45 +02:00

DinoX Logo

DinoX

License: GPL-3.0-or-later 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
1:1 Voice & Video Google/libwebrtc calls with 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. Keep the complete extracted directory together; it contains the required runtime DLLs and the package-specific license inventory under share/licenses/dinox.

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. Calls and media-message capture load the Google/libwebrtc worker on demand; media-file decoding is handled separately by GStreamer.

Geolocation for locations is not available on Windows.

Ubuntu 24.04 / Linux Mint 22 (.deb)

Download the .deb package and matching .sha256 file from a DinoX release that contains Debian-format package artifacts. The official binary .deb is built and tested on Ubuntu 24.04 and Linux Mint 22; it is not the Debian 13 binary package. Debian 13 users should use the AppImage or Flatpak below, or build DinoX from source: 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.

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

# Run
flatpak run im.dinox.dinox

The bundle installation automatically fetches its required GNOME 50 and matching codec runtimes from the embedded runtime repository when they are not installed yet. A manual flatpak install flathub org.gnome.Platform//50 is only a troubleshooting step if automatic runtime resolution reports an error; it is not part of the normal installation.

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
    

    The matching .AppImage.sources.tar.xz release asset provides the corresponding-source and license payload. It is not required to run DinoX.

  • Install via AppMan (rootless)

    appman -i dinox
    
  • Install via AM

    am -i dinox
    

Build from Source

DinoX uses Meson/Ninja and normal distribution development packages. Official release packages use a separately provisioned builder image for pinned custom dependency versions. Every production build consumes the public, pinned Google/libwebrtc M150 DinoX runtime artifact. The current source-build reference is Ubuntu 24.04 LTS, Linux Mint 22.x and Debian 13. For complete build instructions and packaging notes, start with the Linux Source Build guide.

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/monocles (Android) and Monal (iOS):

  • Live-call engine: pinned Google/libwebrtc M150 in an external supervised worker process; GStreamer RTP is not a production call fallback.
  • Security profile: mandatory DTLS-SRTP; XMPP/OMEMO verifies the call fingerprint before media is accepted.
  • Baseline codecs: Opus (audio) and VP8 (video). H.264 is not enabled in the default DinoX libwebrtc artifact.
  • Network policy: Automatic by default, with an explicit audio-only low-bandwidth (2G) mode using a 16 kbit/s Opus sender cap.
  • Devices: libwebrtc owns microphone, speaker and camera integration on Linux and Windows. PipeWire, PulseAudio, ALSA and WASAPI are platform details behind that engine rather than separate DinoX call pipelines.

The media paths are deliberately separated:

  • On Linux, Google/libwebrtc captures raw microphone/camera frames for voice and video messages. The ffmpeg command encodes and writes AAC/M4A or H.264+AAC/MP4 files.
  • On Windows, Google/libwebrtc captures the raw frames and Windows Media Foundation encodes and writes the media-message files; a system ffmpeg executable is not used for this path.
  • GStreamer demuxes and decodes received/local media files, extracts metadata and thumbnails, and feeds decoded audio PCM to the selected libwebrtc speaker. It is neither the production call engine nor the Linux recorder muxer.

Google/libwebrtc owns ICE, STUN and TURN for calls. libnice remains packaged only because the separate legacy ICE plugin currently also supplies local address discovery and per-account Tor/SOCKS5 policy hooks to direct Jingle-S5B file transfer. For targeted call diagnostics, 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-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 dinox@conference.dinox.im
XMPP Contact dinox@dinox.im
Email contact@dinox.im

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://git@git.dinox.im: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

DinoX is free software licensed under GPL-3.0-or-later. Copyright and fork attribution are recorded in NOTICE.

Official Linux binary packages and the portable Windows distribution also contain third-party components under their respective licenses. Package-specific notices are installed with DinoX. The Windows ZIP contains hash-bound inventories for every packaged PE file, bundled third-party runtime assets, embedded Google/libwebrtc and Lyrebird Go components, and every included license file, but no large source archives or build caches. Large corresponding source payloads for the AppImage are published as a separate matching .AppImage.sources.tar.xz release asset, so they do not enlarge the runnable AppImage and are not required to run it. See the build and packaging documentation and the Flatpak third-party inventory for details.


Made for the XMPP community

Repository | Report Issues