SillyTavern Manager

Documentation

Everything from a first install to a restore on a new machine. Pick a platform, follow it to Ready, and come back for the rest when you need it.

Before you begin

SillyTavern Manager installs and runs SillyTavern for you. It is not SillyTavern, and it is not made by the people who make SillyTavern — it clones their public repository onto your machine, at your request, and manages what it finds there.

You will need: a machine you control, about 2 GB of free disk for SillyTavern and its dependencies, and an internet connection for the first install. Everything after that can run offline except the model providers SillyTavern talks to.

Platform What you need Where to start
Windows 10 or 11 Nothing. Node.js is inside the download. Windows
Android 7+ Termux from F-Droid Termux
macOS 13+ Homebrew and Node.js 22+ macOS
Linux or a VPS Node.js 22+ and git Linux
Any Docker host Docker, and a volume for /data Docker
Anything with Node 22+ npm 11+ npm

The manager and SillyTavern use three ports: 7860 for the panel, 8000 for SillyTavern and 8001 for the access gateway. If something else on the machine already holds one of them, see Troubleshooting.

Installing

Six ways in, all ending at the same place: a panel on port 7860 asking you to choose an administrator password.

#Windows — download and run

  1. Open the latest release.
  2. Download SillyTavernManager-windows-x64-vX.Y.Z.zip and the .sha256 file beside it.
  3. Extract the ZIP into a normal folder, such as Downloads\SillyTavernManager. Do not run it from inside the ZIP.
  4. Double-click SillyTavernManager.exe.
  5. The browser should open by itself. If it does not, go to http://127.0.0.1:7860.

A console window opens and stays open. That window is the manager: it prints the address, where your data is kept, and what the manager and SillyTavern are doing. Closing it stops everything cleanly — SillyTavern and the Cloudflare tunnel go down with it, so no port is left held and there is nothing to hunt for in Task Manager.

Press Q or Ctrl+C in that window to stop, and O to open the panel in your browser again.

The application folder and the data folder are separate. Your data lives in %LOCALAPPDATA%\SillyTavernManager, so replacing the ZIP with a newer one never touches profiles, backups or settings.

If SmartScreen warns about an unsigned application, that is expected: release builds are not code-signed. Check the .sha256 file against the ZIP if you want to be certain the download is the one the release published.

#Android — Termux

Install Termux from F-Droid or another trusted source. Do not use the old Play Store build — it is years out of date and its package manager no longer works.

Open Termux and paste these commands. Give the first two a minute each; they update Termux itself.

bash
pkg update -y
pkg upgrade -y
pkg install -y git nodejs-lts
git clone https://github.com/locmaymo/stm.git
cd stm
npm ci
npm start

Leave that Termux session running while SillyTavern is in use. On the phone, the manager is at http://127.0.0.1:7860 and SillyTavern at http://127.0.0.1:8000.

Starting it again later:

bash
cd "$HOME/stm"
npm start

Updating the manager, after stopping it with Ctrl+C:

bash
cd "$HOME/stm"
git pull --ff-only
npm ci
npm start

Termux keeps your data at $PREFIX/var/sillytavern-manager, outside the repository, so git pull never touches it.

Turning the tunnel on needs nothing installed by hand. Android only starts position-independent executables and Cloudflare’s own builds are not, so the manager asks Termux for its build of cloudflared first and falls back to running Cloudflare’s under proot, installing whichever it needs.

#macOS — from source

macOS uses the same launcher as Linux. Paste this into Terminal; the first line installs Homebrew and can be skipped if you already have it.

bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install git node
git clone https://github.com/locmaymo/stm.git
cd stm
npm ci
node deploy/linux/launcher.mjs

Open http://127.0.0.1:7860. Stop with Ctrl+C, and start it again later with:

bash
cd "$HOME/stm"
node deploy/linux/launcher.mjs

Data is kept under ~/.local/share/sillytavern-manager. Apple Silicon and Intel are both fine; nothing here needs Rosetta.

#Linux and VPS

With Node.js 22 or newer and git installed:

bash
git clone https://github.com/locmaymo/stm.git
cd stm
npm ci
node deploy/linux/launcher.mjs

Data goes to $XDG_DATA_HOME/sillytavern-manager, or ~/.local/share/sillytavern-manager when that variable is unset.

To have it come back after a reboot, save this as /etc/systemd/system/sillytavern-manager@.service:

ini
[Unit]
Description=SillyTavern Manager
After=network-online.target

[Service]
Type=simple
User=%i
WorkingDirectory=/home/%i/stm
ExecStart=/usr/bin/node deploy/linux/launcher.mjs
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
bash
sudo systemctl daemon-reload
sudo systemctl enable --now sillytavern-manager@$USER
systemctl status sillytavern-manager@$USER

Keep port 7860 behind the firewall. The manager panel is the thing that can install, restore and delete; publish the access gateway or a tunnel instead, never the panel. Set STM_HOST=0.0.0.0 only when something else in front of it is doing the access control.

#Docker and hosted platforms

Build the image from the repository:

bash
git clone https://github.com/locmaymo/stm.git
cd stm
docker build -f deploy/docker/Dockerfile -t sillytavern-manager .

Then run it with durable storage:

bash
docker run --rm \
  -p 7860:7860 \
  -v sillytavern-manager-data:/data \
  -e STM_ADMIN_PASSWORD='choose-a-long-password' \
  sillytavern-manager

The manager is at http://127.0.0.1:7860. SillyTavern stays on the container’s internal port 8000, and a tunnel points only at that port.

On a hosted container platform: expose 7860, mount durable storage at /data, and supply STM_ADMIN_PASSWORD through the platform’s secret settings.

Never put the administrator password in a Dockerfile or commit it to git. STM_ADMIN_PASSWORD is read once, at the first start, to create the password without a browser.

#npm

On any machine with Node.js 22 or newer:

bash
npx sillytavern-manager

Or install it once and keep it:

bash
npm install --global sillytavern-manager
sillytavern-manager

On Windows prefer the portable ZIP — it already contains Node.js. The npm package and a source checkout use the same ports and the same data directory.

The first run

  1. Open http://127.0.0.1:7860. The first screen asks you to create the manager administrator password. Choose something long; this password is what opens the panel that can install, restore and delete.
  2. Read the terms — the line beside the tick opens them — then accept and finish setup.
  3. Choose a SillyTavern version. latest is selected by default and is the right answer unless you have a reason to pin one.
  4. Press Install and wait for Ready. It clones the repository, installs dependencies and then health-checks the result; Ready means SillyTavern actually answered on port 8000, not that the files finished copying.
  5. Open the local link, or set a SillyTavern passcode first and then turn on local-network access or a tunnel.
The first-run screen: manager password, confirmation, and the line that opens the termsThe first-run screen: manager password, confirmation, and the line that opens the termsThe first-run screen: manager password, confirmation, and the line that opens the termsThe first-run screen: manager password, confirmation, and the line that opens the terms

The manager password and the SillyTavern passcode are two different things. The manager password opens the admin panel. The passcode opens SillyTavern to other devices, and changing it signs out every device already in.

A first install downloads a few hundred megabytes of dependencies and takes a few minutes on a laptop, longer on a phone. The live log says what it is doing; nothing is stuck just because it is quiet for thirty seconds during npm ci.

Running it day to day

The overview page is the whole of normal use: Start, Stop, and a link that opens SillyTavern. It also shows the installed version, whether a newer release exists, how much space your data takes and what the machine is doing.

SillyTavern can be opened in a panel of its own inside the manager, which is what a phone wants, or in a new tab, which is what a desktop usually wants.

The overview page: SillyTavern running, remote access, data and backups, system usage and live logsThe overview page: SillyTavern running, remote access, data and backups, system usage and live logsThe overview page: SillyTavern running, remote access, data and backups, system usage and live logsThe overview page: SillyTavern running, remote access, data and backups, system usage and live logs

The log feed carries five sources in one searchable list — the manager, SillyTavern, the installer, backups and the tunnel. When something fails, the reason is in there, and the panel translates the manager’s own lines into your language while leaving SillyTavern’s, npm’s and git’s output exactly as those programs wrote it.

Closing the browser does not stop anything. The manager keeps running until you stop it in its own window, or stop the service.

Reaching it from another device

SillyTavern itself never leaves 127.0.0.1. Everything from outside arrives at the access gateway on port 8001, which asks for a six-digit passcode and then forwards to SillyTavern — and never to the manager panel.

There are two ways to open the gateway, and both are switches on the overview page:

  • Local network. Other devices on the same Wi-Fi reach it at your machine’s LAN address. Nothing leaves your network.
  • Cloudflare Tunnel. A trycloudflare.com address that works from anywhere, with no port forwarding and no router configuration. The address changes each time the tunnel starts.
  1. Set the SillyTavern passcode first. The switches will not do anything useful until there is one.
  2. Turn on Local network or Cloudflare tunnel.
  3. Copy the address, or scan the QR code the panel draws for it.
  4. On the other device, enter the passcode once.

Six digits are not a password. The gateway locks globally after five consecutive wrong tries, which is what makes a short code workable — but do not leave a tunnel running when nobody is using it, and do not expose an installation holding data you could not bear to lose or to reveal.

Whoever has the address and the passcode gets SillyTavern and only SillyTavern. They cannot install, restore, delete, read your logs or reach the settings.

Backups and restores

The Data page holds profiles, local archives and, if you connect it, off-site recovery points in your own Cloudflare account.

The data page: profiles, local backups and Cloudflare R2 recovery pointsThe data page: profiles, local backups and Cloudflare R2 recovery pointsThe data page: profiles, local backups and Cloudflare R2 recovery pointsThe data page: profiles, local backups and Cloudflare R2 recovery points

#Local archives

Back up now writes a ZIP that SillyTavern’s own import understands. By default it leaves out secrets.json, thumbnails, vectors, generated backups, .git, node_modules and operating-system clutter, which is why an archive is far smaller than the data folder. Including secrets is a separate, deliberate choice with a warning attached.

A schedule can make one daily or weekly and keep the last few. Archives are ordinary files: copy them anywhere.

#Restoring

  1. Pick an archive — one the manager made, one from Cloudflare R2, or a ZIP you upload.
  2. Read the preview. It lists what is in the archive before anything is written.
  3. Choose Replace (the default: the profile becomes the archive) or Merge (files in the archive overwrite their counterparts, everything else is left).
  4. Confirm. A safety snapshot of the current state is taken first, automatically.

Restoring replaces data. The safety snapshot means a mistake is recoverable, but choosing the right archive is still yours to get right.

#Cloudflare R2

On the Data page, Connect Cloudflare is the whole of the setup. Sign in, choose the account, allow the permissions, and the manager finds or creates a bucket named sillytavern-manager-backup in your account and starts keeping recovery points in it. There are no keys to create or paste.

Two of the permissions are optional and worth allowing:

  • Workers. The manager deploys a small Worker, also called sillytavern-manager-backup, that carries backup data to the bucket. It is much faster and does not spend your Cloudflare API rate limit. Without it, backups go through Cloudflare’s API and a first one can take a long time.
  • Account Analytics. The panel can then show storage and Class A/B operations as Cloudflare counts them, for the bucket and for the account against the free tier. These are usage figures, not your bill.

A new machine that signs in to the same account finds the same bucket, so the recovery points already in it can be restored onto it.

Disconnect removes this installation’s Worker key and revokes the sign-in. The bucket and everything in it stay yours. You can also revoke access yourself in your Cloudflare profile, under Manage OAuth authorizations.

Only the refresh token is stored, in a file readable by your user alone. Access tokens and Worker keys are short-lived and live in memory. Backups go from your machine to your bucket; no server of this project is on that path.

R2 has a free tier, and beyond it Cloudflare bills you. Large or frequent backups cost storage and operations. Set your own limits and alerts in the Cloudflare dashboard — the charge is yours, whatever caused it.

Prefer not to sign in? Choose R2/S3 keys (manual) and enter the endpoint, bucket and key pair from the R2 page of the Cloudflare dashboard. Any S3-compatible storage works the same way.

Data profiles

A profile is a complete, separate SillyTavern data set: its own characters, chats, settings and backups. Switching profiles swaps what SillyTavern sees.

They are useful for keeping work and play apart, for trying an extension without risking a real data set, and for a second person on the same machine. Creating one is instant; switching takes a safety snapshot first.

Usage figures

The Usage page counts requests, tokens, cache hits and latency, broken down by day, provider and model. The numbers come from SillyTavern’s own traffic as it passes through the manager, so they cover every provider without any of them being configured here.

The usage page: requests, tokens, cache hits and latency per day, provider and modelThe usage page: requests, tokens, cache hits and latency per day, provider and modelThe usage page: requests, tokens, cache hits and latency per day, provider and modelThe usage page: requests, tokens, cache hits and latency per day, provider and model

These figures never leave the machine. They are read from a local file; what the project receives is the far smaller summary described in the Privacy Notice.

Settings

The Settings page edits SillyTavern’s own config.yaml through switches, and can also open the file directly for anything the switches do not cover. Saving stops SillyTavern, writes the file and starts it again.

The settings page: security, performance, extensions, API keys and chat backupsThe settings page: security, performance, extensions, API keys and chat backupsThe settings page: security, performance, extensions, API keys and chat backupsThe settings page: security, performance, extensions, API keys and chat backups
Setting What it changes
Lazy-load characters A large character list loads on demand rather than all at once
Disk cache and memory cache How much SillyTavern keeps ready; the memory figure is a ceiling, not a reservation
Request compression Smaller responses over a tunnel or a slow link
Extensions and auto-update Whether extensions load, and whether they update themselves
Allow key exposure Whether SillyTavern will show stored API keys in its own interface. Off unless you need it
Chat backups SillyTavern’s own per-chat backups, and how many to keep

Editing the file by hand is a different act from flipping a switch. An invalid file stops SillyTavern from starting; the panel checks the YAML parses before it writes, but it cannot know whether a value makes sense.

Updating

Platform How to update the manager
Windows Stop the manager, extract the new ZIP into a new folder, run the new executable. Keep the old folder until you are sure.
Termux, macOS, Linux Stop the process, then git pull --ff-only, npm ci, and start the launcher again.
Docker Rebuild the image and start a new container against the same volume.
npm npm install --global sillytavern-manager@latest, or just run npx sillytavern-manager again.
From a source checkout, with the manager stopped
git pull --ff-only
npm ci

SillyTavern itself updates from the panel: pick a newer version and press Install. Your data is copied to safety before the version is switched, and the manager tells you when a release newer than the installed one exists.

The data directory is never inside the application directory, on any platform. Replacing the application leaves profiles, backups, logs, metrics and settings exactly where they were.

Environment variables

Everything can be set in the panel. These are for unattended installs and hosted platforms; they are read at start from the process environment or a .env file, and anything set here is shown in the panel and cannot be changed there.

Variable What it does
STM_ADMIN_PASSWORD Creates the administrator password at the first start, so a headless install needs no browser
STM_HOST What the manager binds to. Defaults to loopback; set 0.0.0.0 only behind other access control
STM_DATA_DIR Where profiles, backups, logs and metrics are kept, instead of the platform default
STM_ACCESS_PORT The access gateway’s port, instead of 8001
STM_OPEN_BROWSER 0 stops the manager opening a browser at start
STM_LOCAL_BACKUPS How many local archives to keep
STM_CLOUDFLARED_PATH A cloudflared binary to use instead of the one the manager would find
STM_R2_ENDPOINT · STM_R2_BUCKET R2 or S3 endpoint and bucket, for keys supplied rather than signed in
STM_R2_ACCESS_KEY_ID · STM_R2_SECRET_ACCESS_KEY The key pair. With all four set, R2 backups start switched on
STM_CLOUDFLARE_OAUTH_CLIENT_ID An OAuth client registered in your own Cloudflare account; empty turns signing in off
STM_TELEMETRY_ENDPOINT Where usage summaries go. Set it empty to send nothing at all
Turning usage reporting off completely
# .env, next to the repository or the launcher
STM_TELEMETRY_ENDPOINT=

When something goes wrong

The live log is the first place to look, and usually the last. It carries the manager, SillyTavern, the installer, backups and the tunnel; the reason is nearly always written there in the program’s own words.

What you see What it usually is
The panel does not open at all Something else holds port 7860, or the manager stopped. Check the console window, then the port.
Install fails during npm ci No internet, a proxy in the way, or a full disk. The log carries npm’s own error.
Ready never arrives SillyTavern started but did not answer on 8000. Read the SillyTavern lines in the log; a bad config.yaml is the usual cause.
The tunnel will not start cloudflared is missing or Cloudflare is unreachable. Local access keeps working regardless.
Another device cannot connect The gateway is off, no passcode is set, or the two devices are not on the same network.
A passcode stopped working Five wrong tries lock the gateway. Wait, or change the passcode from the panel.
SillyTavern will not start after an edit Restore defaults on the Settings page, or fix the YAML in the editor there.
Finding what holds a port
# Linux, macOS and Termux
ss -ltnp | grep -E ':(7860|8000|8001)' || lsof -i :7860
The same on Windows
Get-NetTCPConnection -LocalPort 7860 -State Listen | Select-Object OwningProcess

If none of that helps, open an issue at github.com/locmaymo/stm/issues with the platform, the version from the About panel in Settings, and the relevant log lines. Do not paste API keys or tunnel addresses.

Privacy, briefly

There is no account and no cloud. Chats, characters, prompts, settings, backups and API keys stay on machines you control, and the project holds no copy of any of it.

The manager sends one thing: a small allowlisted usage summary — platform, version, and per request the provider, model, endpoint hostname, token counts, status and duration. Never prompts, chats, responses, keys, file names, paths, IP addresses or query strings.

The full list, and the one line that switches it off, are in the Privacy Notice. The Terms of Use and the Disclaimer say what the project does and does not take responsibility for.

The source is at github.com/locmaymo/stm, under the AGPL-3.0. You can read every line of it, including the part that decides what is sent.