Documentation

Everything you need to get started with Aria on desktop, mobile, or self-hosted.

1 Desktop App

Setup Wizard: When you first launch Aria, a friendly setup wizard guides you through configuration β€” no manual setup required!

  1. 1

    Enter your SIP server

    Type your provider's SIP domain (e.g., sip.example.com)

  2. 2

    Enter your credentials

    Your SIP username and password from your provider

  3. 3

    Click Connect

    Aria registers automatically and shows "Connected" when ready

Desktop Tech Stack

Framework
Tauri 2.0 (Rust backend + webview)
Frontend
React 19 + TypeScript + Material UI
SIP
aria-sip-core (Rust, custom implementation)
Media
rtp-engine (Rust, custom RTP + codecs)
Installer size
~10 MB
Codecs
PCMU, PCMA, Opus, G.729

2 Mobile Apps

How Mobile Works

Mobile devices can't maintain persistent SIP registrations β€” the OS kills background connections to save battery. Aria solves this with a push gateway that keeps your SIP registration alive and wakes the app via push notifications when a call arrives.

iOS

  • CallKit β€” native iOS call UI
  • PushKit β€” VoIP push via APNs
  • CNContactStore β€” contacts integration
  • Built with SwiftUI

Android

  • ConnectionService β€” native call management
  • FCM β€” high-priority data messages
  • Material You β€” dynamic color theming
  • Built with Jetpack Compose

Both apps share the same Rust engine (aria-mobile-core) via UniFFI-generated native bindings. SIP signaling, RTP media, and codec negotiation are identical across platforms.

3 Push Gateway

The Aria Push Gateway is a self-hosted Rust server that bridges your SIP server with mobile push notifications. It acts as a SIP B2BUA (Back-to-Back User Agent), maintaining registrations on behalf of mobile devices and routing calls through push notifications when the app isn't running.

Required for mobile apps. Without the push gateway, mobile devices cannot receive incoming calls when the app is in the background.

Technical Specifications

Language
Rust
HTTP server
Axum (async, Tokio-based)
Database
SQLite (no external DB needed)
Auth
JWT tokens + API key
Push providers
Apple APNs (VoIP) + Google FCM
SIP transport
UDP (TCP/TLS planned)
Min. requirements
1 vCPU, 256 MB RAM
Binary size
~10 MB static binary

REST API

Method Path Description
POST/v1/auth/tokenCreate JWT token
POST/v1/devicesRegister device for push
GET/v1/devices/{id}Get device + SIP status
DELETE/v1/devices/{id}Unregister device
POST/v1/callsInitiate outgoing call
GET/v1/calls/{token}Get incoming call offer
POST/v1/calls/{token}/acceptAccept with SDP answer
POST/v1/calls/{token}/rejectReject call (sends 603)
POST/v1/calls/{token}/hangupHang up (sends BYE)

Self-Hosting

# Build
cargo build --release
# Binary at target/release/aria-gateway
# Configure
cp gateway.example.toml gateway.toml
# Set auth.secret, APNs key path, FCM credentials
# Run
./target/release/aria-gateway --config gateway.toml
# Docker
docker build -f push-gateway/Dockerfile -t aria-gateway .
docker run -d -p 8080:8080 -v /path/to/data:/data aria-gateway

Requirements: UDP connectivity to your SIP server, outbound HTTPS to APNs/FCM, TLS termination via reverse proxy (nginx, Caddy, Traefik).

4 Core Libraries

Aria's SIP and media stack is built from scratch in Rust and shared across every platform. These crates are the foundation of the entire ecosystem.

aria-sip-core

SIP protocol library

GitHub →

Complete SIP message parsing, construction, and digest authentication. Used by the desktop app, mobile core, and push gateway for protocol-level operations.

Parsing
Request/response, headers, URIs
Auth
MD5 digest, nonce handling
Builders
REGISTER, INVITE, ACK, BYE
SDP
Offer/answer, codec negotiation
Transport
UDP, TCP (async via Tokio)
Deps
Zero external SIP deps

rtp-engine

RTP media engine

GitHub →

Handles all real-time media: RTP packet construction, codec encoding/decoding, jitter buffering, and audio device I/O. Runs on desktop and mobile.

Codecs
PCMU, PCMA, Opus, G.729
Audio
cpal (cross-platform I/O)
Jitter buffer
Adaptive, configurable depth
DTMF
RFC 2833 telephone events
Recording
WAV capture (desktop)
Networking
Async UDP via Tokio

aria-mobile-core

Shared mobile engine

GitHub →

The bridge between the Rust core and native mobile platforms. Wraps aria-sip-core and rtp-engine into a single AriaMobileEngine interface, then uses UniFFI to generate Swift and Kotlin bindings automatically.

FFI
UniFFI v0.28 (UDL definitions)
Targets
iOS (arm64), Android (arm64, armv7, x86_64)
Gateway client
REST API (reqwest + JSON)
Call state
Idle, Ringing, Connected, Ended
Features
Make/answer/reject/hangup, mute, hold, DTMF
Output
XCFramework (iOS) + AAR (Android)

Keyboard Shortcuts (Desktop)

Open dialer
⌘ D
Make/answer call
⌘ Enter
End call
⌘ K
Toggle mute
⌘ M
Toggle hold
⌘ H
Toggle recording
⌘ R
Open settings
⌘ ,

Note: On Windows/Linux, replace ⌘ with Ctrl

Need more help?

Check out the repositories on GitHub or open an issue.