Iris is a comprehensive Qt/C++ library for working with the XMPP protocol. It complies with the XMPP RFCs and many XEPs. It should be useful for creating clients, servers, and other components.
In addition to XMPP, Iris also offers access to many other protocols and concepts, including DNS, DNS-SD, connection and transport abstraction, HTTP, SOCKS, XML streaming, network interfaces, compression, encryption, authentication, flow control, proxies, and NAT traversal.
This library is licensed under the Lesser GNU General Public License. See the COPYING file for more information.
Iris depends on Qt and QCA.
dependencies.lock.json records the QCA release tag, its full Git commit SHA,
and qca.minimum_version for runtime/SDK compatibility. The minimum remains
independent of the pinned build release.
CI and package workflows load the release tag through
.github/actions/load-dependencies; bundled CMake builds use the commit SHA.
To update QCA, change both fields together after the release packages are published.
Each supported packaging platform needs its corresponding QCA release asset.
The locked minimum is currently 3.0.10, which fixes DTLS input queue stalls.
System QCA 3 selection, CMake/pkg-config SDK metadata and deb runtime/development
dependencies all use this field rather than pinning the exact build version.
Changing the lock reconfigures CMake and clears stale downloaded QCA build state.
Explicit IRIS_BUNDLED_QCA_GIT_TAG and IRIS_QCA_SOURCE_DIR overrides remain
available; system QCA selection is unchanged. Existing build trees with a cached
Git ref keep that ref; use cmake -U IRIS_BUNDLED_QCA_GIT_TAG ... once to adopt
the lock default.
CMake obtains the version from IRIS_VERSION, a generated .version file,
Git tags, or the .archive-version metadata embedded by git archive, in
that order. GitHub source downloads use git archive and substitute the
nearest matching v[0-9]* tag through .gitattributes export-subst.
The tracked .archive-version remains an unexpanded template in Git checkouts;
it does not pin subsequent releases to an old version.
Archives need a reachable numeric release tag. A plain directory copy or an
archive made from an untagged repository can instead supply
-DIRIS_VERSION=1.1.2 or a .version file containing 1.1.2.
-
Full support for draft-ietf-xmpp-core-21, including:
- SRV DNS lookups
- SSL/TLS security (both old way and ‘STARTTLS’ variations)
- SASL authentication/encryption
- Older jabber:iq:auth login
- Resource binding
- HTTP Connect, SOCKS5, and HTTP Polling proxy support
- High-level objects for dealing with Stanzas and Streams
-
Parts of xmpp-im:
- Message exchange
- Presence broadcast / reciept
- Roster management
- Subscriptions
-
XEP extensions:
- Version/Time requests
- Service Discovery (disco, browse, and older ‘agents’ modes)
- Account registration
- Password changing
- Agent/Transport registration
- vCards
- Basic Groupchat
- OpenPGP capable
- S5B Direct Connections
- File Transfer
-
And probably more things I forgot to mention…
First, build Iris:
Unix:
./configure
makeWindows:
copy conf_win.pri.example conf_win.pri
copy confapp_win.pri.example confapp_win.pri
qmake
make (or nmake)
There is no installation. Just include iris.pri in your qmake project. Iris requires Qt 4.2 or greater and QCA 2.0 or greater.
(TODO)
- Finish basic server support for xmpp-core
- Ensure xmpp-core fully matches the draft
- Write API docs for xmpp-core
- Write full xmpp-im API
- Additional important specs: x:data, MUC, etc
- ...
Iris is the Greek goddess of messaging and the rainbow. She works part-time delivering XML.