SI

SillyTavern

Customizable frontend for AI character roleplay

Self-Hosted AI ★ 33.7k stars Medium setup AGPL-3.0

SillyTavern is a locally installed interface for LLM-powered character chat and roleplay. It supports many backends, character cards, group chats, extensions, and rich customization.

Key features

  • Character card support
  • Many LLM backends
  • Group chats
  • Extension ecosystem

Quick deploy

A starting point for self-hosting SillyTavern - check the official docs for the full set of options.

  • Image ghcr.io/sillytavern/sillytavern:latest
  • Web port 8000
  • Persist /home/node/app/config /home/node/app/data /home/node/app/plugins /home/node/app/public/scripts/extensions/third-party
Docker Compose
services:
  sillytavern:
    image: ghcr.io/sillytavern/sillytavern:latest
    ports:
      - "8000:8000"
    volumes:
      - ./config:/home/node/app/config
      - ./data:/home/node/app/data
      - ./plugins:/home/node/app/plugins
      - ./third-party:/home/node/app/public/scripts/extensions/third-party
    restart: unless-stopped
docker run
docker run -d --name sillytavern \
  -p 8000:8000 \
  -v ./config:/home/node/app/config \
  -v ./data:/home/node/app/data \
  -v ./plugins:/home/node/app/plugins \
  -v ./third-party:/home/node/app/public/scripts/extensions/third-party \
  --restart unless-stopped \
  ghcr.io/sillytavern/sillytavern:latest

Pros & cons

Strengths

  • Supports many backends
  • Deep customization options
  • Active extension ecosystem

Trade-offs

  • Niche roleplay focus
  • Cluttered interface

SillyTavern replaces

Last reviewed Aug 26, 2026 · 818 words

SillyTavern does not contain a model. It is a frontend, and the first decision is not how to install it but which backend will do the actual generating: KoboldCpp or llama.cpp on your own GPU, Ollama, a vLLM server, or a hosted API through an OpenAI-compatible URL. The UI itself needs 1 GB of RAM and no GPU; the character with a 16,000-token memory who replies in 4 seconds needs a graphics card with roughly 12 to 16 GB of VRAM for a 12B model at a decent quant, and that is where the money goes.

Pick the backend before the frontend

For local use the pairing that gives the least trouble is KoboldCpp: a single binary that loads GGUF files, exposes both its own API and an OpenAI-compatible one, and has a dedicated SillyTavern connection profile with sampler settings that match. llama.cpp's server works the same way and is what Kobold wraps. Ollama works too and is the easiest if you already run it, though its default 4,096-token context will truncate a long chat until you raise num_ctx, which is the single most common "my character forgot everything" report. For hosted models the OpenAI-compatible and Claude connection types take a key and a base URL. The VRAM math post has the sizing table; the summary is that context length costs memory as much as parameter count does, and roleplay eats context.

The Docker file and the four volumes

services:
  sillytavern:
    image: ghcr.io/sillytavern/sillytavern:latest
    ports:
      - "8000:8000"
    volumes:
      - ./config:/home/node/app/config
      - ./data:/home/node/app/data
      - ./plugins:/home/node/app/plugins
      - ./extensions:/home/node/app/public/scripts/extensions/third-party
    restart: unless-stopped

config holds config.yaml, data holds every character, chat log, persona, and preset (back this one up), plugins holds server-side plugins, and the long path at the end is where third-party UI extensions install. Miss the last one and every docker pull deletes your extensions. Port 8000 is fixed unless you change it in config.yaml.

The LAN trap: a 403 that looks like a proxy bug

Out of the box SillyTavern only accepts connections from localhost and addresses in whitelist.txt, and it refuses others with 403 Forbidden plus a log line naming the rejected IP. Running in Docker, every request looks like it comes from the bridge network, so the very first browser tab from another machine fails. Two edits in config.yaml fix it: set listen: true, and either extend the whitelist with your LAN range (192.168.1.0/24) or set whitelistMode: false and turn on basicAuthMode: true with a username and password. Never do the second without the third. A chat frontend that stores your API keys is a lucrative thing to leave open, and the maintainers bind to localhost specifically because people used to expose it by accident. Behind Tailscale, the whitelist approach is enough; on a public hostname, basic auth plus the reverse proxy's own auth is the minimum.

Character cards, group chats, and the extension ecosystem

Characters are PNG or JSON files with the persona embedded, portable between every frontend that reads the same card spec, and shareable without a server. Group chats put several characters in one room with configurable turn-taking. The extension system is where the depth lives: vector storage for long-term memory across chats, text-to-speech, image generation via a local Stable Diffusion API, translation, and a scripting language (STscript) for automation. The interface is cluttered because every one of those has a settings panel; the Simple UI mode hides most of it and is the right starting point. It is the most capable roleplay frontend there is, and its 32,650 GitHub stars come from a community that has kept it that way since 2023 under an AGPL-3.0 license.

It is not a general assistant UI

For document Q&A, coding help, or a family ChatGPT replacement, Open WebUI is the better tool: multi-user, RAG, tool calling, cleaner. SillyTavern's strengths (sampler control down to the last parameter, world info, persona management, prompt templates you can edit per model) are aimed squarely at interactive fiction, and using it for anything else means fighting the interface. Run both against the same backend if you want both.

What I'd do

KoboldCpp on the GPU box with a 12B to 24B GGUF at the largest quant that leaves room for 16K of context, SillyTavern in Docker with all four volumes mounted, listen: true with a LAN whitelist, and access from outside the house only over Tailscale. Back up the data directory weekly; it is the only thing you cannot regenerate. Start in the Simple UI, and add extensions one at a time as you find a reason for them.

Compare SillyTavern

1 head-to-head comparisons.

Similar self-hosted ai apps