From Kannel to Kamex: My Journey Modernizing an SMS Gateway
💾 Source Code & Downloads
Kannel is an open-source SMS gateway - HTTP, SMPP, the works. Been around since the early 2000s. Originally a WAP gateway too, but WAP is dead. Time to evolve.
Why Fork Kannel?
Kannel 1.4.5 simply won’t build on modern distributions like Rocky Linux 10. Even after fixing build issues, it kept crashing with Redis DLR storage. The only distro still shipping Kannel packages is Debian 12 - with ancient libraries, barely holding together.
As a Rocky Linux shop, I wasn’t thrilled about running Debian servers just for SMS. So I grabbed an SVN snapshot (has Redis fixes), stripped out 20 years of cruft, and made it work. Here’s what got nuked:
Removed:
- WAP gateway, WML scripts, RADIUS auth, SOAP/ParlayX
- Dead SMSC protocols: CIMD, OIS, SEMA, EMI/X.25
- Legacy cruft: Solaris support, SQLite2, libxml2, old Debian packaging
Fixed:
- Build system and Makefiles - actually compiles on modern distros
- SSL certs (1024-bit MD5 → 2048-bit SHA256 for OpenSSL 3.x)
- Systemd services with security hardening (no more init.d or root)
- Broken test suite
- General code cleanup
What’s New
- Docker images on ghcr.io, ready-to-use docker-compose
- RPM packages for Rocky/RHEL 10
- Built-in admin panel for monitoring
- JSON API:
/health,/status.json, JSON sendsms - GitHub Actions CI/CD
Benchmarks
Intel i5-13500:
| Test | Throughput | Latency |
|---|---|---|
| HTTP API | ~14,000 req/sec | - |
| SMS/SMPP | ~16,000 msg/sec | 80ms avg |
Kamex powers Sender.ge - millions of SMS in production with Valkey for DLR storage.
This was a fun project and I’ll keep maintaining it. If you’re thinking “why not rewrite in Rust or Go?” - Kamex keeps full Kannel config compatibility. Migration is a piece of cake - just drop in your existing config and go.
Check kamex.dev for quickstart guides. Issues? GitHub.
Reach out on X @vaska94.