2026-09-19 22:40:48 +02:00
|
|
|
# VoiceCat developer guide
|
2026-06-15 21:09:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
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.
|
2026-06-15 21:09:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
## Build and test
|
2026-06-15 21:09:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
```bash
|
2026-09-21 00:11:01 +02:00
|
|
|
./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
|
2026-09-15 17:54:16 +02:00
|
|
|
```
|
|
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
Apple client builds require macOS, Xcode, and the .NET macOS/iOS workloads:
|
2026-06-15 21:09:09 +02:00
|
|
|
|
|
|
|
|
```bash
|
2026-09-21 00:11:01 +02:00
|
|
|
./scripts/build-native-ios.sh
|
|
|
|
|
dotnet restore clients/apple/VoiceCat.Apple.slnx
|
|
|
|
|
dotnet build clients/apple/VoiceCat.Apple.slnx -c Debug --no-restore
|
2026-06-15 21:09:09 +02:00
|
|
|
```
|
|
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
Windows publishing uses `clients/windows/publish-client.ps1`. Server publishing uses
|
2026-09-21 00:11:01 +02:00
|
|
|
`scripts/publish-server.ps1`.
|
2026-06-18 03:16:01 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
## Current architecture
|
2026-06-18 03:16:01 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
- `proto/voicecat.proto` is the control-plane wire schema.
|
2026-09-21 00:11:01 +02:00
|
|
|
- `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.
|
2026-09-19 22:40:48 +02:00
|
|
|
- `clients/windows` is the WinForms client.
|
2026-09-21 00:11:01 +02:00
|
|
|
- `clients/apple` contains the AppKit and UIKit clients.
|
2026-09-19 22:40:48 +02:00
|
|
|
- `native/media` and `native/rnnoise` are the required Opus/RNNoise native boundary.
|
|
|
|
|
- `native/apple/broadcast` is the required Swift ReplayKit extension.
|
2026-06-18 03:16:01 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
## Invariants
|
2026-07-03 10:42:42 +01:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
- 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.
|