1. What is a podman?
  2. Why should I use it?
  3. Why shouldn't I just git clone?
  4. Why not Docker?
  5. Podman is a container engine.
  6. Easy setup that doesn't gunk up your system, and allows for easy management of the process.
  7. Gunks up your system by needing to install node, can't manage the process as easily, logs are a bit more annoying, can fuck up with cryptic git or npm errors.
  8. I don't know how to. Also it doesn't work for immutable distros that don't come with docker.

First of all, I will assume you are using Ubuntu, but you can just substitute any commands with whatever your distro's package manager is.

  1. Update your system. You should already know how to (or so I hope), but I might as well spell it out. Not really a part of the guide, but it's a good idea. [NEEDS ROOT/SUDO, if using system package manager, such as apt]
    1
    2
    3
    apt update && apt upgrade
    ````
    2. Install podman and curl (or wget, doesn't matter). [NEEDS ROOT/SUDO, if using system package manager, such as apt]
    

apt install podman curl

If your distro packages podlet, or you're using brew, you can substitute step 3 with `$InstallCommand podlet`.
3. Create SillyTavern's directory and fetch compose.yaml

mkdir ~/st # Can be something else or put elsewhere. Doesn't matter.
cd ~/st
curl -LO 'https://github.com/SillyTavern/SillyTavern/raw/refs/heads/release/docker/docker-compose.yml'
sed -i '/build/d' docker-compose.yml # Removes build line, podlet won't like it.

1
2
3
4
5
6
4. Generate quadlet file from compose.yml.
The command creates and runs an ephemeral container (run --rm),
with a volume for the compose file (-v [...]), :Z makes sure it works in systems using SELinux,
uses the podlet image, with flag -a ~/st (change this if you have a different directory ) to ensure the volume pathname is absolute,
compose tells podlet to convert the compose file according to the Compose specification,
and redirects it (>) to a file named sillytavern.container

podman run --rm -v ./docker-compose.yml:/docker-compose.yml:Z ghcr.io/containers/podlet -a ~/st compose /docker-compose.yaml > sillytavern.container

5. Make it so st starts on boot [OPTIONAL] and install

cat <<EOF >> sillytavern.container #[OPTIONAL]
[Install] #[OPTIONAL]
WantedBy=default.target #[OPTIONAL]
EOF #[OPTIONAL]
loginctl enable-linger $USER #[OPTIONAL]
mkdir -p ~/.config/containers/systemd
cp sillytavern.container ~/.config/containers/systemd

6. Start the container

systemctl --user daemon-reload # so systemd can see the .container
systemctl --user start sillytavern.service # Will pull the image, may take a while the first time you run it.
ss -tulpn | grep 8000 #check if it's actually listening. If so, good boy.
```

"SillyTavern made a new release! how do I update?"
It should update itself on boot but there's a good chance it'll time out before finishing. You can:
A. Raise the timeout (look it up), or
B. podman pull ghcr.io/sillytavern/sillyavern:latest (or staging, however it is you roll.)

"I don't want to be on stable! How do I get on staging?"
Edit the sillytavern.container file (the one in ~/.config/containers/systemd) and change sillytavern:latest to sillytavern:staging

"But br, you could have just made this a script!"
Correct! But I got too far and can't be bothered. Also not distro-agnostic, unless I took a great amount of effort.

"How do I see the status of the container or the logs?"
systemctl --user status sillytavern to see status and journalctl --user -u sillytavern for logs.

"I have port 8000 used by another service! How do I change it?"
Edit the .container file, specifically the line with PublishPort=8000:8000. The first port is the host's port,
and the second is the container's port. You only need to change the first one, unless you edited the ST config (config/config.yaml)
to listen on another port.

"I have more questions! Can I ask you?"
No. Sillytavern has great documentation. Read it.

Edit

Pub: 17 Feb 2026 10:42 UTC

Edit: 17 Feb 2026 10:44 UTC

Views: 17