About this project

Charon is a self-hosted web application for roleplaying with AI characters, positioned by its author as a combination of features from Chub, SillyTavern, and other tools. It is designed to keep user data local rather than in a cloud service. Core capabilities described in the README: - Branching conversations: each swipe of an AI reply creates a new branch, so users can navigate between alternatives, edit messages inline, and avoid losing prior replies. - Character cards V2 and V3: imports `.png` character cards from SillyTavern, Chub, or other sources without conversion. - Bring-your-own API key: works with OpenAI-compatible providers such as OpenAI, Anthropic via proxy, OpenRouter, Ollama, and vLLM. Keys are described as encrypted at rest. - Lorebooks: background lore can be attached to a chat, and the app selects relevant entries for the AI automatically. - Personas: multiple personas can be defined and switched per chat. - Markdown rendering: supports bold, italic, code blocks, images, `<style>` scoping, and dialogue highlighting, with streaming-safe fade-in. - Self-hosting: data is stored in a local SQLite file, with no cloud dependency, telemetry, or external accounts beyond the user's own. Deployment options include Docker via `docker compose up -d` (data persisted in a `charon-data` volume) or a pnpm-based development setup. Required environment variables include `BETTER_AUTH_SECRET` and `ENCRYPTION_KEY`, with example generation commands using `openssl rand`. Migrations are said to run automatically on first start. An upgrade path for older databases migrates to a single admin account, with a documented backup and restore procedure using `pnpm migrate:single-user`. First-time setup involves creating an account, going through an onboarding wizard to connect an AI provider and obtain a character, then starting a chat. Characters are not bundled; users are directed to Chub or a SillyTavern `public/characters/` folder. Chat controls include send, newline, swipe, regenerate, edit, impersonate, continue, delete branch, and a Ctrl+K command menu. A SillyTavern import path is documented via copying data into `public/data/` and running `pnpm run migrate`. Production builds use `pnpm run build` and `pnpm run start` on port 3000, with `APP_URL` set for auth cookies. Developer documentation is referenced in CONTRIBUTING.md.