The main window's NSSplitView panels (channel list, user list, chat, activity log) were collapsing to zero size because: 1. The scroll views inside the split views were missing translatesAutoresizingMaskIntoConstraints = false, so Auto Layout couldn't manage their sizes. 2. The inner split views were also missing it. 3. The voice panel had no height constraint, so it expanded to fill all available space (539px of the 600px window), starving the outer split view down to 1px tall. 4. The split views had no initial divider positions, so panels collapsed to zero even when the split view had space. Add translatesAutoresizingMaskIntoConstraints = false to all four scroll views and both inner split views, give the voice panel a 96px height constraint, and set initial divider positions after the window is on screen. The panels now get reasonable space, are visible on screen, and are reachable by VoiceOver.
VoiceCat
Self-hosted, native voice & text chat in the spirit of classic TeamSpeak / Mumble —
channel-based voice, channel + private text, one server you run yourself. Plain TCP
(control) and UDP (media), no WebRTC. Encrypted by default. A shared C++ core
(libvoicecat) drives native clients (Swift on macOS/iOS, C# on Windows) and the server.
Status: Design complete in
docs/. M1–M5 are implemented — real TLS control plane, encrypted UDP voice (Opus), multi-stream, TOFU identity pinning, channel tree, permissions, moderation, disconnect/keepalive/reaper. Windows WinForms C# client shipped (M4). macOS/iOS Swift client is next. SeePROGRESS.mdanddocs/roadmap.md.
Read the design first
The docs/ folder is the source of truth. Start at docs/README.md,
then architecture → protocol → voice → security → tech-stack → deployment →
roadmap.
Build
The default development preset is dev — it builds everything (server + tools + tests)
with real vcpkg deps. It works on Windows, Linux, and macOS (vcpkg triplet auto-resolved).
# one-time vcpkg setup:
git clone https://github.com/microsoft/vcpkg && ./vcpkg/bootstrap-vcpkg.sh # .bat on Windows
export VCPKG_ROOT=/path/to/vcpkg # Linux/macOS; or $env:VCPKG_ROOT on PowerShell
# configure + build + test:
cmake --preset dev
cmake --build --preset dev
ctest --preset dev # 21 behavior tests
Artifacts land in build/dev/bin/ (voicecat-server, vccli, voicecat-admin).
The skeleton preset (no vcpkg deps, stubs only) is a fast smoke check that needs no
third-party libraries:
cmake --preset skeleton && cmake --build --preset skeleton && ctest --preset skeleton
See docs/building.md for the full preset matrix (including release,
server-release, windows-client, and Apple platform scaffolding).
Layout
docs/ design spec (read this)
core/ libvoicecat — the shared C++ core
include/ voicecat.h (the C ABI all clients call)
proto/ voicecat.proto (control-plane wire format, source of truth)
src/ net/ crypto/ codec/ protocol/ session/ audio/ (stubs today)
server/ voicecat-server (headless; links the core)
tools/vccli/ headless test client — drives the protocol from M1 on
clients/ apple/ (Swift, M4) windows/ (C#, M4) — placeholders for now
tests/ CTest targets
License
Permissive-only dependencies (no GPL/LGPL) so the project can be redistributed freely,
including closed-source. Project license: TBD (see docs/tech-stack.md §5).