Files
voice-cat/docs/tech-stack.md
T
Talon c9ed832459
.NET port / test (macos-latest) (push) Canceled after 0s
.NET port / test (ubuntu-24.04) (push) Canceled after 0s
.NET port / test (windows-latest) (push) Canceled after 0s
.NET port / apple-client (push) Canceled after 0s
Retire legacy sources and verify managed iOS deployment
2026-09-19 22:40:48 +02:00

2.0 KiB

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.