The Living Codex
A tabletop-ready character sheet that runs locally and keeps your campaign data in your hands.
I got tired of opening a character tool and feeling like I was crossing a border checkpoint. Log in. Subscribe. Hand over the sheet. Repeat. I built The Living Codex because I wanted a companion I could keep on my own machine, understand line by line, and trust when the session got messy.
My table rules for this project are simple: no forced cloud, no account gate, no silent tracking, and no pretending the player does not own their own sheet.
Prologue: Why This Exists
I wanted the feeling of a weathered field journal, not a product funnel. My character sheet should feel like gear I packed for the trip, not software I rent by the month. So I wrote The Living Codex to make ownership obvious: if I need to inspect the rules, change the data, or move my character somewhere else, I can.
Act I: The Engine Room
I kept the guts readable on purpose. Local rules files load first, then the sheet builds from that, then the modifiers and derived values fall into place on screen. When a number looks cursed, I can follow the trail step by step instead of shrugging at a black box.
Act II: Built For Real Sessions
I built this for actual table rhythm, not screenshots. I can spin up a character, manage known and prepared spells, track inventory and session notes, then pack everything up and bring it back later without turning the sheet into unreadable sludge. If I hand the file to future-me, future-me can still read it.
Act III: The Long Campaign
This is a functional beta in the literal sense: I can run real sessions on it now. The core loop is stable. I’m still filling in tricky rules edge cases, smoothing rough spots at the table, and bringing the newer parts of the app up to the same standard as the older ones. It is playable today, and still getting sharper.
How To Use It
If you are opening The Living Codex for the first time, start by creating a new character and choosing your ruleset, class, species, and base ability scores. Once the sheet appears, fill your core identity details, then move through spells, inventory, and session log in the same order you would use them at the table.
When you reach a good stopping point, export a ZIP so you have a portable snapshot. On your next session, import that ZIP, sanity-check your spell and inventory sections, and keep going. That simple export/import habit gives you a clean trail of character history and makes it easy to move between machines without drama.
The files inside that ZIP are human-editable by design, so if you are comfortable tweaking JSON or CSV, you can inspect and adjust your data directly before importing again.
PDF export support is on the roadmap and coming soon. For now, ZIP export is the reliable way to save and move your character sheets.
What is inside the ZIP (schema overview)
character.json is the canonical source of truth for your character and is written in readable JSON; its contract is in character.schema.json.
inventory.csv contains your inventory rows in a table format that is easy to edit in spreadsheet tools; the expected columns are in inventory.schema.csv.
spells_known.csv and spells_prepared.csv split spell knowledge from prepared state so both are explicit; both use spells.schema.csv.
log.csv stores session log entries for your running notes and history; its format is defined in log.schema.csv.
During import diagnostics, an optional report/import-report.json may be generated to explain fixes, warnings, or blocked issues; fix policy details live in import-fix-rules.md.