# 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: ```powershell ./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: ```bash 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 ```powershell 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.