// the find
jookies/jasmin
Jasmin - Open source SMS gateway
Jasmin is a Python SMS gateway that speaks SMPP 3.4 (both client and server sides), exposes an HTTP API for sending, and uses RabbitMQ for queuing plus Redis for DLR tracking. It is aimed at telecom integrators and businesses that need to connect to carrier SMPP endpoints without paying for a commercial gateway.
The routing engine is genuinely flexible — you get regex filters, round-robin, failover, least-cost routing, and HLR lookup out of the box, which covers most real operator setups. The telnet-based jcli management interface lets you add/remove connectors and update routes without restarting anything, which matters when you are live with carriers. Built-in Prometheus metrics and pre-wired Grafana dashboards mean observability is not an afterthought. The test suite covers protocol-level SMPP behavior with a real simulator, not just unit mocks.
The whole stack is built on Twisted, which is old enough that most Python developers will need to relearn async patterns they have unlearned since asyncio became standard — debugging Twisted Deferred chains in 2026 is painful. Configuration is split across INI files, Redis, RabbitMQ, and the jcli session state, with no single source of truth; if the process crashes before config is persisted you can lose routing table changes silently. The REST API is a bolted-on Celery/Flask layer separate from the core Twisted daemon, meaning you are running two async runtimes side by side. Documentation is on ReadTheDocs but shows its age — many examples still assume Python 2 patterns and the Kubernetes manifests in the repo are bare pods with no resource limits or health checks.