GM Vault

Your table, your data. All local.

Run the fight from your phone.

GM Vault keeps your NPCs, session notes, and initiative order in one app that runs on your own machine. No account. No subscription. One SQLite file you can copy to a USB stick.

  • Works offline
  • No sign-up
  • Full JSON export

Fight

Round 1

Foundry Floor Ambush

    🏰Home
    πŸ“‡Records
    πŸ“Notes
    🎲Dice
    βš”οΈFight

    Live, not a picture β€” tap the HP buttons

    15init

    One vault per campaign

    Every record type lives in the same searchable place, with tags, quick stats, and Markdown descriptions. These are the real counts from the sample campaign that ships with it β€” Cinders of the Aether Engine, a magitek city-state held up by an engine somebody is sabotaging.

    12init

    Built for one hand, mid-combat

    Everything you touch while four players wait on you is a target you can hit without looking: 48px minimum, bottom tabs, dark by default, and as little typing as the job allows.

    Initiative that keeps state

    Round and turn tracking, add or drop combatants mid-fight, and big βˆ’5 / βˆ’1 / +1 / +5 HP buttons. The tracker saves itself, so closing the tab by accident costs you nothing.

    Dice you build by tapping

    Full notation without the keyboard β€” 2d6+3, 4d6kh3, advantage as 2d20kh1+5. Save the formulas you roll every session and keep a running history.

    Notes in Markdown

    A session editor with live preview, sorted by session date. Search across every NPC, place, faction, and item as you type β€” no menus to dig through when a player names someone you forgot.

    8init

    The file is yours

    Most campaign managers are a subscription with your world inside it. If the company folds or the price changes, your prep is hostage. GM Vault inverts that.

    • One SQLite file on your diskNot a row in someone else's database. Back it up, copy it, put it in git.
    • No account to createThere is nothing to sign up for, so there is nothing to lose access to.
    • Runs with the internet offUseful, because table wifi is a rumour.
    • Export round-trips everythingOne JSON file carries records, notes, and saved formulas. Import always creates a new campaign β€” it never overwrites what you have.
    cinders-of-the-aether-engine.jsonexport
    "format": "gm-vault-campaign",
    "version": 1,
    "campaign": {
      "name": "Cinders of the Aether Engine",
      "setting": "Voltengard"
    },
    "records": [ … ],
    "notes": [ … ],
    "formulas": [ … ]

    Start it on your own machine

    You need Node 20+. There is no installer, no account step, and no first-run wizard β€” it comes up already holding a sample campaign so every screen has something in it.

    git clone https://github.com/Eltacolibre/gm-vault cd gm-vault cd server && npm install && npm run dev # in a second terminal cd client && npm install && npm run dev

    Then open localhost:5173. To reach it from your phone, start Vite with --host and use your computer’s LAN IP β€” 192.168.1.20:5173 or similar.

    A Dockerfile and a docker-compose.yml ship with the repo too, meant to serve the app on localhost:8580 in one command. Be careful: that image build is untested, because I do not have Docker installed. Treat it as a starting point, not a supported path.

    On the roadmap

    Sync, without giving up the file

    Prep on a laptop, run at the table on a phone. End-to-end encrypted sync between your own devices is in development as a paid tier β€” and the local app stays free and offline-first either way. That promise is the product; it will not be paywalled.

    Watch for releases