Smack Extensions User Manual

The XMPP protocol includes a base protocol and many optional extensions typically documented as "XEP's". Smack provides the org.jivesoftware.smack package for the core XMPP protocol, and the org.jivesoftware.smackx package for many of the protocol extensions.

This manual provides details about each of the "smackx" extensions, including what it is, how to use it, and some simple example code.

Currently supported XEPs of Smack (all sub-projects)

Name XEP Version Description
Discovering Alternative XMPP Connection Methods XEP-0156 1.3.0 Defines ways to discover alternative connection methods.
Nonzas XEP-0360 n/a Defines the term "Nonza", describing every top level stream element that is not a Stanza.

Currently supported XEPs of smack-tcp

Name XEP Version Description
Stream Management XEP-0198 n/a Allows active management of an XML Stream between two XMPP entities (stanza acknowledgement, stream resumption).

Currently supported XEPs of smack-im

Name XEP Version Description
Roster Versioning XEP-0237 n/a Efficient roster synchronization.

Smack Extensions and currently supported XEPs of smack-extensions

Name XEP Version Description
Data Forms XEP-0004 n/a Allows to gather data using Forms.
Last Activity XEP-0012 n/a Communicating information about the last activity associated with an XMPP entity.
Flexible Offline Message Retrieval XEP-0013 n/a Extension for flexible, POP3-like handling of offline messages.
Privacy Lists XEP-0016 n/a Enabling or disabling communication with other entities.
Service Discovery XEP-0030 n/a Allows to discover services in XMPP entities.
Extended Stanza Addressing XEP-0033 n/a Allows to include headers in stanzas in order to specifiy multiple recipients or sub-addresses.
Multi User Chat XEP-0045 n/a Allows configuration of, participation in, and administration of individual text-based conference rooms.
In-Band Bytestreams XEP-0047 n/a Enables any two entities to establish a one-to-one bytestream between themselves using plain XMPP.
Bookmarks XEP-0048 n/a Bookmarks, for e.g. MUC and web pages.
Private Data XEP-0049 n/a Manages private data.
Ad-Hoc Commands XEP-0050 n/a Advertising and executing application-specific commands.
vcard-temp XEP-0054 n/a The vCard-XML format currently in use.
Jabber Search XEP-0055 n/a Search information repositories on the XMPP network.
Result Set Management XEP-0059 n/a Page through and otherwise manage the receipt of large result sets
PubSub XEP-0060 n/a Generic publish and subscribe functionality.
SOCKS5 Bytestreams XEP-0065 n/a Out-of-band bytestream between any two XMPP entities.
Field Standardization for Data Forms XEP-0068 n/a Standardized field variables used in the context of jabber:x:data forms.
XHTML-IM XEP-0071 n/a Allows send and receiving formatted messages using XHTML.
In-Band Registration XEP-0077 n/a In-band registration with XMPP services.
Advanced Message Processing XEP-0079 n/a Enables entities to request, and servers to perform, advanced processing of XMPP message stanzas.
User Location XEP-0080 n/a Enabled communicating information about the current geographical or physical location of an entity.
XMPP Date Time Profiles XEP-0082 n/a Standardization of Date and Time representation in XMPP.
Chat State Notifications XEP-0085 n/a Communicating the status of a user in a chat session.
Time Exchange XEP-0090 n/a Allows local time information to be shared between users.
Software Version XEP-0092 n/a Retrieve and announce the software application of an XMPP entity.
Stream Initiation XEP-0095 n/a Initiating a data stream between any two XMPP entities.
SI File Transfer XEP-0096 n/a Transfer files between two users over XMPP.
User Mood XEP-0107 1.2.1 Communicate the users current mood.
Entity Capabilities XEP-0115 n/a Broadcasting and dynamic discovery of entity capabilities.
User Tune XEP-0118 n/a Defines a payload format for communicating information about music to which a user is listening.
Data Forms Validation XEP-0122 n/a Enables an application to specify additional validation guidelines .
Stanza Headers and Internet Metadata (SHIM) XEP-0131 1.2 Add Metadata Headers to Stanzas.
Service Administration XEP-0133 n/a Recommended best practices for service-level administration of servers and components using Ad-Hoc Commands.
Stream Compression XEP-0138 n/a Support for optional compression of the XMPP stream.
Data Forms Layout XEP-0141 n/a Enables an application to specify form layouts.
Personal Eventing Protocol XEP-0163 n/a Using the XMPP publish-subscribe protocol to broadcast state change events associated with an XMPP account.
Jingle XEP-0166 n/a Initiate and manage sessions between two XMPP entities.
User Nickname XEP-0172 n/a Communicate user nicknames.
Message Delivery Receipts XEP-0184 n/a Extension for message delivery receipts. The sender can request notification that the message has been delivered.
Blocking Command XEP-0191 n/a Communications blocking that is intended to be simpler than privacy lists (XEP-0016).
XMPP Ping XEP-0199 n/a Sending application-level pings over XML streams.
Entity Time XEP-0202 n/a Allows entities to communicate their local time
Delayed Delivery XEP-0203 n/a Extension for communicating the fact that an XML stanza has been delivered with a delay.
XMPP Over BOSH XEP-0206 n/a Use Bidirectional-streams Over Synchronous HTTP (BOSH) to transport XMPP stanzas.
Data Forms Media Element XEP-0221 n/a Allows to include media data in XEP-0004 data forms.
Attention XEP-0224 n/a Getting attention of another user.
Bits of Binary XEP-0231 n/a Including or referring to small bits of binary data in an XML stanza.
Software Information XEP-0232 0.3 Allows an entity to provide detailed data about itself in Service Discovery responses.
Best Practices for Resource Locking XEP-0296 n/a Specifies best practices to be followed by Jabber/XMPP clients about when to lock into, and unlock away from, resources.
Stanza Forwarding XEP-0297 n/a Allows forwarding of Stanzas.
Last Message Correction XEP-0308 n/a Provides a method for indicating that a message is a correction of the last sent message.
Last User Interaction in Presence XEP-0319 n/a Communicate time of last user interaction via XMPP presence notifications.
Data Forms Geolocation Element XEP-0350 n/a Allows to include XEP-0080 gelocation data in XEP-0004 data forms.
Group Chat Invitations n/a n/a Send invitations to other users to join a group chat room.
Jive Properties n/a n/a TODO

Experimental Smack Extensions and currently supported XEPs of smack-experimental

Name XEP Version Description
Message Carbons XEP-0280 n/a Keep all IM clients for a user engaged in a conversation, by carbon-copy outbound messages to all interested resources.
Message Archive Management XEP-0313 n/a Query and control an archive of messages stored on a server.
Data Forms XML Element XEP-0315 n/a Allows to include XML-data in XEP-0004 data forms.
Internet of Things - Sensor Data XEP-0323 n/a Sensor data interchange over XMPP.
Internet of Things - Provisioning XEP-0324 n/a Provisioning, access rights and user privileges for the Internet of Things.
Internet of Things - Control XEP-0325 n/a Describes how to control devices or actuators in an XMPP-based sensor network.
Jid Prep XEP-0328 0.1 Describes a way for an XMPP client to request an XMPP server to prep and normalize a given JID.
HTTP over XMPP transport XEP-0332 n/a Allows to transport HTTP communication over XMPP peer-to-peer networks.
Chat Markers XEP-0333 n/a A solution of marking the last received, displayed and acknowledged message in a chat.
Message Processing Hints XEP-0334 n/a Hints to entities routing or receiving a message.
JSON Containers XEP-0335 n/a Encapsulation of JSON data within XMPP Stanzas.
Internet of Things - Discovery XEP-0347 n/a Describes how Things can be installed and discovered by their owners.
Client State Indication XEP-0352 n/a A way for the client to indicate its active/inactive state.
Push Notifications XEP-0357 n/a Defines a way to manage push notifications from an XMPP Server.
Stable and Unique Stanza IDs XEP-0359 0.5.0 This specification describes unique and stable IDs for messages.
HTTP File Upload XEP-0363 0.3.1 Protocol to request permissions to upload a file to an HTTP server and get a shareable URL.
References XEP-0372 0.2.0 Add references like mentions or external data to stanzas.
Explicit Message Encryption XEP-0380 0.3.0 Mark a message as explicitly encrypted.
OpenPGP for XMPP XEP-0373 0.3.2 Utilize OpenPGP to exchange encrypted and signed content.
OpenPGP for XMPP: Instant Messaging XEP-0374 0.2.0 OpenPGP encrypted Instant Messaging.
Spoiler Messages XEP-0382 0.2.0 Indicate that the body of a message should be treated as a spoiler.
OMEMO Multi End Message and Object Encryption XEP-0384 n/a Encrypt messages using OMEMO encryption (currently only with smack-omemo-signal -> GPLv3).
Consistent Color Generation XEP-0392 0.6.0 Generate consistent colors for identifiers like usernames to provide a consistent user experience.
Message Markup XEP-0394 0.1.0 Style message bodies while keeping body and markup information separated.
DNS Queries over XMPP (DoX) XEP-0418 0.1.0 Send DNS queries and responses over XMPP.
Stanza Content Encryption XEP-0420 0.3.0 End-to-end encryption of arbitrary extension elements. Smack provides elements and providers to be used by encryption mechanisms.
Message Fastening XEP-0422 0.1.1 Mark payloads on a message to be logistically fastened to a previous message.
Message Retraction XEP-0424 0.2.0 Mark messages as retracted.
Fallback Indication XEP-0428 0.1.0 Declare body elements of a message as ignorable fallback for naive legacy clients.

Unofficial XMPP Extensions

Name XEP Version Description
Multi-User Chat Light XEP-xxxx n/a Multi-User Chats for mobile XMPP applications and specific environment.
Google GCM JSON payload n/a n/a Semantically the same as XEP-0335: JSON Containers.

Legacy Smack Extensions and currently supported XEPs of smack-legacy

If a XEP becomes 'Deprecated' or 'Obsolete' the code will be moved to the smack-legacy subproject.

Name XEP Version Description
Message Events XEP-0022 n/a Requests and responds to message events.
Roster Item Exchange XEP-0093 n/a Allows roster data to be shared between users.