@vowel.to/client / index / VowelClientConfig
Interface: VowelClientConfig
Defined in: lib/vowel/types/types.ts:676
Vowel client configuration
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
apiKey? | string | Preferred token issuer identifier. Accepts either a publishable API key or a legacy appId. | lib/vowel/types/types.ts:678 |
appId? | string | Legacy alias for the top-level token issuer identifier. Accepts either a publishable API key or a legacy appId. | lib/vowel/types/types.ts:681 |
convexUrl? | string | Optional: Custom Convex platform URL (base URL) If provided, constructs the token endpoint as ${convexUrl}/vowel/api/generateToken Useful for pointing to different Convex deployments (dev, staging, production) Example const vowel = new Vowel({ apiKey: 'vkey_public_xxx', convexUrl: 'https://my-deployment.convex.site' }); | lib/vowel/types/types.ts:696 |
tokenEndpoint? | string | Optional: Custom token endpoint URL If provided, overrides the default Vowel platform endpoint Takes precedence over convexUrl if both are provided Useful for self-hosted or proxy token generation Example const vowel = new Vowel({ apiKey: 'vkey_public_xxx', tokenEndpoint: 'https://my-server.com/api/token' }); | lib/vowel/types/types.ts:712 |
tokenProvider? | (request) => Promise<{ tokenName: string; model: string; provider: "gemini" | "openai" | "grok" | "vowel-core" | "vowel-prime"; expiresAt: string; systemInstructions?: string; }> | Optional: Custom token provider for advanced use cases Allows complete control over token generation (e.g., caching, custom auth) The token provider should return an object matching this interface: `{ tokenName: string; // The ephemeral token model: string; // AI model name provider: 'gemini' | 'openai' |
router? | RouterAdapter | Router adapter for navigation (LEGACY - deprecated) Deprecated Use navigationAdapter instead for the new dual-adapter architecture | lib/vowel/types/types.ts:763 |
navigationAdapter? | NavigationAdapter | Navigation adapter (NEW) Handles WHERE to go (routing) Optional - if not provided, navigation features will be disabled | lib/vowel/types/types.ts:770 |
automationAdapter? | AutomationAdapter | Automation adapter (NEW) Handles WHAT to do (page interaction) Optional - if not provided, page interaction features will be disabled | lib/vowel/types/types.ts:777 |
routes? | VowelRoute[] | Optional: Custom routes (can also be auto-detected from adapters) | lib/vowel/types/types.ts:780 |
voiceConfig? | VowelVoiceConfig | Deprecated Prefer _voiceConfig. | lib/vowel/types/types.ts:783 |
_voiceConfig? | VowelVoiceConfig | - | lib/vowel/types/types.ts:784 |
language? | string | - | lib/vowel/types/types.ts:785 |
initialGreetingPrompt? | string | - | lib/vowel/types/types.ts:786 |
turnDetectionPreset? | VowelTurnDetectionPreset | - | lib/vowel/types/types.ts:787 |
instructions? | string | Optional: Custom system instructions for the AI agent | lib/vowel/types/types.ts:790 |
systemInstructionOverride? | string | Deprecated Use 'instructions' instead Legacy alias for instructions (from OpenAI SDK compatibility) | lib/vowel/types/types.ts:796 |
initialContext? | Record<string, unknown> | null | Optional: Initial context object to include in system prompt when session starts. This context is automatically sent when the session connects, ensuring the AI has the context available from the start. You can update context later using updateContext() or the useSyncContext hook. Example const vowel = new Vowel({ appId: 'demo-app', initialContext: { page: 'product', productId: 'iphone-15-pro', price: 999.99 } }); | lib/vowel/types/types.ts:817 |
onUserSpeakingChange? | (isSpeaking) => void | Optional: Callback when user speaking state changes | lib/vowel/types/types.ts:820 |
onAIThinkingChange? | (isThinking) => void | Optional: Callback when AI thinking state changes | lib/vowel/types/types.ts:823 |
onToolExecutingChange? | (isExecuting) => void | - | lib/vowel/types/types.ts:824 |
onAISpeakingChange? | (isSpeaking) => void | Optional: Callback when AI speaking state changes | lib/vowel/types/types.ts:827 |
floatingCursor? | FloatingCursorConfig | Optional: Floating cursor configuration By default, floating cursor is enabled. Set enabled: false to disable it. Default { enabled: true } | lib/vowel/types/types.ts:834 |
borderGlow? | { enabled: boolean; color?: string; intensity?: number; width?: number; animationDuration?: number; zIndex?: number; pulse?: boolean; } | Optional: Border glow configuration | lib/vowel/types/types.ts:874 |
borderGlow.enabled | boolean | Enable border glow feature (default: false) | lib/vowel/types/types.ts:876 |
borderGlow.color? | string | Glow color (CSS color value) | lib/vowel/types/types.ts:878 |
borderGlow.intensity? | number | Glow intensity (blur radius in pixels) | lib/vowel/types/types.ts:880 |
borderGlow.width? | number | Glow width (box-shadow spread in pixels) | lib/vowel/types/types.ts:882 |
borderGlow.animationDuration? | number | Animation duration in milliseconds | lib/vowel/types/types.ts:884 |
borderGlow.zIndex? | number | Z-index for positioning | lib/vowel/types/types.ts:886 |
borderGlow.pulse? | boolean | Whether to show pulsing animation | lib/vowel/types/types.ts:888 |
actionPill? | { enabled: boolean; bottomOffset?: number; autoHideDelay?: number; maxWidth?: number; zIndex?: number; mobileOnly?: boolean; } | Optional: Floating action pill configuration | lib/vowel/types/types.ts:892 |
actionPill.enabled | boolean | Enable action pill feature (default: false) | lib/vowel/types/types.ts:894 |
actionPill.bottomOffset? | number | Position from bottom in pixels | lib/vowel/types/types.ts:896 |
actionPill.autoHideDelay? | number | Auto-hide delay in milliseconds (0 = no auto-hide) | lib/vowel/types/types.ts:898 |
actionPill.maxWidth? | number | Maximum width in pixels | lib/vowel/types/types.ts:900 |
actionPill.zIndex? | number | Z-index for positioning | lib/vowel/types/types.ts:902 |
actionPill.mobileOnly? | boolean | Show only on mobile devices | lib/vowel/types/types.ts:904 |
typingSounds? | { enabled?: boolean; volume?: number; typingSoundUrl?: string; clickSoundUrl?: string; minSegmentDurationMs?: number; maxSegmentDurationMs?: number; minPauseDurationMs?: number; maxPauseDurationMs?: number; clickSoundProbability?: number; } | Optional: Typing sound configuration | lib/vowel/types/types.ts:908 |
typingSounds.enabled? | boolean | Enable typing sounds (default: true) | lib/vowel/types/types.ts:910 |
typingSounds.volume? | number | Volume multiplier (0.0 to 1.0, default: 0.3) | lib/vowel/types/types.ts:912 |
typingSounds.typingSoundUrl? | string | Custom typing sound URL (default: assets.vowel.to/typing-sound.pcm) | lib/vowel/types/types.ts:914 |
typingSounds.clickSoundUrl? | string | Custom click sound URL (default: assets.vowel.to/mouse-click-sound.pcm) | lib/vowel/types/types.ts:916 |
typingSounds.minSegmentDurationMs? | number | Minimum segment duration in ms (default: 200) | lib/vowel/types/types.ts:918 |
typingSounds.maxSegmentDurationMs? | number | Maximum segment duration in ms (default: 800) | lib/vowel/types/types.ts:920 |
typingSounds.minPauseDurationMs? | number | Minimum pause duration in ms (default: 300) | lib/vowel/types/types.ts:922 |
typingSounds.maxPauseDurationMs? | number | Maximum pause duration in ms (default: 1500) | lib/vowel/types/types.ts:924 |
typingSounds.clickSoundProbability? | number | Probability of click sound vs typing (0.0 to 1.0, default: 0.15) | lib/vowel/types/types.ts:926 |
darkMode? | { enabled?: boolean; storageKeyPrefix?: string; } | Optional: Dark mode configuration Controls the appearance theme of vowel UI components Example const vowel = new Vowel({ appId: 'demo-app', darkMode: { enabled: true, // Enable dark mode storageKeyPrefix: 'my-app' // Optional: custom storage key prefix } }); | lib/vowel/types/types.ts:944 |
darkMode.enabled? | boolean | Enable dark mode (default: follows system preference) | lib/vowel/types/types.ts:946 |
darkMode.storageKeyPrefix? | string | Storage key prefix for persisting preference (default: 'vowel') | lib/vowel/types/types.ts:948 |