5 min read

SillyTavern: The Power User's Front End for AI Chat and Roleplay (GitHub, Scanned)

A local chat interface for AI characters and stories that works with almost any model API.

SillyTavern logo
✅
Scan: safe. Nothing malicious. Its server dependencies carry known advisories, including two in Handlebars, the template engine for prompt presets, so import presets, character cards and extensions only from people you trust. Scanned Oct 22, 2026; the full report is below.

SillyTavern is a chat interface you install on your own computer and connect to whichever model you like. It does not run models itself. Instead it talks to local backends such as KoboldCpp, text-generation-webui, Ollama and TabbyAPI, or to hosted APIs from OpenAI, Anthropic, Google, Mistral, OpenRouter and many others, and gives all of them the same interface with your characters, chats and settings stored locally.

Its depth is the reason people use it. Characters come as shareable cards, world info and lorebooks inject background facts when keywords appear, group chats put several characters in one scene, and every part of the prompt is visible and editable. It can generate images through Automatic1111 or ComfyUI, speak replies with text-to-speech, show a Visual Novel mode with character sprites, and run on a phone through Termux. Extensions add more, and the team says outright that the steep learning curve is part of the fun.

It started in 2023 as a fork of TavernAI and is AGPL-3.0, with about 34,800 stars and over 400 contributors, at 1.19.0 when scanned. The project runs no hosted service and states that it does not track users.

  • Repository: github.com/SillyTavern/SillyTavern
  • Licence: AGPL-3.0 (GNU Affero General Public License v3.0)
  • Language: JavaScript. Stars: 34.8K. Forks: 6,535. Last push: Oct 2, 2026.
  • Scan: safe, Oct 22, 2026, commit 06bde93

Who it is for

AI hobbyists who write interactive stories or roleplay with characters, people who switch between local and hosted models and want one interface for all of them, and anyone who wants full control over the prompt a model sees.

Getting started

1. Get the stable release branch (needs Git and Node.js 20 or newer)

git clone https://github.com/SillyTavern/SillyTavern -b release

2. Install dependencies and start it (Windows: run Start.bat)

cd SillyTavern && ./start.sh

3. Open the interface, then connect an API from the plug icon

open http://127.0.0.1:8000

Update later with git pull inside the folder. The documentation site has guides for Windows, Android (Termux) and Docker. By default it only accepts connections from the same machine; read the remote access guide before changing listen or whitelist settings in config.yaml.

Safety scan

We cloned SillyTavern/SillyTavern at commit 06bde93 on Oct 22, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no suspicious code patterns and no committed binaries across 1,010 files and about 266,000 lines of JavaScript. The hosts in the code are the model and image APIs it supports.
  • Safe defaults: config.yaml ships with listen set to false and whitelist mode on, so only 127.0.0.1 can connect until you change it. start.sh checks for Node.js and runs npm install; no sudo, no shell profile edits.
  • 159 known advisories (5 critical, 77 high), 122 of them in the main package-lock.json that npm install uses. The criticals: two JavaScript injection flaws in Handlebars, which SillyTavern uses to fill in prompt templates, a risk if you load a template written by someone else; simple-git, used to install extensions by git URL; proxy-addr, which matters only behind a reverse proxy; and protobufjs, pulled in through an ONNX model library. Extensions run their own code anyway, so the same rule applies: install only what you trust.
  • The other lockfiles cover the optional Electron wrapper (25) and the test suite (19).
  • 10 workflows. Four use pull_request_target for labelling and merge-conflict checks, and none checks out the pull request; all 19 third-party actions are pinned to commits. Security policy, licence and contributing guide present; no Dependabot or CodeQL.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious codeNone found.
Install-time code2 installer scripts
Committed binariesNone.
CI workflows10 workflows. 4 use pull_request_target, none check out the pull request head. 0 of 19 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, api.openai.com, api.electronhub.ai, api.z.ai. No URLs to bare IP addresses.
Known vulnerabilities159 advisories across 1,006 pinned packages: 5 critical, 77 high, 66 moderate, 11 low. package-lock.json: 829 packages, 122 advisories; src/electron/package-lock.json: 70 packages, 25 advisories; tests/package-lock.json: 343 packages, 19 advisories.
Project hygieneHas security policy, licence file, contributing guide. Missing automated dependency updates, CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Installer scripts (2)
Worst known vulnerabilities (24 of 159)
AdvisorySeverityPackageSummary
GHSA-8r5x-fm3f-whwjcriticalhandlebars@4.7.9Handlebars: JavaScript Injection via AST Type Confusion in compile (bypass of CVE-2026-33937)
GHSA-p8wg-vrv2-v86fcriticalhandlebars@4.7.9Handlebars: JavaScript Injection via Own Property Check Bypass
GHSA-xq3m-2v4x-88ggcriticalprotobufjs@6.11.4Arbitrary code execution in protobufjs
GHSA-jqcg-44mw-7w3hcriticalproxy-addr@2.0.7proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet
GHSA-x6jw-m9v5-85vhcriticalsimple-git@3.33.0simple-git unsafe-operation guard does not block trailer command configuration
GHSA-3jxr-9vmj-r5cphighbrace-expansion@2.1.0brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
GHSA-6j4f-fj2g-mc7phighbrace-expansion@2.1.0brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion
GHSA-mh99-v99m-4gvghighbrace-expansion@2.1.0brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash
GHSA-qhr7-859c-m2p7highbrace-expansion@2.1.0brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion
GHSA-rgw5-rvv9-x895highbrace-expansion@2.1.0brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation
GHSA-35jp-ww65-95whhighaxios@1.15.2axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `config.proxy`
GHSA-3pq3-5fj3-cg6vhighaxios@1.15.2Axios: HTTP/2 adapter bypasses configured DNS lookup and proxy controls
GHSA-542g-h47m-68v8highaxios@1.15.2Axios: Denial of Service via Unhandled 'error' Event in HTTP/2 ClientHttp2Session Initialization
GHSA-777c-7fjr-54vfhighaxios@1.15.2Allocation of Resources Without Limits or Throttling in Axios
GHSA-gcfj-64vw-6mp9highaxios@1.15.2Axios Node HTTP adapter can use an inherited proxy after interceptor config cloning
GHSA-hfxv-24rg-xrqfhighaxios@1.15.2Axios: Regular Expression Denial of Service (ReDoS) via Cookie Name Injection
GHSA-j5f8-grm9-p9fchighaxios@1.15.2Axios: Proxy-Authorization header leaks to redirect target when proxy is re-evaluated to direct connection
GHSA-m8m8-qj5v-23w3highaxios@1.15.2Axios: Node HTTP adapter prototype-pollution gadget allows request socket hijack via inherited createConnection
GHSA-mghh-pgcx-3jjjhighaxios@1.15.2Axios: ReDoS (O(N²)) in shouldBypassProxy host normalization, reachable via untrusted redirect Location
GHSA-p92q-9vqr-4j8vhighaxios@1.15.2Axios: Proxy-Authorization Credential Leak to Origin Server Across HTTP-to-HTTPS Redirect in Axios Node.js HTTP Adapter
GHSA-pjwm-pj3p-43mvhighaxios@1.15.2axios's shouldBypassProxy does not recognize IPv4-mapped IPv6 addresses, allowing NO_PROXY bypass (incomplete fix for CV…
GHSA-x97p-jq2g-jp4fhighaxios@1.15.2Axios: Prototype Pollution Gadget in axios toFormData Options
GHSA-c475-qrg2-pj4rhighbasic-ftp@5.3.1basic-ftp: Quadratic-time CPU denial of service in Client.list() Unix directory-listing parser (RE_LINE backtracking)
GHSA-3jxr-9vmj-r5cphighbrace-expansion@1.1.14brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
Workflows worth a look

By the numbers

Stars34.8K
Forks6,535
Contributors417
Commits11.8K
Open issues450
Open pull requests221
Releases103
Latest release1.19.0
LicenceAGPL-3.0
Main languageJavaScript
Project age3 years
Last pushOct 2, 2026
Tracked files1,010
Lines of code266.3K
Checkout size62 MB

Lines by language: JavaScript 197.2K, JSON 36K, CSS 15.8K, HTML 13.4K, YAML 1,937, Markdown 938.

Questions

Is SillyTavern free?

Yes. SillyTavern is free and open source under the AGPL-3.0 licence, with no paid tier or hosted service. You pay only for whatever model API you connect, or nothing if you run a local backend such as KoboldCpp or Ollama.

Does SillyTavern include a model?

No. It is a front end only. Pair it with a local backend (KoboldCpp, Ollama, text-generation-webui, TabbyAPI) or a hosted API key from OpenAI, Anthropic, Google, OpenRouter and others.

Can I use SillyTavern on my phone?

Yes, two ways. Android users can install it inside Termux following the official guide, and the interface is mobile-friendly. Or run it on a home computer and enable remote access with a whitelist or basic authentication, then open it from the phone's browser.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.