DinoX - Secure XMPP messenger for Linux and Windows with encrypted chat, calls, files, optional Tor, MQTT and automation APIs https://dinox.im
  • Vala 75.5%
  • Python 10%
  • C++ 7.6%
  • Shell 4.7%
  • C 1.4%
  • Other 0.6%
Find a file
rallep71 c7794268f1 docs(windows): record native warning cleanup and validation
Record the measured reduction from 231 to 200 warnings, classify the remaining Vala-generated helpers, and preserve the Windows package, backend and focused Linux validation results and their limits.
2026-10-30 22:41:29 +01:00
.github ci: retain package artifacts for seven days 2026-10-29 07:14:09 +01:00
.guix/modules Clean public project metadata 2026-05-01 17:56:04 +02:00
ci/images build: package DNSSEC runtime and Unicode-safe Windows TLS 2026-10-22 01:30:42 +02:00
crypto-vala Fix Windows builds in Unicode user directories 2026-10-15 17:43:52 +02:00
dns-security fix(windows): make release security checks portable 2026-10-23 16:44:42 +02:00
docs docs(windows): record native warning cleanup and validation 2026-10-30 22:41:29 +01:00
google-webrtc fix(calls): retain proven codec negotiation after camera diagnosis 2026-10-23 21:02:38 +02:00
libdino fix(files): show copied encrypted links as outgoing attachments 2026-10-30 14:35:10 +01:00
main fix(bindings): match GTK and GIO native pointer types 2026-10-30 22:38:45 +01:00
MQTT/Node Red Examples Clean public project metadata 2026-05-01 17:56:04 +02:00
packaging/flatpak build: package DNSSEC runtime and Unicode-safe Windows TLS 2026-10-22 01:30:42 +02:00
plugins test(http-files): accept localized cancellation errors 2026-10-30 22:39:46 +01:00
qlite fix(bindings): match GTK and GIO native pointer types 2026-10-30 22:38:45 +01:00
scripts fix(build): report compiler warnings across the full Windows build 2026-10-30 22:40:40 +01:00
tests test(interop): move Android-only fixtures to Monocles fork 2026-10-18 15:08:18 +02:00
xmpp-vala fix(muc): retire destroyed rooms across administration paths 2026-10-28 13:03:54 +01:00
.dockerignore Harden Flatpak builder image workflow 2026-05-15 12:08:55 +02:00
.gitignore chore: ignore local storage protection plan 2026-08-01 09:51:12 +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.3.3 2026-10-29 15:26:49 +01:00
dino.doap.in Prepare unreleased 2.3.2 metadata and build documentation 2026-10-12 15:30:23 +02:00
im.dinox.dinox.json fix(flatpak): use SDK Expat when building Unbound 2026-10-22 07:45:01 +02:00
LICENSE Initial commit 2026-02-02 17:00:26 +01:00
meson.build chore: Release version 2.3.3 2026-10-29 15:26:49 +01:00
meson_options.txt feat(network): add account-scoped DNSSEC and DANE verification 2026-10-22 01:29:16 +02:00
NOTICE Add complete Windows license inventory 2026-07-27 10:03:02 +02:00
README.md feat(i18n): complete Japanese app translations 2026-10-30 20:47:25 +01:00
SECURITY.md docs: add root security policy 2026-05-08 06:22:15 +02:00
VERSION chore: Release version 2.3.3 2026-10-29 15:26:49 +01: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 works with XMPP servers such as ejabberd and Prosody. The available features depend on the server's modules, configuration and account permissions. Server administration discovers the selected account's server and separates XMPP ad-hoc commands from separately configured HTTP API operations.

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 encrypted file URLs plus incoming XEP-0448 interoperability; DinoX does not currently emit outgoing ESFS payloads
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 is enabled, while the OMEMO 2 path remains disabled in stable builds
OpenPGP Encryption XEP-0027 compatibility, XEP-0373 key management and XEP-0374 signcrypt text messages, including key 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 DinoX's own user-data GNUPGHOME; never falls back to the operating system's keyring
Disappearing Messages Auto-delete messages after 15min, 30min, 1h, 24h, 7d or 30d
Voice & Video Calls Google/libwebrtc 1:1 calls and private-MUC group calls with capable peers, participant invitations and rejoining an active call
Turn a 1:1 Call into a Conference Invite more participants during a one-to-one audio or video call; DinoX checks group-call support before preparing a private conference
Video Call Effects Local colour filters, picture adjustments, background blur/replacement, automatic framing and face accessories; available in 1:1 and MUJI video calls
DTMF & Dialpad RFC 4733 telephone-event support with Dialpad UI for XMPP SIP Provider telephony (hotlines, IVR, conference controls)
Voice Messages Record, preview and send audio messages (AAC format); compact waveform player with seeking in chat
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 with Lyrebird obfs4 and WebTunnel transports
System Tray Background mode, status and notification controls; coloured native menus on Linux and Windows
Message Retraction Delete messages for everyone (XEP-0424)
Emoji Reactions React to messages (XEP-0444)
Stickers Send and receive sticker packs (XEP-0449), import from an XMPP link or image folder, and control chat animations
Server Administration Account-scoped ejabberd/Prosody command lists with readable actions and separate ad-hoc/API access
Server User Directory Search a server-provided directory; stored contacts remain available through the local contact search
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 through XEP-0045; moderated message retraction through 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
DNSSEC and DANE Optional verification per XMPP account and MQTT broker, with off, supported-domain and required modes; proxy-aware encrypted DNS
Login Protection (MITM) Shows server support and actual use, reconnects the selected account after changes, and validates SCRAM/TLS downgrade proofs
Feeds Read/share RSS and Atom, subscribe with a selectable interval while DinoX runs, and publish personal XMPP posts; open with Ctrl+Shift+F
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
34 Interface Languages English and 33 complete translations, including settings, dialogs, OMEMO and OpenPGP; unsupported system languages use English
Appearance Classic or DinoX Design, each with System, Light and Dark modes

Feeds and connection security

Feeds separates web articles shared in encrypted chats from personal XMPP posts, which are not end-to-end encrypted. Automatic web-feed delivery runs only while DinoX and the selected account are online. DNSSEC/DANE is optional and configured per account or MQTT broker. Login protection shows server support and the current connection's protection separately. PLAIN-only servers require explicit permission; TLS certificate checks remain enabled.

OpenPGP keys and server backups

DinoX uses its own GnuPG directory, normally ~/.local/share/dinox/openpgp/gnupg on Linux (under XDG_DATA_HOME when set). Windows uses openpgp/gnupg below DinoX's user-data directory and prefers the bundled GnuPG programs. DinoX does not use or modify the operating system's default keyring; an unavailable DinoX keyring produces an error.

Key selections and server operations belong to the account shown in Key Management. The local DinoX keyring is shared between its accounts, so a key assigned to another account cannot be revoked or deleted until that account's selections and manual assignment have been removed. Importing a private key assigns it to the current account without activating it. A legacy XEP-0027 key's email address may differ from that account's XMPP address. XEP-0373/0374 selection still requires a matching xmpp: user ID.

Keep the displayed backup code, including its hyphens, before uploading a server backup. New backups use the uppercase XEP-0373 code; older DinoX backups remain restorable. The original private-key passphrase, if any, is requested separately when preparing a backup and is not changed in the local keyring.

A server backup belongs to one XMPP account and may contain several private keys. Revocation removes only a positively identified backup containing just the selected key. An unrelated backup stays on the server. If a backup is unknown or contains other keys, DinoX keeps the local key and asks you to identify or explicitly remove the account's backup first. Delete Server Backup removes that entire account backup, keeping local keys and public-key publications. Failed key-related backup cleanup is saved for a checked retry when the account reconnects; local revocation remains a separate explicit action. See OpenPGP isolation diagnostics.

Message history

In a one-to-one chat or group, choose Load messages now from the chat's three-dot menu, or press Ctrl+Shift+H. The shortcut is also listed in the keyboard-shortcut overview. One-to-one chats request only that contact's messages from the account archive, using DinoX's automatic history period.

Open a group's details and choose Settings → Load message history (German: Einstellungen → Nachrichtenverlauf nachladen). Enable Set a custom period to choose 1–365 days, or leave it off to use DinoX's automatic history rules. The choice is saved separately for each group and account; changing it does not start an archive request.

Choose Load now, or use the chat menu, to request the selected period for a joined group. For an offline account or a group you have left, the saved period applies on the next join. The server must offer a room archive and may retain less history than requested. One-to-one chats likewise require the server's account archive. Cleared and expired messages remain excluded. This personal setting does not change the group's server configuration.

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.

Choose the Linux download for your system

Your system Download
Ubuntu 24.04 or Linux Mint 22.x, 64-bit Intel/AMD .deb, AppImage or Flatpak
Debian 13 (Trixie), including SparkyLinux 8.x, 64-bit Intel/AMD AppImage or Flatpak; alternatively build from source

The .deb extension describes the package format, not compatibility with every Debian-based distribution. Our official .deb uses Ubuntu 24.04 libraries. Installing development packages does not make that binary compatible with a different distribution.

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 update
sudo apt install ./dinox_*.deb

Run these commands in the download folder, with only the package version you want to install there. APT downloads the required runtime libraries from your distribution's configured repositories. A file-manager installer may instead stop at an unresolved dependency; the APT command shows the complete reason.

If installation reports libgpgme11t64 or libicu74 as unavailable, first check that you are using a supported Ubuntu/Mint version. On Debian Trixie or a derivative, use AppImage or Flatpak instead. Do not install libgpgme-dev, add Ubuntu repositories to Debian, or force the .deb installation to bypass the error. See installation troubleshooting.

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 DinoX runtime artifact (M152 on Linux and Windows). 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 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). M152 also supports negotiated VP9 and H.264 with automatic hardware/software selection.
  • 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.

Video effects and group calls

Video-call effects are applied locally to your outgoing camera picture. Your preview and the picture sent to other participants use the same effects; the other client receives an ordinary video stream. Choose a colour filter, adjust brightness/contrast/saturation/sharpness, blur or replace the background, or add glasses, hats, beards and animated decorations. Background images are still PNG or JPEG files. Automatic framing follows the detected person; face accessories track one face.

The offline person/face models are included in the pinned runtime and are used when the selected background, framing or face effect needs them. Basic colour filters do not need those models. See the runtime guide for the exact files and the remaining device/performance acceptance checks.

Group calls require MUJI support from the participating clients and an eligible private room. Calls started in an existing private group use that room. The phone menu can return to its running call; inviting another participant into a 1:1 call requests a temporary private call room. A client's working 1:1 calls alone do not establish group-call support.

Under Preferences → General → Appearance, choose Classic or DinoX Design. Color scheme (System, Light or Dark), accent color and chat font remain separate choices. Existing profiles and new installations start with Classic. The website design follows the selected light/dark mode and leaves system high-contrast colors in control. The choice is saved with the encrypted profile and takes effect after unlocking it.

The application icon uses the website's mint DinoX mark in both designs. The canonical source is main/data/icons/hicolor/scalable/apps/im.dinox.dinox.svg; maintainers can regenerate the Linux PNGs and Windows ICO with python3 scripts/generate-app-icons.py (Python GI/Rsvg, Cairo and Pillow). These tools are not required for normal package builds.

Linux exports a native SNI tray menu with coloured icons, using the desktop's menu theme. Windows draws its native tray menu to match DinoX's selected light or dark appearance, with a system high-contrast fallback. Linux uses GIO's session D-Bus and DinoX's own menu exporter; no external libdbusmenu is needed.

XEP Support

The machine-readable dino.doap file is the authoritative DinoX protocol inventory. The complete matrix below mirrors all 101 XEPs currently claimed there. It was reconciled against the production paths and tests on master, and against the official XSF catalogue on 25 August 2026.

The coverage labels describe DinoX, not the formal maturity of the XEP:

  • Production — shipped and used for the stated DinoX workflow. This does not claim every optional server or component role in the specification.
  • Partial — a clearly bounded subset is shipped.
  • Compatibility — a legacy or supporting profile is used, but it is not a separate complete user feature.
Complete claimed XEP matrix (101 entries)
XEP Official name Coverage DinoX scope
XEP-0004 Data Forms Production Parses, renders and submits the forms used by registration, MUC, PubSub and commands.
XEP-0027 Current Jabber OpenPGP Usage Compatibility Legacy OpenPGP messages and signed presence remain an enabled interoperability path.
XEP-0030 Service Discovery Production Disco info/items, feature advertisement and capability caching.
XEP-0045 Multi-User Chat Partial Common join, invitation, configuration, moderation, role and private-room workflows; not every optional historical role.
XEP-0047 In-Band Bytestreams Compatibility Bytestream substrate used by XEP-0261.
XEP-0048 Bookmarks Compatibility Legacy bookmark fallback; XEP-0402 is preferred when the server advertises conversion.
XEP-0049 Private XML Storage Production Reads and writes the legacy private XML data used by fallback workflows.
XEP-0050 Ad-Hoc Commands Partial Discovers and executes multi-step remote commands and supports local handlers; DinoX is not a general command server.
XEP-0054 vcard-temp Production Reads and writes vCard-temp data, including the vCard avatar path.
XEP-0055 Jabber Search Production Discovers search services and submits legacy or data-form searches.
XEP-0059 Result Set Management Partial Paging support used by MAM queries.
XEP-0060 Publish-Subscribe Partial PubSub/PEP operations required by shipped features, not a general PubSub administration client.
XEP-0065 SOCKS5 Bytestreams Compatibility Discovery and proxy substrate used by XEP-0260.
XEP-0066 Out of Band Data Production HTTP-upload links and interoperable file fallbacks.
XEP-0077 In-Band Registration Production Registration forms, submission and the pre-authenticated registration integration.
XEP-0080 User Location Production Publishes and displays location data where the platform supports it.
XEP-0082 XMPP Date and Time Profiles Production Parses and emits XMPP date/time values.
XEP-0084 User Avatar Production Publishes, retrieves and removes PEP avatars.
XEP-0085 Chat State Notifications Production Sends and receives chat states subject to privacy settings.
XEP-0092 Software Version Production Answers software-version requests.
XEP-0104 HTTP Scheme for URL Data Compatibility Serialises HTTP sources used by thumbnails, stickers and file-sharing payloads.
XEP-0115 Entity Capabilities Production Advertises and verifies capability hashes.
XEP-0128 Service Discovery Extensions Partial Consumes extended disco forms for MUC room information and HTTP upload limits.
XEP-0133 Service Administration Partial Exposes server-advertised administration commands through XEP-0050; server-specific commands remain separate.
XEP-0153 vCard-Based Avatars Compatibility Receives and sends avatar hashes in normal and directed MUC presence alongside XEP-0084.
XEP-0158 CAPTCHA Forms Production Handles CAPTCHA fields in registration/data-form workflows.
XEP-0163 Personal Eventing Protocol Production PEP event and storage layer for avatars, bookmarks, keys and displayed-state sync.
XEP-0166 Jingle Partial Session subset required by calls and direct file transfer.
XEP-0167 Jingle RTP Sessions Partial Audio/video RTP subset bridged to the Google/libwebrtc worker.
XEP-0172 User Nickname Production Publishes and consumes PEP nicknames.
XEP-0176 Jingle ICE-UDP Transport Method Partial Call transport mapped to libwebrtc ICE; not every historical transport path is claimed.
XEP-0184 Message Delivery Receipts Production Sends, receives and displays delivery receipts where the peer supports them.
XEP-0191 Blocking Command Production Retrieves and changes the server block list.
XEP-0198 Stream Management Production Stream acknowledgement and resumption on the stable connection path.
XEP-0199 XMPP Ping Production Client and MUC liveness pings.
XEP-0202 Entity Time Partial Requests and answers entity-time queries with per-account timezone sharing control; focused protocol regression coverage is still missing.
XEP-0203 Delayed Delivery Production Parses archived/offline message timestamps.
XEP-0215 External Service Discovery Partial Discovers STUN/TURN services needed by calls.
XEP-0221 Data Forms Media Element Partial Parses and displays media embedded in data forms.
XEP-0222 Persistent Storage of Public Data via PubSub Compatibility Public PEP storage profile used by feature payloads.
XEP-0223 Persistent Storage of Private Data via PubSub Compatibility Private/whitelist PEP storage profile used by feature payloads.
XEP-0231 Bits of Binary Compatibility Retrieves and renders embedded binary data used by forms and related payloads.
XEP-0234 Jingle File Transfer Partial Direct send/receive with the supported S5B and IBB transports; not every optional profile.
XEP-0245 The /me Command Production Sends and renders action messages.
XEP-0249 Direct MUC Invitations Partial Receives direct invitations and has an internal sender; the normal room invitation UI deliberately uses mediated XEP-0045 invitations.
XEP-0260 Jingle SOCKS5 Bytestreams Transport Method Production Direct and proxy-capable Jingle file-transfer transport with account routing policy.
XEP-0261 Jingle In-Band Bytestreams Transport Method Production IBB fallback transport for Jingle file transfer.
XEP-0264 Jingle Content Thumbnails Partial Thumbnail elements are used in SFS metadata; direct XEP-0234 offers do not carry them.
XEP-0272 Multiparty Jingle (MUJI) Partial Private-room and 1:1 participant-invitation calls; nickname election/readiness follow the Monocles profile proposal, with legacy OMEMO.
XEP-0280 Message Carbons Production Synchronises sent and received messages across resources.
XEP-0292 vCard4 Over XMPP Partial Reads and publishes the vCard4 fields used by DinoX.
XEP-0293 Jingle RTP Feedback Negotiation Partial Maps supported RTCP feedback between Jingle and libwebrtc SDP.
XEP-0294 Jingle RTP Header Extensions Negotiation Partial Maps supported RTP header extensions between Jingle and libwebrtc SDP.
XEP-0297 Stanza Forwarding Partial Forwarded stanza handling for MAM and carbons, not a generic forwarding feature.
XEP-0298 Delivering Conference Information to Jingle Participants (Coin) Partial Parses conference information used by the call UI.
XEP-0300 Use of Cryptographic Hash Functions in XMPP Production Hash parsing and serialisation for avatars, files and thumbnails.
XEP-0308 Last Message Correction Production Sends, receives and projects message edits.
XEP-0313 Message Archive Management Partial MAM2 history synchronisation and paging; not general archive administration.
XEP-0317 Hats Partial Parses and displays hats and supports the advertised hat administration commands used by DinoX.
XEP-0320 Use of DTLS-SRTP in Jingle Sessions Production Mandatory fingerprinted DTLS-SRTP on the current call path.
XEP-0333 Displayed Markers Production Read/displayed projection for 1:1, MUC and private-MUC conversations, subject to settings and peer support.
XEP-0334 Message Processing Hints Partial Emits and consumes the hints required by the shipped message workflows.
XEP-0352 Client State Indication Production Reports foreground/background state to the server.
XEP-0353 Jingle Message Initiation Production XEP-0353 0.8.0 lifecycle for one-to-one Google/libwebrtc calls, including ringing, finish reasons, tie-breaking, full-JID migration and passive MAM/Carbon recovery. Private-room MUJI calls use their separate XEP-0272/XEP-0482 lifecycle.
XEP-0359 Unique and Stable Stanza IDs Production Origin, stanza and stable IDs used for deduplication and message actions.
XEP-0363 HTTP File Upload Production Slot discovery/request, upload limits, headers, errors and legacy/current namespace interop.
XEP-0367 Message Attaching Partial Attach-to handling used for stateless file-source updates.
XEP-0368 SRV records for XMPP over TLS Production Resolves direct-TLS client SRV records.
XEP-0372 References Partial Parses and emits MUC mention references; other reference types are not claimed.
XEP-0373 OpenPGP for XMPP Production Publishes, retrieves and verifies OpenPGP keys through PEP.
XEP-0374 OpenPGP for XMPP Instant Messaging Partial Production supports signcrypt text messages; sign-only, crypt-only and arbitrary protected payloads are not wired into the runtime.
XEP-0379 Pre-Authenticated Roster Subscription Production Parses invitation links and sends token-bearing subscription requests.
XEP-0380 Explicit Message Encryption Partial Adds explicit-encryption metadata to outgoing encrypted messages.
XEP-0384 OMEMO Encryption Partial Legacy OMEMO is enabled in production; OMEMO 2 source/tests exist but are disabled in stable builds.
XEP-0391 Jingle Encrypted Transports Partial JET framework used by encrypted direct file transfer.
XEP-0392 Consistent Color Generation Production Deterministic contact and participant colours.
XEP-0393 Message Styling Partial Supports the styling syntax rendered by the DinoX message view.
XEP-0394 Message Markup Partial Emphasis, strong-emphasis and deletion spans; other span types are not claimed.
XEP-0396 Jingle Encrypted Transports - OMEMO Production Enabled JET-OMEMO path uses the production legacy OMEMO namespace.
XEP-0401 Ad-hoc Account Invitation Generation Partial Discovers and executes invitation commands and parses returned account or roster invitation URIs.
XEP-0402 PEP Native Bookmarks Production Reads, publishes, updates and removes PEP bookmarks.
XEP-0410 MUC Self-Ping (Schrödinger's Chat) Production Checks room liveness and drives rejoin recovery.
XEP-0411 Bookmarks Conversion Compatibility Uses the deprecated compatibility feature only to select XEP-0402 or XEP-0048.
XEP-0421 Occupant identifiers for semi-anonymous MUCs Production Parses, stores and uses occupant IDs for stable MUC identity.
XEP-0422 Message Fastening Compatibility Parses and emits the older fastening wrapper only for retraction interoperability.
XEP-0424 Message Retraction Production Current direct retraction plus older namespace/wrapper interop, fallback handling and local projection.
XEP-0425 Moderated Message Retraction Partial Moderator-side retraction works; actor/reason metadata and MAM tombstones are not represented separately. Kick, ban and roles are XEP-0045.
XEP-0428 Fallback Indication Partial Fallback ranges used by replies and retractions.
XEP-0440 SASL Channel-Binding Type Capability Production SASL1 SCRAM-PLUS negotiates tls-exporter or tls-server-end-point; this is not a SASL2 claim.
XEP-0444 Message Reactions Production Sends, receives, aggregates and removes reactions.
XEP-0445 Pre-Authenticated In-Band Registration Production Discovers support and submits the pre-authentication token during registration.
XEP-0446 File metadata element Partial Implements the metadata fields used by DinoX file-sharing paths.
XEP-0447 Stateless file sharing Partial HTTP sources and source updates; not every source type or optional field.
XEP-0448 Encryption for stateless file sharing Partial Incoming ESFS is validated and decrypted; outgoing encryption uses the aesgcm URL body path instead of emitting ESFS.
XEP-0449 Stickers Production Publishes, retrieves and sends sticker packs.
XEP-0453 DOAP usage in XMPP Production The authoritative dino.doap capability document follows this profile.
XEP-0454 OMEMO Media sharing Partial Encrypted media sharing without embedded-thumbnail support.
XEP-0461 Message Replies Production Replies, quoted fallback removal and sender validation.
XEP-0472 Pubsub Social Feed Partial Text posts/replies, subscriptions and personal microblogs; no gallery publishing or end-to-end encryption.
XEP-0474 SASL SCRAM Downgrade Protection Partial SASL1 mechanism/binding hash verification; SASL2 is not implemented.
XEP-0482 Call Invites Partial Jingle/MUJI invite, accept, retract, reject and left signalling for private-MUC calls; broader external-client interoperability remains unverified.
XEP-0486 MUC Avatars Production Discovers bookmarked-room avatars before joining, verifies advertised roominfo hashes against vCard image bytes, follows status-code 104 refreshes, and supports joined-room publication and removal. Live ejabberd/Gajim interoperability covers these client paths. Discovery runs one room at a time in bounded, refillable batches; conference-list and member-list rows remain local-cache-only.
XEP-0490 Message Displayed Synchronization Production Regular PEP sync, capability-gated server assistance and regular PEP for private-MUC conversations.
XEP-0515 SASL SCRAM TLS Downgrade Protection Partial Verifies the TLS-version proof in SASL1 SCRAM; SASL2 is not implemented.

Known gaps and next protocol work

These are explicit non-claims, not hidden implementation details:

XEP Current state Required follow-up
XEP-0177 Non-operational skeleton Stop advertising Raw UDP unless a real connection path is implemented.
XEP-0338 Not implemented Decide whether call interoperability requires Jingle grouping/BUNDLE; current audio/video contents use separate transports.
XEP-0357 Roadmap Implement only when a tested desktop push use case and server matrix are defined.
XEP-0374 Signcrypt text only Wire and test sign-only, crypt-only and other protected payloads before claiming the complete IM profile.
XEP-0384 / XEP-0420 Legacy OMEMO is claimed; OMEMO 2/SCE is not claimed in stable builds Complete multi-client migration, downgrade and SCE interoperability gates before enabling the stable runtime.
XEP-0386 / XEP-0388 / XEP-0484 Feature branch only Rebase and merge SASL2/Bind2/FAST only after the upstream/server fixes and safe token-migration tests are available.
XEP-0398 Not implemented Add conversion-feature discovery and directed-presence refresh only if this compatibility path is needed.
XEP-0425 Partial moderation metadata Preserve moderator, reason and archived tombstone details if the UI and local model are extended for them.
XEP-0426 Not implemented Implement only if protocol-level character counting becomes a DinoX requirement.
XEP-0448 Incoming only Add an outgoing ESFS producer and wire-level tests before claiming bidirectional support.
XEP-0272 / XEP-0482 Partial Expand external-client coverage for private-room and direct-to-group calls; the Monocles profile remains a proposal.

DinoX does not aim to implement every XEP in the catalogue. New claims should be added only when a production call path and its exact boundary can be shown in code and tests.

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