Skip to content

Open Character Format

An open format for tabletop RPG characters that any VTT or app can read. A published spec, a shared test suite, a reference engine, and content packs.

The engine knows the rules. The app owns the experience.

Section titled “The engine knows the rules. The app owns the experience.”

The engine works out what the game’s rules say: which fields change, what needs rolling, which options exist, and which one the rules recommend. The app decides everything the player sees and does: how dice are rolled, how time passes, whether a choice is made automatically or put to the player, and how it all looks.

  • Take it anywhere. Packs, homebrew content and characters move freely between every app that implements OCF: export from one, import into another, in an open format the community owns.
  • Never write a game’s math. Load a pack, call computeSheet, and every value on the sheet comes back with a breakdown of where it came from.
  • One integration, every game. A growing list of games, from 5E and orc-2e to Forged in the Dark, Fate, MÖRK BORG and Mothership, all run through the same engine calls.
  • Homebrew is a pack, not a fork. A homebrew weapon or class loads beside the official packs, and queries pick it up without anyone editing the originals.
  • The sheet can’t disagree with the rules. A character file holds only the player’s choices, and everything else is computed.
  • Your dice, your UI. The engine says what to roll and what changes, and pauses mid-action while your app animates the dice and hands back what they landed on.
  • Old characters upgrade themselves. Versioned packs ship upgrade scripts, so a character saved last year still loads after the rules change.
  • Fully internationalized. The engine returns keys and codes, never English, and every pack’s text lives in translation files, so your app speaks any language.
  • Model your favorite game in YAML. A class, spell or playbook is a short data file that can live anywhere, checked by the published JSON Schemas and by the engine when it loads.
  • The test suite is the contract. Plain-data conformance cases define correct behavior for every engine call, so a port knows exactly when it’s done.
  • Bring your own language. OCF ships a TypeScript reference engine, and the spec, JSON Schemas and test suite are language-neutral, so anyone can build an engine in Rust, Python, Go or anything else.
  • Already in use. Realms of Shod builds its character sheets on the OCF engine today.
Pack ID License
5E System Reference Document 5.1 5e-srd-5.1 CC-BY-4.0
Fate Core fate-core CC-BY-3.0
Forged in the Dark crew fitd-crew Mechanics only
Forged in the Dark scoundrel fitd-scoundrel Mechanics only
MÖRK BORG mork-borg-core Mechanics only
Mothership 1e mothership-1e Mechanics only
Second Edition fantasy rules (ORC) orc-2e ORC License

Mechanics only: the game isn’t openly licensed, so the pack holds its math and names, no rules text, and isn’t affiliated with or endorsed by its publisher.

Built with OCF

Apply to be listed
Realms of ShodCampaign manager

Build TTRPG realms and stories together with multiplayer tools, live transcription, and a knowledge graph that keeps your world alive.

  • Guides: how to use OCF characters in your own app: loading packs, storing characters, showing a sheet, changes, choices, dice and upgrades.
  • The specification: pack and character formats, the formula language, effects, dice and actions, and the engine calls, for anyone implementing OCF.
  • JSON Schemas for every file format and engine call, at schemas/0.1/.
  • A shared conformance test suite: plain-data cases any port can run.