Engineering Deep Dive
A detailed look at how Meow delivers native performance, crystal-clear audio, and rock-solid SIP connectivity, all in a lightweight package.
Five cleanly separated layers with one-way dependencies. Each layer only talks to the one directly below it.
Custom audio backend built for VoIP. Not a generic media player repurposed for calls.
Meow gives the SIP stack its own audio driver and drives the PulseAudio client API, which pipewire-pulse serves. Every call shares the one device. PipeWire 0.3.50 or newer is required, and ships as standard on every supported distribution.
Mono S16 at 48 kHz, with the buffer target set to a single 20 ms call frame (960 samples). The rate matches the sound server's own graph, so nothing resamples in the middle of a call.
Streams open with PA_STREAM_ADJUST_LATENCY, so rate matching is the server's job rather than a free-running clock in the client. Getting that backwards is what produces the drift and robot voice that plague softphones across distributions.
Streams are created when a call starts and released eight seconds after the last one ends. Your desktop's recording indicator is lit while you are on a call, not for as long as Meow is running.
Audio Pipeline Configuration
─────────────────────────────
Sample rate: 48 kHz
Channels: Mono (S16LE)
Frame: 960 samples (20 ms)
Buffering: PA_STREAM_ADJUST_LATENCY
Stream role: media.role = phone
Lifetime: per call, released after 8 s idle
Echo canceller: Speex, 200 ms tail, with AGC
Platform backends:
Linux → libpulse → pipewire-pulse (>= 0.3.50)
Windows → WASAPI shared mode (eCommunications)State-machine-driven call handling on a thread-safe SIP engine.
Single source of truth for call state. Transitions are atomic and thread-safe via Qt signal/slot.
The SIP stack (re and baresip) runs on its own event-loop thread. Every event is marshaled to the Qt UI thread, and the UI reaches the stack only through its lock, so nothing races.
Digits for IVR navigation, sent as RFC 2833 events in the audio stream by default, or as SIP INFO messages for PBXes and trunks that need them. Chosen in Settings.
Record calls to WAV files on demand or automatically. Recordings are stored locally with per-call metadata and can be played back from the call history.
Incoming calls are matched against contacts using phone number normalization with country code awareness.
Cryptographically sound licensing with hardware-bound activation.
An anonymous, multi-factor hardware fingerprint uniquely identifies each device. The fingerprint is stable across reboots and cannot be used to identify you personally.
License tokens are cryptographically signed by the server. The client verifies them offline using an embedded certificate, so no network is needed for validation.
Server-side hardware matching prevents trial resets. Reinstalling the OS or clearing local storage won't grant a new trial: the server remembers your device.
SRTP media encryption is supported and negotiated automatically when the SIP server supports it. TLS is available for signaling encryption.
Native code means native performance. No runtime overhead, no garbage collector pauses.
Application memory. Figures for other clients are typical published values, not our own measurements.
A task manager will show a larger number than 60 MB, so here is the whole picture. Roughly 60 MB is Meow. The rest is the graphics driver and the toolkit, which every desktop application pays for and mostly shares with the other programs you are running.
| Component | Resident | Proportional |
|---|---|---|
| Application memory (heap)Meow's own allocations, plus what the GL driver allocates in it | 63 MB | 63 MB |
| GPU driver stackshared with every GPU client | 51 MB | 25 MB |
| Qt, bundled in the AppImageshared from a .deb or .rpm | 42 MB | 42 MB |
| System librariesglibc, the sound server client and friends | 39 MB | 10 MB |
| Anonymous memorythread stacks, Qt scene graph, QML engine | 14 MB | 14 MB |
| Other bundled librariesthe SIP stack, OpenSSL, SQLite, Opus | 10 MB | 10 MB |
| meow-sip binarythe executable itself | 9 MB | 9 MB |
| Fonts and other files | 9 MB | 5 MB |
| Total | 237 MB | 179 MB |
Resident counts a shared page once for every program using it. Proportional divides it between them, so it is the fairer figure for what Meow costs your machine.
Measured on the release AppImage, idle and registered, on Fedora with an NVIDIA GPU. Every package bundles its own Qt, so the format you install should make little difference to this table.
The graphics row is the one that moves. It is an NVIDIA driver here; with no GPU driver at all (Qt's software renderer), the same build sits at 141 MB resident rather than 237 MB, and its heap at 49 MB rather than 63 MB. A lighter driver lands somewhere between the two, and none of that difference is Meow.
Each row is rounded to the nearest megabyte, so the rows sum to within 1 MB of the totals rather than exactly.
Truly native on each platform. Not a cross-platform wrapper with platform quirks.
Built on re and baresip, a BSD-licensed open-source SIP stack. Standards-first, vendor-agnostic.
SIP: Session Initiation Protocol
RTP: Real-Time Transport Protocol
DTMF Tones via RTP Payloads
SRTP: Secure Real-Time Transport
SIP: Locating SIP Servers
SIP INFO Method (DTMF)
SIP REFER: Call Transfer
SIP Replaces: Attended Transfer
Dialog Event Package (BLF)
Message Waiting Indication
Reliable Provisional Responses
STUN: NAT Traversal
Ready to experience a truly native SIP client?
Start 14 Days Free Trial