xmpp stack decision

This commit is contained in:
ben
2026-04-14 15:33:18 -04:00
parent c72b1d8aba
commit e706294cc5
2 changed files with 68 additions and 4 deletions

62
pm/xmpp-lib-decision.org Normal file
View File

@@ -0,0 +1,62 @@
#+title: 0.1.3 XMPP Event Model and Library Choice
#+created: [2026-04-14 Tue 15:05]
#+updated: [2026-04-14 Tue 15:20]
* initial research and recommendation
Slixmpp is an MIT-licensed XMPP library for Python 3.11+.
It is a fork of SleekXMPP and uses Rust for some performance-sensitive modules. In practice that means:
- Python app, not Rust app
- usually installable via PyPI wheels
- if wheels are unavailable, cargo may be needed to build the extension module
- maintained enough to be a sane v0 choice
For this bridge, slixmpp is the best MVP pick.
* minimum viable raw xmpp
If we do not use a library, we would need to implement the XMPP client plumbing ourselves:
- TCP + XML stream handling
- SASL auth
- TLS
- stanza parsing/serialization
- MUC join/leave semantics
- keepalive/reconnect handling
- duplicate/self-message suppression rules on top
Pros:
- maximum control
- fewer dependencies
- easier to trim down to exactly what we need
Cons:
- you are writing a mini XMPP client anyway
- more edge cases
- slower to reach a reliable relay
- easier to get auth/reconnect/MUC details subtly wrong
For v0, that trade is not worth it.
* event model we actually need
| event | use |
|----------------------+----------------------------------|
| connect/auth | establish session |
| self-presence | confirm MUC join before relaying |
| groupchat message | relay input |
| presence join/part | ignore or log only |
| subject/topic change | optional log only |
| disconnect/error | reconnect handling |
* recommendation
Use slixmpp for the XMPP side.
Why:
- it covers the protocol plumbing we do not want to hand-roll
- it is a straightforward bot/daemon fit
- it lets us focus on bridge behavior, not XML socket mechanics
- it is good enough for a single-room relay MVP
* summary
Use slixmpp unless we deliberately choose to prototype a raw XMPP client first.
The bridge only needs a narrow slice of XMPP. Slixmpp gives us that slice without forcing us to reinvent session management, MUC join semantics, or reconnect logic.