PyJabber is an asyncio server for Jabber/XMPP entirely written in Python, with minimal reliance on external libraries.
It strives to provide a simple, lightweight, and comprehensible codebase, featuring a modular structure.
While initially designed to fulfill the requirements of the multi-agent system SPADE, it can be easily customized to suit any other purpose.
- Free software: MIT license
- Documentation: https://pyjabber.readthedocs.io.
pip install pyjabber
The process of starting the server returns a coroutine, leaving it to the user to set up the required environment. The simplest approach is to use the asyncio.run function.
from pyjabber.server import Server
my_server = Server()
asyncio.run(my_server.start())This allows PyJabber to be treated as a regular task and integrated seamlessly into an asynchronous application.
import asyncio
from pyjabber.server import Server
async def counter():
while True:
await asyncio.sleep(1)
print(f"Hello World")
async def launch():
my_server = Server()
await asyncio.gather(my_server.start(), counter())
asyncio.run(launch())The CLI launcher is the fastest way to start using the server.
$ pyjabber
2024-12-18 09:03:22.880 - INFO: Starting server...
2024-12-18 09:03:22.881 - INFO: Client domain => localhost
2024-12-18 09:03:22.881 - INFO: Server is listening clients on [('127.0.0.1', 5222), ('158.42.155.44', 5222)]
2024-12-18 09:03:22.881 - INFO: Serving admin webpage on http://localhost:9090
2024-12-18 09:03:22.881 - INFO: Server is listening servers on [('0.0.0.0', 5269)]
2024-12-18 09:03:22.881 - INFO: Server started...
| Status | Description | |
|---|---|---|
| TLS | Implemented | v1.3. Localhost certificate included |
| SASL | Implemented | PLAIN, EXTERNAL (s2s) |
| Roster | Implemented | CRUD avaliable |
| Presence | Implemented (local bound) | Subscribe, Unsubscribed, Initial presence and Unavailable |
| Status | Description | |
|---|---|---|
| XEP-0004 | IMPLEMENTED | Dataforms |
| XEP-0030 | IMPLEMENTED | Service Discovery |
| XEP-0060 | IMPLEMENTED | Pubsub |
| XEP-0077 | IMPLEMENTED | In Band Registration |
| XEP-0199 | IMPLEMENTED | Ping |