I’m building Ruf, a compact, open-source SIP softphone using Rust, Tauri 2, Svelte and baresip.

It connects to an existing SIP account or telephone system. The current release is 0.1.1 Developer Preview, and I’m looking for feedback on the implementation, desktop experience and compatibility.

Keeping telephony outside the webview

The interface is built with Svelte, but SIP signaling and audio run natively through baresip.

The project has three main Rust packages:

  • phone-core contains shared contracts and validation, independently of Tauri.
  • baresip-adapter contains the native integration and C/FFI boundary.
  • sip-desktop connects the engine to Tauri commands, storage and desktop features.

TypeScript IPC contracts are generated from Rust through ts-rs.

One deliberate choice is to keep audio in a single native pipeline. Selecting a microphone, playing a ringtone and handling call audio all go through baresip the frontend doesn’t run a separate browser audio implementation.

Baresip runs inside the application process. That avoids a separate local control service, but it also means a native crash can bring down the desktop app. It’s a tradeoff worth being explicit about.

What works so far

Ruf currently includes:

  • Up to eight saved SIP accounts with a selectable outgoing identity.
  • Incoming and outgoing calls, mute, hold, DTMF, direct and attended transfers.
  • Separate microphone, call-speaker and ringtone outputs.
  • macOS contacts, local call history, tray operation and keyboard shortcuts.
  • German and English interfaces.

Passwords use macOS Keychain or Windows Credential Manager.

For testing, I use Asterisk and my UniFi setup to check calls and audio. Interface tests run separately with synthetic states.

What still needs work

The current targets are macOS 14+ on Apple Silicon and Windows 11 x64. Windows is still experimental, and I don’t have a Windows machine myself, which makes testing physical audio devices and everyday desktop behavior harder.

Linux support is planned.

This is a preview for controlled test environments. Compatibility with more telephone systems, real headsets and different network setups still needs testing. The current macOS download is not notarized, and the Windows installer is unsigned.

Free on GitHub

Ruf will remain free and open source on GitHub, with no in-app purchases.

I’m considering an optional paid Mac App Store version to help cover distribution costs. The GitHub version will remain free.

Source code, downloads and setup instructions

I’d appreciate feedback from anyone working with Rust, Tauri, desktop audio or SIP. Code reviews, usability suggestions and compatibility reports would all help.