*`smack-core` -- provides core XMPP functionality. All XMPP features that are part of the XMPP RFCs are included.
*`smack-im` -- provides functinoality defined in RFC 6121 (XMPP-IM), like the Roster.
*`smack-tcp` -- support for XMPP over TCP. Includes XMPPTCPConnection class, which you usually want to use
*`smack-extensions` -- support for many of the extensions (XEPs) defined by the XMPP Standards Foundation, including multi-user chat, file transfer, user search, etc. The extensions are documented in the [extensions manual](extensions/index.md).
*`smack-experimental` -- support for experimental extensions (XEPs) defined by the XMPP Standards Foundation. The API and functionality of those extensions should be considered as unstable.
*`smack-legacy` -- support for legacy extensions (XEPs) defined by the XMPP Standards Foundation.
*`smack-bosh` -- support for BOSH (XEP-0124). This code should be considered as beta.
*`smack-resolver-minidns` -- support for resolving DNS SRV records with the help of MiniDNS. Ideal for platforms that do not support the javax.naming API. Also supports [DNSSEC](dnssec.md).
*`smack-resolver-dnsjava` -- support for resolving DNS SRV records with the help of dnsjava.
*`smack-resolver-javax` -- support for resolving DNS SRV records with the javax namespace API.
*`smack-debug` -- an enhanced GUI debugger for protocol traffic. It will automatically be used when found in the classpath and when [debugging](debugging.md) is enabled.
Smack has an initialization process that involves 2 phases.
* Initializing system properties - Initializing all the system properties accessible through the class **SmackConfiguration**. These properties are retrieve by the _getXXX_ methods on that class.
* Initializing startup classes - Initializing any classes meant to be active at startup by instantiating the class, and then calling the _initialize_ method on that class if it extends **SmackInitializer**. If it does not extend this interface, then initialization will have to take place in a static block of code which is automatically executed when the class is loaded.
Initialization is accomplished via a configuration file. By default, Smack
will load the one embedded in the Smack jar at _org.jivesoftware.smack/smack-
config.xml_. This particular configuration contains a list of initializer
classes to load. All manager type classes that need to be initialized are
contained in this list of initializers.
Establishing a Connection
-------------------------
The `XMPPTCPConnection` class is used to create a connection to an XMPP
server. Below are code examples for making a connection: