Skip to content

Introduction ​

Grimoire is a self-hosted web application for managing your tabletop RPG PDF collection. It runs as a Docker container, mounts your existing library folder, and gives you a clean browser-based UI to browse, search, and read your books from any device on your network.

What it does ​

  • Organizes your PDFs by game system and category, derived automatically from your folder structure, with no manual tagging required to get started
  • Indexes every page of every PDF for full-text search using SQLite FTS5, including OCR of image-only scanned PDFs
  • Renders PDF pages server-side as WebP images so the reader is fast even on mobile
  • Tracks maps, tokens, audio, and archive files alongside books in the same library, with a persistent global audio player
  • Supports campaigns (with a notes wiki, character sheets, and guest invites), bookmarks, favorites, OPDS feeds, and OpenID Connect authentication
  • Builds characters on live, schema-driven sheets for D&D 5e, Pathfinder, Draw Steel, Call of Cthulhu and more, with a searchable catalogue of each system's open content

What it writes ​

Grimoire reads from your library folder and only writes to it when you ask it to. Browsing, searching, reading, and metadata editing never touch your files. Two admin-only features do write: file management (upload, move, rename, delete) and sidecar export. Both need the library mounted writable, which is the default; mount it :ro and the rest of Grimoire works unchanged. See Volumes.

If you add or reorganize files from outside Grimoire, trigger a Rescan in the UI to pick the changes up.

Stack ​

LayerTechnology
BackendFastAPI (async Python 3.12)
DatabaseSQLite with FTS5 full-text search
PDF renderingPyMuPDF → WebP
FrontendReact 19 and TypeScript, served by the FastAPI backend
Optional cacheValkey / Redis (page image cache)
AuthJWT + optional OpenID Connect

License ​

GNU General Public License v3.0. Source on GitHub.

Released under the GNU GPL v3.0 License.