2.0 KiB
2.0 KiB
VoiceCat developer guide
VoiceCat is a self-hosted encrypted voice and text chat system. The supported implementation
is .NET 10. Read AGENTS.md for working rules and PROGRESS.md for the current short status.
Build and test
./scripts/build-native.ps1
dotnet restore VoiceCat.slnx --locked-mode
dotnet build VoiceCat.slnx -c Release --no-restore
dotnet test VoiceCat.slnx -c Release --no-build
./scripts/check-licenses.ps1
Apple client builds require macOS, Xcode, and the .NET macOS/iOS workloads:
./scripts/build-native-ios.sh
dotnet restore clients/apple/VoiceCat.Apple.slnx
dotnet build clients/apple/VoiceCat.Apple.slnx -c Debug --no-restore
Windows publishing uses clients/windows/publish-client.ps1. Server publishing uses
scripts/publish-server.ps1.
Current architecture
proto/voicecat.protois the control-plane wire schema.src/VoiceCat.Protocolowns protobuf framing and generated types.src/VoiceCat.Cryptoowns TLS, TOFU, media AEAD, identity, and password hashing.src/VoiceCat.Serverowns the TLS/UDP server and SQLite state.src/VoiceCat.Coreowns client connection and protocol state.src/VoiceCat.Audio,.Codec, and.Dspown voice processing.src/VoiceCat.Cliis the supported headless client.clients/windowsis the WinForms client.clients/applecontains the AppKit and UIKit clients.native/mediaandnative/rnnoiseare the required Opus/RNNoise native boundary.native/apple/broadcastis the required Swift ReplayKit extension.
Invariants
- TLS control and encrypted UDP media are mandatory; do not add plaintext transports.
- No GPL or LGPL dependencies.
- Audio callbacks must not allocate, lock, block, or perform network I/O.
- Treat
proto/voicecat.proto, persisted database formats, and the ReplayKit ring layout as explicit versioned contracts. - A passing build is not enough: add or update behavior tests for observable changes.
- Keep
PROGRESS.mdconcise; do not append a historical changelog.