Files
voice-cat/docs/tech-stack.md
T

44 lines
2.0 KiB
Markdown
Raw Normal View History

# Technology stack
## Managed runtime
VoiceCat targets .NET 10. Shared libraries use plain `net10.0`; WinForms, AppKit, and UIKit are
leaf platform projects.
| Area | Technology | Notes |
|---|---|---|
| Control schema | Protocol Buffers / Google.Protobuf | `proto/voicecat.proto` is authoritative |
| TLS 1.3/exporters | BouncyCastle.Cryptography | Managed TLS is required for exporter-derived media keys |
| Media AEAD | System.Security.Cryptography ChaCha20Poly1305 | Managed fallback is behavior-tested |
| Passwords | Konscious Argon2id | Bounded parameters, PHC strings |
| Persistence | Microsoft.Data.Sqlite | Server-local SQLite with explicit migrations |
| Tests | xUnit | Unit, socket integration, allocation, CLI, and production-package checks |
NuGet packages and their lock files are committed. `dotnet/check-licenses.ps1` enforces the
permissive-license policy.
## Native media
`native/media` builds one narrow library named `voicecat_media`:
- Opus 1.5.2, checksum-pinned and built with DRED/Deep PLC support.
- RNNoise, vendored under `native/rnnoise` at the repository-pinned source/model revision.
The shim contains codec and denoiser entry points only. Managed code owns networking, crypto,
jitter, mixing, state, and lifecycle. CMake is retained solely for this boundary and its Apple
static archives.
## Platform clients
- Windows: .NET WinForms for mature UI Automation and screen-reader behavior.
- macOS: .NET AppKit for direct accessibility and Core Audio/ScreenCaptureKit control.
- iOS: .NET UIKit for direct VoiceOver and AVAudioSession lifecycle control.
- iOS broadcast upload: Swift/ReplayKit under `native/apple/broadcast`; it writes PCM to the
frozen App Group ring and deliberately does not host .NET or the protocol stack.
## Licensing
GPL and LGPL dependencies are forbidden. Current production dependencies are permissively
licensed; RNNoise code is BSD-3-Clause and its model data is CC0. Preserve license notices in
published native artifacts.