Why I Built Vox
I was building a macOS app that needed voice input. Mic permissions, audio capture, model loading, keeping things warm so the first command doesn't lag. Then the app needed spoken output. Then I needed the same capabilities in a browser surface and a local tool. Each time I was solving the same runtime problems again.
So I pulled the runtime out into its own thing. That's Vox.
The interesting part isn't the runtime
There are already strong speech models. What's less fun is everything around them: permissions, capture, playback, model lifecycle, warm-up, multi-client ownership, and figuring out where latency actually went.
These are solved problems individually, but every product assembles them again. Vox puts the Apple-native engine surface in Swift, exposes the same lifecycle through Vox Companion for browser and local-tool integrations, and keeps warm-up and telemetry visible across both modes.
Why open source it
Honestly, I'd use it myself either way. But it seemed like the kind of thing that might save someone else a few weekends. If you're building a voice feature, the runtime should not be the hard part. The hard part should be whatever you're actually making.
The internals are intentionally visible. Warm-up is a public API. Stage timings come back with transcription and synthesis. Client identity flows through telemetry so you can tell which integration is slow.
Where it's going
Vox supports multiple ASR and TTS providers. The provider protocol lets external processes report models, preload them, transcribe files, list voices, and synthesize audio without taking on runtime or session ownership.
I don't have grand plans for this. If people find it useful, great. If not, I'll keep using it for my own projects. The code is open source and the docs are up.
Get started
git clone https://github.com/arach/vox.git && cd vox
bun install && bun run build
node packages/cli/dist/index.js daemon start
node packages/cli/dist/index.js doctorFour commands, a working local runtime. The docs cover the Swift embed, browser, SDK, provider, and observability paths.