⚠️ Serene Pub is in beta! Expect bugs and rapid changes. This project is under heavy development.
🌐 Website • 📚 Documentation • ⬇️ Downloads • 🐛 Issues • 💬 Discord • ☕ Buy Me a Coffee
Modern, Open Source AI Roleplay Chat
Play more, tweak less.
Serene Pub is an open source chat app for AI roleplay and creative writing, built for stories that hold together over the long run. It remembers what happened, keeps every character honest about what they know, and lets you share the story with friends. Run it on your own hardware or point it at any AI provider.
Never run an LLM before? You don't need to know how. The Setup Wizard downloads, installs and runs a local model for you in a few clicks. No terminal, nothing to configure by hand. Prefer a hosted provider? Plug in an API key.
Long stories drift. Characters forget what happened chapters ago, secrets slip to people who were never in the room, and playing with friends means passing a browser tab around. Serene Pub fixes those three things: structured memory that grows with the story, characters who only act on what they've seen, and a server you can share.
Most AI roleplay tools are built for one person in one browser tab. Serene Pub isn't.
Turn on multi-user accounts and one server becomes a shared instance. Invite a friend into a chat as a guest and they arrive as themselves, with their own persona and their own characters pulled from their own library.
One scene, two accounts, live. The owner (left) and an invited guest (right) each bring their own persona; every message syncs to both.
Click any image for full size. Shots use the community-library cast aboard Seraphis Station, generated locally via the KoboldCPP Manager.
Context Config Builder Build the prompt from reorderable cards, or edit the raw template. |
Per-Task Prompt Configs Chat, narrator, summarizers and graph builder each get their own model. |
Three of the 20+ built-in themes. A custom theme editor ships too.
A story that remembers itself, so you don't have to keep notes.
{{char:N}} tokensBring your own model, or download and run one from inside the app.
Ctrl+Shift+YThe core app is the same everywhere. Two features depend on native binaries that don't exist for every platform, and the app says so up front rather than failing at runtime.
| Platform | Distribution | Local embedding models | KoboldCPP / Ollama Manager |
|---|---|---|---|
| 🪟 Windows (x64) | GitHub Release .zip | ✅ | ✅ |
| 🍎 macOS — Apple Silicon (arm64) | GitHub Release .zip | ✅ | ✅ |
| 🍎 macOS — Intel (x64) | GitHub Release .zip | ⚠️ Unavailable¹ | ✅ |
| 🐧 Linux (x64) | GitHub Release .zip | ✅ | ✅ |
| 🐧 Linux (arm64) | Docker only² | ✅ | ✅ |
🐳 Docker (linux/amd64, linux/arm64) | ghcr.io/doolijb/serene-pub | ✅ | ✅ |
| 📱 Android (arm64, API 26+) | GitHub Release .apk | ⚠️ Unavailable³ | ⚠️ Unavailable⁴ |
Annotations:
onnxruntime-node, which powers in-app embeddings, stopped shipping Intel Mac binaries at v1.24.3. Use any OpenAI-compatible /embeddings endpoint instead, which behaves identically. The Docker image keeps full local support, since the container runs Linux binaries.onnxruntime-node requires glibc. Not fixable by packaging. Use an external embeddings API, as on Intel Mac.See android/README.md for all Android-specific constraints.
No config files, no build step, no separate services to wire up.
| Platform | Get Serene Pub |
|---|---|
| 🪟 Windows | Download → extract → run run.cmd |
| 🍎 macOS | Download → extract → run run.sh (first launch may need right-click → Open; see Troubleshooting) |
| 🐧 Linux | Download → extract → run run.sh (install-desktop-shortcut.sh adds a desktop icon) |
| 📱 Android | Download the APK → install → open |
| 🐳 Docker | docker compose -f docker-compose.dist.yml up -d — see Docker below |
Desktop opens at http://localhost:3000; Android opens straight into the app. The Setup Wizard connects an AI provider (or installs KoboldCPP/Ollama for you), then walks you through your first character, persona and chat.
npm i to install dependenciesnpm run dev to start the dev server, or npm run dev:hostPrefer Docker? docker compose -f docker-compose.dev.yml up -d --build builds from local source into its own data volume, for testing changes without touching the release image.
Pre-built images are published to the GitHub Container Registry on every release:
ghcr.io/doolijb/serene-pub:latest ← newest stable or beta release
ghcr.io/doolijb/serene-pub:0.5.3-beta ← exact version pin
Quickstart — download docker-compose.dist.yml from the release assets, then:
docker compose -f docker-compose.dist.yml up -d
The web UI will be at http://localhost:3000.
Data directory — database, model cache and uploads live under SERENE_PUB_DATA_DIR, defaulting to /data and mounted as a named volume. For a host path instead:
docker run -p 3000:3000 \
-e SERENE_PUB_DATA_DIR=/data \
-v "$(pwd)/serene-pub-data":/data \
ghcr.io/doolijb/serene-pub:latest
See DOCKER.md for ports, volumes and reverse proxies, and Hosting Serene Pub or Environment Variables for env vars and tunnels.
Need help? Start with the Getting Started guide.
The same documentation ships inside the app on a built-in Docs page.
Popular pages:
Upcoming releases are tracked as GitHub Milestones, each holding the issues that make it up. Nothing is promised on a timeline.
Text-to-Speech was targeted for 0.5.0 and held back. No integration found yet that's small, fast, expressive and tunable without voice cloning or a large sample library.
Bug fixes, features and feedback are all welcome. Please open an issue or start a discussion before submitting large changes.
For development setup and contribution guidelines, see CONTRIBUTING.md.
AGPL-3.0. See LICENSE and NOTICE.md for details.
Special thanks to Nivelle for creating Serene Pub community library characters, and subpanopticon for feedback and testing.
Serene Pub — Play more, tweak less. 100% open source.
🌐 serenepub.com • 📚 Read the full documentation
TypeScript
61.5%
Svelte
35.6%
JavaScript
1.4%
⚠️ Serene Pub is in beta! Expect bugs and rapid changes. This project is under heavy development.
🌐 Website • 📚 Documentation • ⬇️ Downloads • 🐛 Issues • 💬 Discord • ☕ Buy Me a Coffee
Modern, Open Source AI Roleplay Chat
Play more, tweak less.
Serene Pub is an open source chat app for AI roleplay and creative writing, built for stories that hold together over the long run. It remembers what happened, keeps every character honest about what they know, and lets you share the story with friends. Run it on your own hardware or point it at any AI provider.
Never run an LLM before? You don't need to know how. The Setup Wizard downloads, installs and runs a local model for you in a few clicks. No terminal, nothing to configure by hand. Prefer a hosted provider? Plug in an API key.
Long stories drift. Characters forget what happened chapters ago, secrets slip to people who were never in the room, and playing with friends means passing a browser tab around. Serene Pub fixes those three things: structured memory that grows with the story, characters who only act on what they've seen, and a server you can share.
Most AI roleplay tools are built for one person in one browser tab. Serene Pub isn't.
Turn on multi-user accounts and one server becomes a shared instance. Invite a friend into a chat as a guest and they arrive as themselves, with their own persona and their own characters pulled from their own library.
One scene, two accounts, live. The owner (left) and an invited guest (right) each bring their own persona; every message syncs to both.
Click any image for full size. Shots use the community-library cast aboard Seraphis Station, generated locally via the KoboldCPP Manager.
Context Config Builder Build the prompt from reorderable cards, or edit the raw template. |
Per-Task Prompt Configs Chat, narrator, summarizers and graph builder each get their own model. |
Three of the 20+ built-in themes. A custom theme editor ships too.
A story that remembers itself, so you don't have to keep notes.
{{char:N}} tokensBring your own model, or download and run one from inside the app.
Ctrl+Shift+YThe core app is the same everywhere. Two features depend on native binaries that don't exist for every platform, and the app says so up front rather than failing at runtime.
| Platform | Distribution | Local embedding models | KoboldCPP / Ollama Manager |
|---|---|---|---|
| 🪟 Windows (x64) | GitHub Release .zip | ✅ | ✅ |
| 🍎 macOS — Apple Silicon (arm64) | GitHub Release .zip | ✅ | ✅ |
| 🍎 macOS — Intel (x64) | GitHub Release .zip | ⚠️ Unavailable¹ | ✅ |
| 🐧 Linux (x64) | GitHub Release .zip | ✅ | ✅ |
| 🐧 Linux (arm64) | Docker only² | ✅ | ✅ |
🐳 Docker (linux/amd64, linux/arm64) | ghcr.io/doolijb/serene-pub | ✅ | ✅ |
| 📱 Android (arm64, API 26+) | GitHub Release .apk | ⚠️ Unavailable³ | ⚠️ Unavailable⁴ |
Annotations:
onnxruntime-node, which powers in-app embeddings, stopped shipping Intel Mac binaries at v1.24.3. Use any OpenAI-compatible /embeddings endpoint instead, which behaves identically. The Docker image keeps full local support, since the container runs Linux binaries.onnxruntime-node requires glibc. Not fixable by packaging. Use an external embeddings API, as on Intel Mac.See android/README.md for all Android-specific constraints.
No config files, no build step, no separate services to wire up.
| Platform | Get Serene Pub |
|---|---|
| 🪟 Windows | Download → extract → run run.cmd |
| 🍎 macOS | Download → extract → run run.sh (first launch may need right-click → Open; see Troubleshooting) |
| 🐧 Linux | Download → extract → run run.sh (install-desktop-shortcut.sh adds a desktop icon) |
| 📱 Android | Download the APK → install → open |
| 🐳 Docker | docker compose -f docker-compose.dist.yml up -d — see Docker below |
Desktop opens at http://localhost:3000; Android opens straight into the app. The Setup Wizard connects an AI provider (or installs KoboldCPP/Ollama for you), then walks you through your first character, persona and chat.
npm i to install dependenciesnpm run dev to start the dev server, or npm run dev:hostPrefer Docker? docker compose -f docker-compose.dev.yml up -d --build builds from local source into its own data volume, for testing changes without touching the release image.
Pre-built images are published to the GitHub Container Registry on every release:
ghcr.io/doolijb/serene-pub:latest ← newest stable or beta release
ghcr.io/doolijb/serene-pub:0.5.3-beta ← exact version pin
Quickstart — download docker-compose.dist.yml from the release assets, then:
docker compose -f docker-compose.dist.yml up -d
The web UI will be at http://localhost:3000.
Data directory — database, model cache and uploads live under SERENE_PUB_DATA_DIR, defaulting to /data and mounted as a named volume. For a host path instead:
docker run -p 3000:3000 \
-e SERENE_PUB_DATA_DIR=/data \
-v "$(pwd)/serene-pub-data":/data \
ghcr.io/doolijb/serene-pub:latest
See DOCKER.md for ports, volumes and reverse proxies, and Hosting Serene Pub or Environment Variables for env vars and tunnels.
Need help? Start with the Getting Started guide.
The same documentation ships inside the app on a built-in Docs page.
Popular pages:
Upcoming releases are tracked as GitHub Milestones, each holding the issues that make it up. Nothing is promised on a timeline.
Text-to-Speech was targeted for 0.5.0 and held back. No integration found yet that's small, fast, expressive and tunable without voice cloning or a large sample library.
Bug fixes, features and feedback are all welcome. Please open an issue or start a discussion before submitting large changes.
For development setup and contribution guidelines, see CONTRIBUTING.md.
AGPL-3.0. See LICENSE and NOTICE.md for details.
Special thanks to Nivelle for creating Serene Pub community library characters, and subpanopticon for feedback and testing.
Serene Pub — Play more, tweak less. 100% open source.
🌐 serenepub.com • 📚 Read the full documentation
TypeScript
61.5%
Svelte
35.6%
JavaScript
1.4%