Start Using Quilltap
Get set up in minutes and start interacting with AI.
Running with Docker
Quilltap runs as a single Docker container with no external database. Just Docker and one secret value you'll generate yourself.
What You'll Need
Docker Desktop (Windows, macOS, or Linux). That's it.
Setup (5 minutes)
Create a Data Folder
Quilltap stores everything — your database, uploaded files, the pictures you'll generate, and logs — in a single folder on your machine.
mkdir "$env:USERPROFILE\.quilltap" mkdir -p ~/Library/Application\ Support/Quilltap mkdir -p ~/.quilltap Generate Your Encryption Key
Quilltap encrypts your AI provider API keys at rest using a master key called
ENCRYPTION_MASTER_PEPPER. You generate this once
and keep it safe — if you lose it, any API keys
you've saved become unrecoverable.
-join ((1..43) | ForEach-Object { [char](Get-Random -Minimum 33 -Maximum 126) }) openssl rand -base64 32 openssl rand -base64 32 Copy the output — you'll need it in the next step.
Save Your Key
Create a file called .env in your data folder with one line:
ENCRYPTION_MASTER_PEPPER=paste-your-generated-key-here
Replace paste-your-generated-key-here with the value from Step 2. This is the file:
- Windows:
%USERPROFILE%\.quilltap\.env - macOS:
~/Library/Application Support/Quilltap/.env - Linux:
~/.quilltap/.env
Back this file up. The encryption pepper is the one value you can't regenerate. Treat it like a password.
Start Quilltap
docker run -d `
--name quilltap `
-p 3000:3000 `
--env-file "$env:USERPROFILE\.quilltap\.env" `
-v "$env:USERPROFILE\.quilltap:/app/quilltap" `
csebold/quilltap:latest docker run -d \
--name quilltap \
-p 3000:3000 \
--env-file ~/Library/Application\ Support/Quilltap/.env \
-v ~/Library/Application\ Support/Quilltap:/app/quilltap \
csebold/quilltap:latest docker run -d \
--name quilltap \
-p 3000:3000 \
--env-file ~/.quilltap/.env \
-v ~/.quilltap:/app/quilltap \
csebold/quilltap:latest Open Quilltap
Go to http://localhost:3000. You're in.
What's in Your Data Folder
Everything Quilltap needs lives in that one directory you created:
| Path | Contents |
|---|---|
data/quilltap.db | Your SQLite database (characters, chats, settings) |
files/ | Uploaded images and attachments |
logs/ | Application logs |
plugins/ | Installed plugins |
Your data stays on your machine. Quilltap never phones home.
Updating
docker stop quilltap
docker rm quilltap
docker pull csebold/quilltap:latest
Then re-run the same docker run command from Step 4.
Your data folder is untouched — nothing is lost.
Quick Reference
| Task | Command |
|---|---|
| Stop Quilltap | docker stop quilltap |
| Start it again | docker start quilltap |
| View logs | docker logs quilltap |
| Follow logs live | docker logs -f quilltap |
Next Steps
Once Quilltap is running:
- 1.
Add an AI provider — Go to Settings and create a connection profile for your preferred provider (OpenAI, Anthropic, Google Gemini, Ollama, OpenRouter, and more). You'll need an API key from that provider.
- 2.
Create or import a character — Build one from scratch or import a SillyTavern-compatible JSON file.
- 3.
Start chatting — Pick a character, choose your AI provider, and go.
Troubleshooting
"Port 3000 is already in use"
Change the host port: replace -p 3000:3000 with
-p 8080:3000, then open http://localhost:8080.
Container exits immediately
Check the logs with docker logs quilltap. The most common
cause is a missing ENCRYPTION_MASTER_PEPPER.
Permission errors on the data folder (Linux)
On Docker Desktop (Windows/macOS), permissions are handled automatically. On native Linux, the container runs as a non-root user that may not match your host UID. If you see permission errors, make the data folder writable before the first run:
chmod -R 777 ~/.quilltap Or, if you prefer tighter permissions, match the container's user to your own:
docker run ... --user "$(id -u):$(id -g)" csebold/quilltap:latest