2026-09-19 22:40:48 +02:00
|
|
|
# Technology stack
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
## Managed runtime
|
2026-09-15 17:54:16 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
VoiceCat targets .NET 10. Shared libraries use plain `net10.0`; WinForms, AppKit, and UIKit are
|
|
|
|
|
leaf platform projects.
|
2026-09-15 17:54:16 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
| 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 |
|
2026-09-15 17:54:16 +02:00
|
|
|
|
2026-09-21 00:11:01 +02:00
|
|
|
NuGet packages and their lock files are committed. `scripts/check-licenses.ps1` enforces the
|
2026-09-19 22:40:48 +02:00
|
|
|
permissive-license policy.
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
## Native media
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
`native/media` builds one narrow library named `voicecat_media`:
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
- 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.
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
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.
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
## Platform clients
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
- 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.
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
## Licensing
|
2026-06-15 20:47:09 +02:00
|
|
|
|
2026-09-19 22:40:48 +02:00
|
|
|
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.
|