# 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. `scripts/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.