Skip to content
Back to top
View this page

# Slixmpp

Slixmpp is an MIT licensed XMPP library for Python 3.7+,

Slixmpp’s design goals and philosophy are:

Low number of dependencies

  Installing and using Slixmpp should be as simple as possible, without having to deal with long dependency chains.

  As part of reducing the number of dependencies, some third party modules are included with Slixmpp in the `thirdparty` directory. Imports from this module first try to import an existing installed version before loading the packaged version, when possible.

Every XEP as a plugin

  Following Python’s “batteries included” approach, the goal is to provide support for all currently active XEPs (final and draft). Since adding XEP support is done through easy to create plugins, the hope is to also provide a solid base for implementing and creating experimental XEPs.

Rewarding to work with

  As much as possible, Slixmpp should allow things to “just work” using sensible defaults and appropriate abstractions. XML can be ugly to work with, but it doesn’t have to be that way.

## Here’s your first Slixmpp Bot:

    import asyncio
    import logging

    from slixmpp import ClientXMPP

    class EchoBot(ClientXMPP):

        def __init__(self, jid, password):
            ClientXMPP.__init__(self, jid, password)

            self.add_event_handler("session_start", self.session_start)
            self.add_event_handler("message", self.message)

            # If you wanted more functionality, here's how to register plugins:
            # self.register_plugin('xep_0030') # Service Discovery
            # self.register_plugin('xep_0199') # XMPP Ping

            # Here's how to access plugins once you've registered them:
            # self['xep_0030'].add_feature('echo_demo')

        def session_start(self, event):
            self.send_presence()
            self.get_roster()

            # Most get_*/set_* methods from plugins use Iq stanzas, which
            # are sent asynchronously. You can almost always provide a
            # callback that will be executed when the reply is received.

        def message(self, msg):
            if msg['type'] in ('chat', 'normal'):
                msg.reply("Thanks for sending\n%(body)s" % msg).send()

    if __name__ == '__main__':
        # Ideally use optparse or argparse to get JID,
        # password, and log level.

        logging.basicConfig(level=logging.DEBUG,
                            format='%(levelname)-8s %(message)s')

        xmpp = EchoBot('somejid@example.com', 'use_getpass')
        xmpp.connect()
        asyncio.get_event_loop().run_forever()

## Documentation Index

- Getting Started (with examples)
  - Slixmpp Quickstart - Echo Bot
  - Sign in, Send a Message, and Disconnect
  - Create and Run a Server Component
  - Manage Presence Subscriptions
  - Multi-User Chat (MUC) Bot
  - Send a Message Every 5 Minutes
  - Send/Receive IQ Stanzas
- Tutorials, FAQs, and How To Guides
  - How to Work with Stanza Objects
  - Creating a Slixmpp Plugin
  - Flexible internal API usage
  - How to Use Stream Features
  - How SASL Authentication Works
  - How to remove xmpp.process()
  - Using Stream Handlers and Matchers
  - XEP-0030: Working with Service Discovery
  - Following XMPP: The Definitive Guide
- API Reference
  - ClientXMPP
  - ComponentXMPP
  - BaseXMPP
  - Exceptions
  - Jabber IDs (JID)
  - Stanza Objects
  - Stanza Handlers
  - Stanza Matchers
  - XML Stream
  - XML Serialization
  - Internal “API”
- Core Stanzas
  - Root Stanza
  - Message Stanza
  - Presence Stanza
  - IQ Stanza
- Event Index
- Dedicated PubSub Events
- Coming from SleekXMPP
  - Differences from SleekXMPP
  - Using asyncio
- Slixmpp Architecture
  - The Foundation: XMLStream
  - Raising XMPP Awareness: BaseXMPP
  - ClientXMPP
  - ComponentXMPP

### Plugins

- Plugin index

## Additional Info

- License (MIT)

- Glossary

- Index

- Module Index

- Search Page

## Slixmpp Credits

Maintainers:

  - Florent Le Coz (louiz@louiz.org),

  - Mathieu Pasquet (mathieui@mathieui.net),

  - Emmanuel Gil Peyrot (Link mauve)

  - Maxime Buquet (pep)

Contributors:

  - Sam Whited (Sam Whited)

  - Dan Sully (Dan Sully)

  - Gasper Zejn (Gasper Zejn)

  - Krzysztof Kotlenga (Krzysztof Kotlenga)

  - Tsukasa Hiiragi (Tsukasa Hiiragi)

## SleekXMPP Credits

Slixmpp is a friendly fork of SleekXMPP which goal is to use asyncio instead of threads to handle networking. See Differences from SleekXMPP. We are crediting SleekXMPP Authors here.

Note

Those people made SleekXMPP, so you should not bother them if you have an issue with slixmpp. But it’s still fair to credit them for their work.

Main Author: Nathan Fritz

  fritzy@netflint.net, @fritzy

  Nathan is also the author of XMPPHP and Seesmic-AS3-XMPP, and a former member of the XMPP Council.

Co-Author: Lance Stout

  lancestout@gmail.com, @lancestout

Both Fritzy and Lance work for &yet, which specializes in realtime web and XMPP applications.

> - contact@andyet.net

> - XMPP Consulting

Contributors:

  - Brian Beggs (macdiesel)

  - Dann Martens (dannmartens)

  - Florent Le Coz (louiz)

  - Kevin Smith (Kev, http://kismith.co.uk)

  - Remko Tronçon (remko, http://el-tramo.be)

  - Te-jé Rogers (te-je)

  - Thom Nichols (tomstrummer)