Every module implements a small portion of the core XMPP spec or one of its extensions. These implementations come in the shape of {@link org.apache.vysper.xmpp.protocol.StanzaHandler}s where a module contains all handlers for one (or two) XMPP namespaces. In addition to handlers, a module covers all the backend functionality needed for the implementation and publishes services (via {@link org.apache.vysper.xmpp.modules.ServerRuntimeContextService}) to be used by others.

Many XMPP extensions link into service discovery (XEP-0030). Those modules extend {@link org.apache.vysper.xmpp.modules.DefaultDiscoAwareModule}.

The roster module ({@link org.apache.vysper.xmpp.modules.roster})is a simple example. It installs the {@link org.apache.vysper.xmpp.modules.roster.RosterDictionary}, which registers {@link org.apache.vysper.xmpp.modules.roster.handler.RosterIQHandler} for the "jabber:iq:roster" namespace. Additionally, it publishes a {@link org.apache.vysper.xmpp.modules.roster.persistence.RosterManager} implementation, responsible for storing and retrieving a user's roster. The RosterManager service, which can be accessed through {@link org.apache.vysper.xmpp.server.ServerRuntimeContext#getServerRuntimeContextService}, is also used by the {@link org.apache.vysper.xmpp.modules.core.im.handler.PresenceHandler}.