Skip to content

@vowel.to/client v0.3.3-beta


@vowel.to/client / index / VowelClientConfig

Interface: VowelClientConfig

Defined in: lib/vowel/types/types.ts:676

Vowel client configuration

Properties

PropertyTypeDescriptionDefined in
apiKey?stringPreferred token issuer identifier. Accepts either a publishable API key or a legacy appId.lib/vowel/types/types.ts:678
appId?stringLegacy 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?stringOptional: 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?stringOptional: 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?RouterAdapterRouter adapter for navigation (LEGACY - deprecated) Deprecated Use navigationAdapter instead for the new dual-adapter architecturelib/vowel/types/types.ts:763
navigationAdapter?NavigationAdapterNavigation adapter (NEW) Handles WHERE to go (routing) Optional - if not provided, navigation features will be disabledlib/vowel/types/types.ts:770
automationAdapter?AutomationAdapterAutomation adapter (NEW) Handles WHAT to do (page interaction) Optional - if not provided, page interaction features will be disabledlib/vowel/types/types.ts:777
routes?VowelRoute[]Optional: Custom routes (can also be auto-detected from adapters)lib/vowel/types/types.ts:780
voiceConfig?VowelVoiceConfigDeprecated 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?stringOptional: Custom system instructions for the AI agentlib/vowel/types/types.ts:790
systemInstructionOverride?stringDeprecated Use 'instructions' instead Legacy alias for instructions (from OpenAI SDK compatibility)lib/vowel/types/types.ts:796
initialContext?Record<string, unknown> | nullOptional: 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) => voidOptional: Callback when user speaking state changeslib/vowel/types/types.ts:820
onAIThinkingChange?(isThinking) => voidOptional: Callback when AI thinking state changeslib/vowel/types/types.ts:823
onToolExecutingChange?(isExecuting) => void-lib/vowel/types/types.ts:824
onAISpeakingChange?(isSpeaking) => voidOptional: Callback when AI speaking state changeslib/vowel/types/types.ts:827
floatingCursor?FloatingCursorConfigOptional: 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 configurationlib/vowel/types/types.ts:874
borderGlow.enabledbooleanEnable border glow feature (default: false)lib/vowel/types/types.ts:876
borderGlow.color?stringGlow color (CSS color value)lib/vowel/types/types.ts:878
borderGlow.intensity?numberGlow intensity (blur radius in pixels)lib/vowel/types/types.ts:880
borderGlow.width?numberGlow width (box-shadow spread in pixels)lib/vowel/types/types.ts:882
borderGlow.animationDuration?numberAnimation duration in millisecondslib/vowel/types/types.ts:884
borderGlow.zIndex?numberZ-index for positioninglib/vowel/types/types.ts:886
borderGlow.pulse?booleanWhether to show pulsing animationlib/vowel/types/types.ts:888
actionPill?{ enabled: boolean; bottomOffset?: number; autoHideDelay?: number; maxWidth?: number; zIndex?: number; mobileOnly?: boolean; }Optional: Floating action pill configurationlib/vowel/types/types.ts:892
actionPill.enabledbooleanEnable action pill feature (default: false)lib/vowel/types/types.ts:894
actionPill.bottomOffset?numberPosition from bottom in pixelslib/vowel/types/types.ts:896
actionPill.autoHideDelay?numberAuto-hide delay in milliseconds (0 = no auto-hide)lib/vowel/types/types.ts:898
actionPill.maxWidth?numberMaximum width in pixelslib/vowel/types/types.ts:900
actionPill.zIndex?numberZ-index for positioninglib/vowel/types/types.ts:902
actionPill.mobileOnly?booleanShow only on mobile deviceslib/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 configurationlib/vowel/types/types.ts:908
typingSounds.enabled?booleanEnable typing sounds (default: true)lib/vowel/types/types.ts:910
typingSounds.volume?numberVolume multiplier (0.0 to 1.0, default: 0.3)lib/vowel/types/types.ts:912
typingSounds.typingSoundUrl?stringCustom typing sound URL (default: assets.vowel.to/typing-sound.pcm)lib/vowel/types/types.ts:914
typingSounds.clickSoundUrl?stringCustom click sound URL (default: assets.vowel.to/mouse-click-sound.pcm)lib/vowel/types/types.ts:916
typingSounds.minSegmentDurationMs?numberMinimum segment duration in ms (default: 200)lib/vowel/types/types.ts:918
typingSounds.maxSegmentDurationMs?numberMaximum segment duration in ms (default: 800)lib/vowel/types/types.ts:920
typingSounds.minPauseDurationMs?numberMinimum pause duration in ms (default: 300)lib/vowel/types/types.ts:922
typingSounds.maxPauseDurationMs?numberMaximum pause duration in ms (default: 1500)lib/vowel/types/types.ts:924
typingSounds.clickSoundProbability?numberProbability 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?booleanEnable dark mode (default: follows system preference)lib/vowel/types/types.ts:946
darkMode.storageKeyPrefix?stringStorage key prefix for persisting preference (default: 'vowel')lib/vowel/types/types.ts:948