VoiceCat .NET implementation
This is the supported VoiceCat implementation. It contains the protocol, TLS and media cryptography, server, client state, codec/DSP bindings, audio engine, and headless CLI.
Build and test
Stage the small native Opus/RNNoise library, then build the managed solution:
./dotnet/build-native.ps1
dotnet restore dotnet/VoiceCat.slnx --locked-mode
dotnet build dotnet/VoiceCat.slnx -c Release --no-restore
dotnet test dotnet/VoiceCat.slnx -c Release --no-build
./dotnet/check-licenses.ps1
The native source lives in native/media and native/rnnoise; build output is staged under
dotnet/artifacts/native. The shim exposes only fixed Opus/DRED and RNNoise entry points. It
does not contain protocol, networking, cryptography, client state, or server behavior.
For an explicit native build:
cmake -S native/media -B dotnet/artifacts/native-build -DCMAKE_BUILD_TYPE=Release
cmake --build dotnet/artifacts/native-build --target voicecat_media --parallel 2
cmake --install dotnet/artifacts/native-build --component DotnetMedia \
--prefix dotnet/artifacts/native
Projects
VoiceCat.Protocol— generated protobuf types and bounded control framing.VoiceCat.Crypto— BouncyCastle TLS 1.3/exporters, TOFU, identity, AEAD, replay protection, and Argon2id.VoiceCat.Codec/VoiceCat.Dsp— managed owners of the narrow native media ABI.VoiceCat.Audio— jitter, loss recovery, mixing, input activation, and PCM rings.VoiceCat.Core— managed client connection and session state.VoiceCat.Server— TLS control, encrypted UDP relay, SQLite state, administration, and CLI.VoiceCat.Cli— supported interactive and deterministic headless client.VoiceCat.Tests— managed unit, integration, allocation, and end-to-end behavior tests.
proto/voicecat.proto is the only protobuf schema. Generated C# is build output.
Run
dotnet run --project dotnet/src/VoiceCat.Server -- --data-dir ./voicecat-data
dotnet run --project dotnet/src/VoiceCat.Cli -- \
--host 127.0.0.1 --port 8384 --nickname Alice --trust-first
Use --help on either executable for current options. Server publishing is handled by
dotnet/publish-server.ps1 and the platform packaging files under packaging/.
Compatibility policy
The managed implementation is the source of truth. Frozen vectors under
tests/VoiceCat.Tests/Fixtures protect concrete wire, Argon2id, and RNNoise behavior, but the
repository no longer builds or tests against the retired C++ implementation. Protocol or
persistence changes must be versioned when current supported releases need migration; they do
not need to retain compatibility with unsupported pre-rewrite releases.