Smack is a library for client-to-server XMPP connections to perform real-time communications and data exchange. This includes, but is not limited to, instant messaging and group chat. More genericly speaking, it allows you to easily exchange data in various ways: For example fire-and-forget, publish-subscribe, between human and non-human endpoints. The use cases include M2M, IoT, and many more.
Smack is a pure Java library, open-source and highly modular. It runs on Android and Java SE. The API strives to be easy to use but yet powerful.
AbstractXMPPConnection connection = new XMPPTCPConnection("mtucker", "password", "jabber.org"); connection.connect().login(); Message message = connection.getStanzaFactory() .buildMessageStanza() .to("jsmith@igniterealtime.org") .setBody("Howdy! How are you?") .build(); connection.sendStanza(message); connection.disconnect();
Smack doesn't force you to code at the protcol level of XMPP. The library provides intelligent higher level constructs, often called {@link org.jivesoftware.smack.Manager}, which let you program more efficiently. Other examples of those constructs are the Chat and Roster classes.
Smack comes with APIs for easy machine-to-machine communication. You can set any number of properties on each message, including properties that are Java objects.
Smack is open-source and most parts are under the Apache License 2.0, which means you can incorporate Smack into your commercial or non-commercial applications. Some parts of Smack may be under a different open-source license. Please refer to the individual subprojects for their license statement.
Note that the Apache License 2.0 requires that the contents of a NOICE text file are shown "…within a display generated by the Derivative Works, if and wherever such third-party notices normally appear.". Smack comes with such a NOTICE file. The content of Smack's NOTICE file can conveniently be retrieved using {@link org.jivesoftware.smack.Smack#getNoticeStream}.
XMPP (eXtensible Messaging and Presence Protocol) is an open protocol standardized by the Internet Engineering Task Force (IETF) and supported and extended by the XMPP Standards Foundation (XSF).