Skip to main content

sipx

sipx is a SIP and VoIP stack in Rust for engineers building telephony systems. Use the sipx command for repeatable calls from a shell, or embed the crates for control over signalling, registration, calls, and media.

The current public prerelease is 1.0.0-rc.2. The latest main branch can move ahead of that release, and this website documents the branch. Public APIs are not frozen before 1.0: Supported APIs receive migration notes when they break, while Experimental APIs may change or be removed without one. For a reproducible installation, use the tagged release in Getting started.

Choose a path

Try the command line

Place or answer a call, register an address, play and record WAV audio, send DTMF, and emit machine-readable results:

cargo install --locked --version =1.0.0-rc.2 sipx-cli
sipx version

The CLI is designed for scripts and test calls. It reads and writes WAV files by default; builds with the optional device-audio feature can also open an exact microphone or speaker identifier. dial, answer, and register select UDP, TCP, TLS, WebSocket, or secure WebSocket, with mandatory certificate verification on secure paths.

Make a local call →

Use the Rust libraries

Take only the layer your application needs: the sans-I/O SIP and SDP cores, async transports, registration, RTP and media, or the complete call framework. The library transport layer supports UDP, TCP, TLS, WebSocket, and secure WebSocket.

Choose a crate →

What ships today

AreaAvailable
CallsPlace and answer, hold and resume, blind and attended transfer, session timers, bounded confirmed-dialog snapshots
RegistrationDigest authentication, lease refresh, Outbound flows, Path, Service-Route, GRUU, push-assisted refresh
AudioG.711, L16, DTMF, rate-converting PCM/WAV playback and recording; selectable Opus behind a Cargo feature
MediaRTP/RTCP, jitter buffering, quality statistics, ICE, SDES-keyed SRTP, optional DTLS-SRTP
TransportsUDP, TCP, TLS, WebSocket, secure WebSocket; live server-identity rotation and bounded endpoint policy/observation
SIP eventsInbound and outbound subscriptions, registration discovery, conditional presence publication, application-owned in-dialog requests
Operations and testsQuiet-by-default libraries, deterministic call and realtime peers, finite RTP echo, bounded signalling load responder
CoreSans-I/O parsing, transactions, dialogs, and SDP offer/answer

sipx is a user agent, not a proxy, registrar, or configuration-driven PBX. It does not route calls or store registrations for other endpoints. One narrow browser-audio profile composes WSS, ICE, DTLS-SRTP and Opus; TURN relay, video, and a general browser media stack remain outside the shipped surface. See Does sipx fit? for the boundary and the RFC compliance table for protocol-level detail.

Application host and contract

The workspace includes the sipx-host process. Document-mode webhooks can drive real calls, authenticated full-duplex sessions can replace call programs and originate calls, and a configured realtime binding can carry one routed G.711 call to one authenticated realtime WebSocket session. The Rust host surfaces are Supported under the pre-1.0 policy; the language-neutral sipx.app.v1 wire contract remains Experimental. The realtime contract is proven against a deterministic peer, but its credentialed live-endpoint interoperability proof has not yet been recorded. There is no embedded runtime or TypeScript SDK. See the Application host overview for that boundary.

Design guarantees

  • sipx-sip and sipx-sdp do no I/O: bytes and fired timers are explicit inputs.
  • Malformed network input returns typed errors; workspace code forbids unsafe.
  • Parsed messages preserve header fields that sipx does not interpret.
  • Examples in these guides are synchronized with source files compiled by CI.

Continue

Source is available on GitHub under MIT OR Apache-2.0.