2.4 KiB
2.4 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
./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
Apple client builds require macOS, Xcode, and the .NET macOS/iOS workloads:
./dotnet/build-native-ios.sh
dotnet restore clients/apple/dotnet/VoiceCat.Apple.slnx
dotnet build clients/apple/dotnet/VoiceCat.Apple.slnx -c Debug --no-restore
Windows publishing uses clients/windows/publish-client.ps1. Server publishing uses
dotnet/publish-server.ps1. See docs/building.md while it is being rewritten; prefer the
scripts themselves when historical text disagrees with them.
Current architecture
proto/voicecat.protois the control-plane wire schema.dotnet/src/VoiceCat.Protocolowns protobuf framing and generated types.dotnet/src/VoiceCat.Cryptoowns TLS, TOFU, media AEAD, identity, and password hashing.dotnet/src/VoiceCat.Serverowns the TLS/UDP server and SQLite state.dotnet/src/VoiceCat.Coreowns client connection and protocol state.dotnet/src/VoiceCat.Audio,.Codec, and.Dspown voice processing.dotnet/src/VoiceCat.Cliis the supported headless client.clients/windowsis the WinForms client.clients/apple/dotnetcontains the AppKit and UIKit clients.native/mediaandnative/rnnoiseare the required Opus/RNNoise native boundary.native/apple/broadcastis the required Swift ReplayKit extension.
The old C++ implementation and old Swift applications are unsupported retirement sources. They are not architectural authorities and compatibility with them is not a requirement.
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.