Self-hosted · terminal-first · MIT

Loreweaver

Your favorite character shouldn't live only in a chat window.

Take them into a full world…

Neither of you knows the script — you create the story together.

Loreweaver demo — a real session recorded in the terminal client
Start a game

Starting a game is one button

Install the client, click "Host locally & play". There is no step two.

Install the client

Desktop app, recommended: Loreweaver Studio — the graphical client with live panels, a module's own panels and the keeper screens, plus the card studio. Installers for macOS / Windows / Linux ship with every release (unsigned for now: macOS right-click → Open once, Windows “More info → Run anyway”).

Download Loreweaver Studio ↗

Or the terminal client — one line, no toolchain, anywhere with a terminal.

macOS / Linux

$curl -fsSL https://1a7432.site/trpg/install.sh | bash

Windows (PowerShell)

>irm https://1a7432.site/trpg/install.ps1 | iex

Development builds ship as ordinary releases, so this installs the newest build, not the newest stable one. Pin a version with TRPG_RELEASE_TAG.

On Windows, use Windows Terminal or WezTerm. If the TUI does not look like the screenshots — broken borders, wrong colors, bad Unicode, or mouse input not working — you are probably in the legacy console host.

Click the button

The green button on the connect screen.

Send the codes

A ticket + one invite code per friend, on screen.

Loreweaver connect screen — one-click local hosting

The server builds are also yours to take and run long-term.

Under the hood

The AI tells the story. The code keeps the score.

Checks, damage, sanity, initiative — all rolled and resolved by code, and the AI's only job is to tell the result as a story. It can conjure atmosphere; it can't conjure the numbers.

NPCs don't get X-ray vision: every NPC and AI companion knows only what it should — the module's secrets are simply not in their hands. You can lose, which is exactly why winning means something.

The dice are real

A real dice engine plus rule systems that are pure data — one YAML file per system, CoC 7e and D&D 5e included. If the numbers don't validate, no amount of AI charm gets them through.

Keeps the secrets

Players, NPCs and AI companions only ever receive projections. That part is structural, and there are tests standing guard over it. The Keeper itself does see the module — it has to, to run a mystery — and is instructed not to quote it. That part is behaviour, so we measure it nightly against a real model instead of claiming it.

AI party members

Short a player? An AI companion genuinely fills the seat: its own sheet, its own rolls.

The server is yours

Runs on your own machine, friends connect directly over p2p; your data, modules and keys never leave home.

Runs a game, not a chat.

Loreweaver A chat window
Real dice, resolved by code
Keeps the module's secrets
A world that remembers~
AI companions fill a seat
Your machine, your data
Rules you can swap, as a data file
The module draws its own interface
Ask for it, and it exists

Ask for it, and it exists.

New rule systems, new play styles, new modules…

Your SillyTavern cards actually run

V2/V3 cards and lorebooks import as-is. MVU variable trees and UpdateVariable bookkeeping, full EJS templates in a QuickJS sandbox, worldbook trigger semantics — the machinery works, and real code keeps the books.

The module keeps score

The Keeper can add trackers mid-game — town fear, suspicion, quest progress. The engine checks every change and keeps it inside the range you set; the ones players can see update live in the sidebar, and keeper-only ones never leave the server.

Modules ship behavior

A skill or card can carry hooks.js: sandboxed JavaScript on the turn lifecycle that tracks variables, nudges the Keeper, and draws meters, badges and choice buttons right in the terminal. Every request is validated; a broken script never breaks a turn.

The module draws its own table

A pack can ship its own panels — a festival calendar, a tide gauge, a case board — bound to live trackers, plus handouts, letters and act cards. A rich client styles them; the terminal prints the same fields as plain lines, so the author only writes one version.

A campaign outlives its context window

Play is recorded as chronicle entries. When the prompt fills up the oldest ones fold into a rolling summary, so a detail from session three is still reachable in session twelve. Players get a spoiler-free recap of the same documents: the keeper's annotations are filtered out by the same projection layer that handles every other secret.

A whole campaign in one file

Skills, rulepacks, cards, lorebooks and assets bundle into one .lwpack — build with one line, install with one line, from a file, a URL, or a GitHub release. A trust card and integrity checks come before anything touches disk.

For developers

For developers

MIT, Python engine + TypeScript terminal client…

Writing your own client or bot? The typed protocol frames and a reconnecting WebSocket client are on npm as loreweaver-protocol.