Files
voice-cat/CLAUDE.md
T
Talon 08e6c5930a
Build and test / test (macos-latest) (push) Canceled after 0s
Build and test / test (ubuntu-24.04) (push) Canceled after 0s
Build and test / test (windows-latest) (push) Canceled after 0s
Build and test / apple-client (push) Canceled after 0s
Retire legacy implementations and flatten managed layout
2026-09-21 00:11:32 +02:00

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.proto is the control-plane wire schema.
  • src/VoiceCat.Protocol owns protobuf framing and generated types.
  • src/VoiceCat.Crypto owns TLS, TOFU, media AEAD, identity, and password hashing.
  • src/VoiceCat.Server owns the TLS/UDP server and SQLite state.
  • src/VoiceCat.Core owns client connection and protocol state.
  • src/VoiceCat.Audio, .Codec, and .Dsp own voice processing.
  • src/VoiceCat.Cli is the supported headless client.
  • clients/windows is the WinForms client.
  • clients/apple contains the AppKit and UIKit clients.
  • native/media and native/rnnoise are the required Opus/RNNoise native boundary.
  • native/apple/broadcast is 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.md concise; do not append a historical changelog.