Overview
Tavus CVI delivers AI-powered video conversations directly in your application. You can integrate it using:| Method | When to choose this | Production suitability | Dependencies |
|---|---|---|---|
| iframe | Fastest working UI for demos, prototypes, and simple production embeds. Create a conversation and set src to the returned conversation_url. | Good when Tavus’s default room UI is enough. | None beyond your backend create-conversation route. |
| @tavus/cvi-ui | Recommended React component path when you want Tavus-provided components, hooks, and styling control. | Good for React apps that want a faster path than building directly on Daily. | @tavus/cvi-ui CLI plus installed Daily React dependencies. |
| Daily JS / React | Use when your app needs deeper control over room state, events, or a fully custom in-call UI. | Good for teams comfortable owning more call UI and state. | @daily-co/daily-js and optionally Daily React. |
| LiveKit Agent | Use only if you already run a LiveKit Agents pipeline and want Tavus as the avatar video layer. | Not the recommended path for most CVI embeds; LiveKit only provides rendering, while Tavus’s Full Pipeline includes perception, turn-taking, and rendering. | LiveKit Agents app plus Tavus LiveKit integration. |
conversation_url string from the response. Use that value wherever the samples use conversation_url (JavaScript) or YOUR_CONVERSATION_URL (string placeholders in HTML or query strings).
For the quickest path, use an iframe with
allow="camera; microphone; fullscreen; display-capture; autoplay".For private rooms, create the conversation with
require_auth: true and use
the returned meeting_token. Append it to the iframe URL as ?t=TOKEN, or
pass it to Daily with join({ url: conversation_url, token: meeting_token }).Implementation Steps
- @tavus/cvi-ui (Component Library)
- iframe
- Vanilla JavaScript
- Node.js + Express
- React + Daily (createCallObject)
This method provides a full-featured React component library. It offers pre-built, customizable components and hooks for embedding Tavus CVI in your app.
@tavus/cvi-ui is a CLI that copies React source files into your project. It is not a hosted widget: you import generated files from your app, wrap UI in CVIProvider, render Conversation with a Tavus conversation_url, and use generated server helpers to keep TAVUS_API_KEY off the client. For the complete reference and lifecycle example, see the component library overview, blocks, components, hooks, and server helpers.React component library (@tavus/cvi-ui)
The Tavus Conversational Video Interface (CVI) React component library provides a complete set of pre-built components and hooks for integrating AI-powered video conversations into your React applications. This library simplifies setting up Tavus in your codebase, allowing you to focus on your application’s core features.Key features include:- Pre-built video chat components
- Device management (camera, microphone, screen sharing)
- Real-time audio/video processing
- Customizable styling and theming
- TypeScript support with full type definitions
Quick Start
Prerequisites
Before getting started, ensure you have a React project set up.Alternatively, you can start from our example project: CVI UI Haircheck Conversation Example - this example already has the HairCheck and Conversation blocks set up.1. Initialize CVI in Your Project
- Creates a
cvi-components.jsonconfig file - Prompts for TypeScript preference
- Installs npm dependencies (@daily-co/daily-react, @daily-co/daily-js, jotai)
2. Add CVI Components
3. Wrap Your App with the CVI Provider
In your root directory (main.tsx or index.tsx):4. Add a Conversation Component
Learn how to create a conversation URL at https://docs.tavus.io/api-reference/conversations/create-conversation. To create a conversation URL from your app without exposing yourTAVUS_API_KEY in the browser, use the server helpers in Server (tavus-api for Next.js/Remix/TanStack Start, or tavus-api-vite-ssr for Vite-with-server).Note: The Conversation component requires a parent container with defined dimensions to display properly.Ensure your body element has full dimensions (
width: 100% and height: 100%) in your CSS for proper component display.Documentation Sections
- Overview – Overview of the CVI component library
- Blocks – High-level component compositions and layouts
- Components – Individual UI components
- Hooks – Custom React hooks for managing video call state and interactions
- Server – Server-side helpers (
tavus-api,tavus-api-vite-ssr) for creating and ending conversations without exposing your API key
FAQs
How can I reduce background noise during calls?
How can I reduce background noise during calls?
Tavus provides a built-in voice isolation feature that separates speech from background noise in the participant’s microphone audio. You can enable it via the
voice_isolation parameter in the Conversational Flow layer of your persona.Learn more in our Voice Isolation documentation.Can I add event listeners to the call client?
Can I add event listeners to the call client?
Yes, you can attach Daily event listeners to monitor and respond to events like participants joining, leaving, or starting screen share.

