// the find
fonoster/routr
⚡ The future of programmable SIP servers.
Routr is a programmable SIP proxy, registrar, and location server built in TypeScript, designed to run on Kubernetes and Docker. It targets telecom carriers and VoIP integrators who want a cloud-native alternative to Kamailio or OpenSIPS. The v2 architecture is microservice-based, with gRPC between components and a plugin model for custom processors and middleware.
- The Processor/Middleware split is genuinely well thought out — feature logic lives in Processors, cross-cutting concerns (auth, rate limiting) live in Middleware, each with the same interface. This keeps routing code from becoming a monolith.
- Kubernetes-first with a real Helm chart and multi-component architecture (edgeport, dispatcher, location, registry as separate services) means you can scale the hot path independently of the management plane.
- Redis-backed location service as an alternative to in-memory is a practical choice for multi-node deployments — avoids the split-brain registration problem that kills naive SIP proxies at scale.
- SIPp scenario files are checked in under etc/scenarios, which means actual protocol-level regression testing rather than just unit tests. Most SIP projects skip this entirely.
- STIR/SHAKEN is listed as not implemented. For any carrier-grade deployment in North America this is a compliance blocker, not a nice-to-have — calls without attestation get flagged as spam by downstream carriers.
- The monorepo uses Lerna with per-module npm packages, which means the local dev story involves coordinating package symlinks and build order across mods/. The one-click Gitpod path hides this pain but you'll hit it immediately in a real development setup.
- The Node SDK examples use CommonJS require() syntax with no ESM alternative shown, and the TypeScript in the Processor example leaks type annotations into JS output (req: MessageRequest in a .js file). Small thing, but suggests the SDK isn't regularly tested as a plain JS consumer.
- No web UI is on the roadmap — the CTL is interactive (prompts, not flags) which makes scripting and CI-driven provisioning awkward. Automating trunk setup means shelling out and parsing stdout.