Amen monogramamenophis.devvoice ai · agents · infrastructure
All work
Ecosystem · Go · RustShipping

xPhone

A phone line for your code — SIP and RTP implemented from scratch. Native libraries for Go and Rust hand you call audio as PCM frames; xbridge brings the same phone line to every other language; and test tooling lets you build without a live trunk. Battle-tested across 500,000+ production calls.

Stack

Repositories

Five repositories, one stack. Start from the language you are writing in; the rest are there when you need them.

RepositoryLanguageWhat it is forState
xphone-goGoThe library. SIP + RTP in-tree, PCM frames on a channel.Production
xphone-rustRustThe same phone line for Rust — zero telephony crate dependencies.Production
xbridgeRustPhone calls for every other language: SIP in, WebSocket audio + REST out. Twilio-compatible framing.Production
fakepbxGoIn-process SIP server for tests. Real SIP over loopback, no Docker.Testing
xpbxGoA real PBX in one docker run — Asterisk plus a web UI. The five-minute test bench.Test bench

Pick by language first · xbridge if your language isn't listed · fakepbx and xpbx are for testing what you build

Measured

Under load

StageValueNote
Concurrent calls tested50single instance, residential trunk
Production calls to date500,000+across deployments
Frame cadence20 msPCM frames on a Go channel
Telephony dependencies0SIP and RTP implemented in-tree

Figures published with the phone-line note · measured, not modelled

Shape

What it is

xPhone is an embedded telephony data plane: dial out, answer calls on any SIP trunk, or accept them as a SIP server — call audio arrives as PCM frames, ready for STT or a voice agent.

The core is a library, not a server: xphone-go and xphone-rust drop into your process — no Asterisk, no container, nothing to supervise. Not writing Go or Rust? xbridge speaks SIP on one side and WebSocket audio + REST on the other, so any language can place and take calls with Twilio-compatible framing. And fakepbx and xpbx give you a real SIP server for tests without a live trunk.

Pair it with cadence for the engine layer.

Limitations
Codec support is deliberately narrow. If you need transcoding, put a media server in front — this is the data plane, not a PBX.
Explore

Related