vani

Vani Voice

A Cloudflare-native voice session runtime (Durable Objects + Workers AI) with a shared client contract, a headless React hook, and an optional UI layer.

@shvm/vani-client/shared

Types + websocket contract to keep client/server in lockstep.

@shvm/vani-client/headless

A React hook + client state machine for managing session lifecycle.

@shvm/vani-client/ui

A mobile-friendly reference UI.

Styling is currently inherited from the host app’s Tailwind/CSS (isolation later).

Motivation

Make the voice session a first-class, stateful primitive (Durable Object per session) and keep client and server locked via a shared typed contract.

Cost Model (rough)

Aim for a cheap control plane (Workers + DOs) and push costs into model usage. Your bill depends on model choice, audio volume, and concurrency.

Compared To

Vapi is a managed voice platform; LiveKit is a real-time media SFU. Vani is a small, self-hostable voice agent runtime over websocket + DO state.

Default server: https://shvm.in