Skip to main content

Guide Index

Build Live2D AI characters that talk, react, and look at you.

Charivo is a modular TypeScript framework for voice, expression, motion, gaze, and real-time conversation — split into focused packages.

These guides are for integrators building an app on top of Charivo. Use them to choose the right packages, understand the layering, and get to a working setup quickly.

Default Stack

For most browser apps, the default stack looks like this:

browser app
-> @charivo/core
-> modality root package
-> remote browser runtime package
-> your API route
-> server provider package

That means:

  • @charivo/core orchestrates the app
  • modality root packages such as @charivo/llm, @charivo/tts, and @charivo/realtime own feature state
  • remote browser packages talk to your server
  • server provider packages such as @charivo/server/openai keep credentials on the server

Where To Start

New to the repo: read Getting Started, then Choosing Packages and Architecture, then the subsystem guides you need.

For the quickest route to a working browser app, follow Getting Started, Rendering, and Examples Web.

To read the shipped reference apps:

Guide Map

  • Getting Started: minimal production-oriented setup
  • Architecture: package boundaries, layering, and event wiring
  • Choosing Packages: remote vs browser-direct vs browser-native
  • Rendering: @charivo/render and @charivo/render-live2d
  • LLM: conversation manager and client choices
  • TTS: speech playback and lip-sync wiring
  • STT: microphone recording and transcription paths
  • Realtime: session-based voice interaction and tool wiring
  • Avatar Control: optional model-driven expression, motion, and gaze
  • Examples Web: Next.js reference app and API routes
  • Examples Companion: realtime-only app with browser-local character memory

Guide Docs vs Package READMEs

Use the guides for integration decisions, recommended stacks, and copy-paste recipes.

Use package READMEs for package-local details such as exports, request contracts, and provider-specific config: