AI Voice is a hands-free chat client for large language models. One microphone, five providers (Anthropic, OpenAI, OpenRouter, Gemini, GLM), nine UI languages — and a CarPlay companion so the same conversation continues from your pocket to the dashboard.
The problem
Every LLM provider ships its own chat app, every chat app assumes a keyboard, and none of them follow you into the car. AI Voice is a single voice-first UI that talks to whichever model you prefer, keeps the full thread on-device, and never forces you to retype the same context twice.
What it does
- Voice-first conversation — push-to-talk, tap-to-interrupt, and a streaming voice response from the active model. Speech recognition runs on-device via
expo-speech-recognition. - Multi-provider — Anthropic Claude, OpenAI, OpenRouter, Gemini and GLM, each with their own model picker. Switch mid-thread; the conversation history follows the model.
- BYO keys, on-device — API keys live in
expo-secure-store; conversations live inexpo-sqlite. There is no backend — every request goes straight from device to provider. - Nine languages — full
i18nexttranslation pipeline with extract / validate / sync CLI tooling. - CarPlay — a voice-only template that lets the driver continue their thread without touching the phone.
- PIN lock & monetization — optional PIN gate via
expo-local-authentication; subscription handling via RevenueCat.
Tech stack
- App: Expo SDK 54, React Native 0.81, React 19 (New Architecture)
- Navigation: @react-navigation/native + native-stack
- State: Zustand stores, MMKV persistence
- Speech:
expo-speech-recognition(STT) +expo-speech(TTS) - LLMs: @anthropic-ai/sdk + native fetch clients for OpenAI / OpenRouter / Gemini / GLM
- Storage: expo-sqlite (threads), expo-secure-store (API keys), AsyncStorage (settings)
- i18n: i18next + react-i18next, custom extraction CLI
- CarPlay: @g4rb4g3/react-native-carplay
- Monetization: react-native-purchases (RevenueCat)
- Language: TypeScript (strict), ESLint + Prettier + Husky