Skip to main content
Once your backend has called startConversation, the response contains everything your web client needs to join the live room:
  • conversation.serverUrl — the LiveKit WebSocket URL
  • consumerAccessToken — the end-user’s JWT
  • conversation.character.livekitIdentity — the character’s identity for event wiring
Pick the SDK that matches your stack.

@equos/browser-sdk

Vanilla TypeScript/JavaScript. Great for custom UIs or non-React frameworks.

@equos/react

Provider + renderer components for React, Next.js, Remix, etc.

Browser SDK

Install:
Fetch the conversation credentials from your backend, then hand them to EquosConversation:
Common controls:

Full vanilla example

Plain HTML + TypeScript project using Vite.

React SDK

Install:
The React SDK wraps the browser SDK in a provider + renderer so you don’t have to wire events manually:
Inside the provider, a useEquosConversation() hook exposes methods like sendText() and sendContext() for building custom controls.

Full React example

Vite + React app using <EquosConversationProvider> and <EquosConversationRenderer>.

Next.js (full-stack pattern)

Next.js is the canonical full-stack pattern: your API key stays on the server (in a server action or route handler), and only the conversation payload crosses to the client. Server actionapp/actions.ts:
Client componentapp/conversation-client.tsx:
Mark your server-side Equos client with import "server-only" so Next.js fails the build if anything tries to import the API key into a client bundle.

Full Next.js example

Next.js 15 app with server actions + @equos/react.

Features

The following features are available in both the Browser SDK and the React SDK.

Mode switch (text · audio · video)

A conversation can run in one of three modes:
  • EquosMode.Text — typed messages only, no audio or video
  • EquosMode.Audio — voice conversation, no video
  • EquosMode.Video — full video + voice (default)
In the React SDK, mode is a controlled prop on EquosConversationProvider—update your state and re-render to change it.

Send user text

Send a text message from the user to the character—useful for typed input, accessibility, or in EquosMode.Text conversations. Behaves like the user spoke the message.

Send context

Inject silent context into the conversation—information the character should know about, but that isn’t spoken by the user and doesn’t appear as a message. Great for things like:
  • Telling the character who the logged-in user is ("The user's name is Alex, Pro tier, signed up in 2024.")
  • Passing in the current page or screen the user is on
  • Feeding live data (cart contents, current order, sensor readings) as the conversation evolves
Unlike sendText, sendContext does not surface as a user utterance. The character picks it up as background knowledge for its next response.