Self-hosted wiki for tabletop role-playing games

Your whole campaign on one shelf.

World, characters, maps, timelines and session reports in a wiki you host yourself. The Master's secrets stay secret; players find everything else. Works with any role-playing game.

docker compose up -d

  • Free software, AGPL-3.0
  • English and Italian
  • WCAG 2.2 AA
  • Runs on a Raspberry Pi too
A girl with a cybernetic arm, in the rain, in front of a wall of glowing sleep pods wired to a black tower.
From the example adventure La Notte in Affitto

The wiki

Every page in its place, every secret in its drawer.

The folder tree on the left, the text in the middle, the details on the right. This is L'Alveare, the Hive, a page from the example adventure, as the Master sees it.

La Notte in Affitto

Places » L'Alveare

Inside a grain silo turned into a dormitory: white sleep pods in a honeycomb, spiral catwalks, a control room behind glass.

L'Alveare

VesperaLethe Neurodinamica

Description

An old grain silo in the harbour, emptied out and lined with cradles: white capsules stacked into a hive thirty floors high, wired to the ceiling by cables as thin as hair. You come in at night with your badge, lie down, close the capsule. Next morning there are twelve credits in your account, and a slight headache.

Characters

Master's secret

Floor zero is no storeroom: it is a relay that sends the Tower, every night, whatever the sleepers have computed. Touch it with a deck and an old man's voice asks, kindly: “Who is it?”

Features

What's on the shelf.

Everything a gaming group needs, in a single installation. No subscriptions, no external services.

Block pages

Block editor with Markdown, [[Page]] links, cover, icon, categories and tags.

Player sheets

Every player gets a page in the PCs folder when they join. The Master can hide blocks in it, and the player keeps writing.

Templates

Every page starts blank or as a copy of a template: you decide the basic structure.

Master's secrets

The Master hides a single block with the eye: players never receive it, not even in search, versions or exports.

Maps

From an image: pins linked to pages and other maps, layers, secret pins and a ruler.

Timelines

For the world or the campaign. Session reports land there on their own.

Search

Titles and text across the whole campaign, with no external services. Everyone finds only what they are allowed to see.

Boards

Cards in columns for notes, personal or shared: clues, suspicions, things to do.

Resources and gallery

The campaign's images, audio and files in one place, with a full-screen viewer.

Versions and trash

Every edit leaves a version to compare and restore. Whatever you delete goes to the trash.

Many campaigns

In the same installation, each with its own Master, its own players and a wiki of its own.

Sessions

The game calendar: everyone answers in person, remote or absent, and below the minimum the session is off.

Visibility and secrets

The Master hides a block. Players never get it.

Every page has its audience, and inside a page the Master hides single blocks with the eye. A hidden block never reaches the players: not on the page, not in search, versions or exports. And they can still edit the page. Try it: hide a block with the eye, then switch to the player view.

Campaign pages

The Master sees 7 pages: three are Master only. The player's personal board stays out of sight.The player sees 5: the four for players and their own personal board.

  • Master's Guide Page Master only
  • Vespera Place Players
  • L'Alveare Place Players
  • Torre Lethe Place Master only
  • Mara Iezzi NPC Players
  • Livia Sander NPC Players
  • Aurelio Venn NPC Master only
  • My suspicions Board Personal

Every page is Public, Players, Master only or Personal. Personal means only whoever wrote it: not even the Master sees it.

Admin
Runs the site: campaigns, users, themes, plugins, backups. Sees secrets only in the campaigns they run.
Master
In their campaign, writes every page and hides the blocks that must stay secret.
Player
Reads, creates pages, edits their own and those open to players, secrets inside or not. Has their own sheet.
Visitor
Public pages only, if the Admin has turned visitor access on.
Mara Iezzi: metal left arm, hair shaved on one side, stained apron, ladling broth behind the counter.

NPCs » Mara Iezzi

Mara Iezzi

Role
Fixer and cook at the Brodo Fermo
District
La Darsena, Vespera

Master's secret

Practical, loud, loyal to those who pay their debts. She asks no questions of the people eating at her counter, but she remembers the answers.

Master's secret

“The broth is free. Everything else is negotiable.”

Master's secret

She talked Teo into signing with Lethe, to pay off the bar's debt. She won't admit it until Teo is safe.

Master's secret

Before he was taken away, Teo wrote a row of numbers on a napkin: it is the service code for the Torre Lethe elevator.

Master's secret

She knows half of lower Vespera: smugglers, unlicensed doctors, guards who look the other way.

2 hidden blocks. On the page, consecutive ones share a single box.

Maps and timelines

Where it happens, and when.

Upload an image and it becomes a map: every pin leads to a page or to another map. Timelines keep track of it all, with your world's calendar.

Illustrated map of Vespera in the rain: the towers of the Heights above the clouds with Torre Lethe in the middle, the Hive's silo, the stilt houses of the Docks and the market under the collapsed bridge. Torre Lethe L'Alveare Il Brodo Fermo Mercato dei Morti Gufo, the fence
● Pin linked to a page ◆ Secret pin, on the Master's layer

Vespera timeline

  1. Fifty years agoThe lagoon dries up. Vespera grows upwards.
  2. Twenty years ago · secretElena, Aurelio Venn's wife, dies.
  3. Three years agoAurelio Venn, founder of Lethe Neurodinamica, dies.
  4. A year agoTeo, Mara's brother, starts sleeping for Lethe.
  5. Three days agoTeo wakes up calling his sister “miss”.
  6. Session 1 · report[The first session's report lands here on its own]

Plugins

Turn on only what you need.

Wiki plugins are data only: themes, templates, calendars, languages, rules and links to external sites. They stay off until the Admin turns them on in Administration › Plugins. And the Master can connect Claude to their campaign.

D&D Beyond

Included · off by default

Links rule references to D&D Beyond, so you can look up on the site what the wiki doesn't have, and adds the “D&D Sheet” template for player sheets, with a link to the character sheet on the site. Links only: nothing is copied from the site.

  1. The Admin turns it on once, and it works in every campaign.
  2. In a page, type @ and the rule's English name: when you save, it becomes a link that opens a D&D Beyond search in a new tab.
  3. The preview and the rule's page get an “Open on D&D Beyond” button.
You writeThe wizard casts @spell[Fireball].
On the page

The wizard casts Fireball.

Open on D&D Beyond

Turn it off and the references stay where they are, leading back to the rule's page. Opening the site needs an Internet connection.

Claude Code

Master only

The Master connects Claude to their campaign, with the Claude Code plugin or as a connector on claude.ai. Claude searches and reads the pages, secrets included, and if you allow it, writes them, hidden blocks too. Every edit leaves a version.

token: Master · read only

> What do the players know about Livia Sander, and what don't they?

Reads: Livia Sander

They know she is the clinical director of Lethe Neurodinamica, with her office on floor 88 of Torre Lethe, and that she was Aurelio Venn's closest collaborator. They don't know, because it sits in a hidden block, that she designed Aurelio's copy and split it among the sleepers.

Tokens and connectors live in Campaign › Claude: each works for one campaign only, and only while you are its Master. Players can't connect it.

Themes and accessibility

An outfit for every campaign. Readable for everyone.

Light, Dark, Lake, Neon, or one you make. Even the logo and the browser tab icon take on the theme's colours. This page uses Light.

  • The L'Alveare page on a phone, with the Light theme
    Lightthis page
  • The L'Alveare page on a phone, with the Dark theme
    Dark
  • The L'Alveare page on a phone, with the Lake theme
    Lake
  • The L'Alveare page on a phone, with the Lake at night theme
    Lake at night
  • The L'Alveare page on a phone, with the Neon theme
    Neon
  • The L'Alveare page on a phone, with the Gothic theme
    YoursBy the Admin or a plugin: here, Gothic
  • WCAG 2.2 AAContrast measured in every built-in theme.
  • Text up to 200%Set it in your Profile, person by person.
  • Dyslexia-friendly fontsAtkinson Hyperlegible and OpenDyslexic, included.
  • Keyboard onlyIncluding the page tree and the map pins.

Your data

The shelf is yours. So is everything on it.

Self-hosted

Docker on a home computer, a Raspberry Pi or a server online, with HTTPS.

Full backup

Pages, images and settings in a single file, to restore whenever you like.

Markdown

Export the whole wiki as text files that Obsidian opens just as they are.

World pack

A .shelf file carries maps and house rules into another campaign.

Install

Three lines, and you're playing.

Open http://localhost:3000: the first time, you create the wiki and the admin account, with the code you find in the server logs (docker compose logs). Then invite your group.

Without Docker, on a Raspberry Pi, online with HTTPS: the installation guide (in Italian)

Terminal
$ git clone https://github.com/yanez86/crooked-shelf.git
$ cd crooked-shelf
$ docker compose up -d