Skip to content

Import & export

Sheet JSON export/import

From the main menu, Export downloads the currently open sheet as a JSON file — its pages, widgets, background data, and actions — named after the sheet. Import loads a sheet from a JSON file you previously exported, and always brings it in as a brand new sheet: it takes its name from the filename and gets a fresh id, so importing can never overwrite a sheet you already have.

This is the main way to:

  • Back up a sheet outside of cloud sync.
  • Move a sheet to a device that isn't signed in.
  • Share a sheet you built with someone else — a game master handing out a homebrew class sheet, for example.

Exported JSON never includes computed formula results — those are always recalculated from the underlying data when the sheet loads, so an imported sheet is always up to date.

Generating sheets with AI tools

Because a sheet is a single, self-contained JSON object, export/import doubles as a way to build sheets with AI tools. Export an existing sheet to give an assistant (ChatGPT, Claude, etc.) a concrete example of the format, describe the character sheet you want — or paste in the Sheet JSON format reference — and ask it to produce a sheet in the same shape. Save the result as a .json file and Import it to get a working, editable starting point. This is handy for bulk data like a spell list or full stat block that would be tedious to enter by hand.

Starting from an existing sheet

There's no separate template gallery — instead, duplicate an existing sheet (yours or one you imported) from the main menu to use it as a starting point. This keeps the same pages, widgets, background data, and actions, under a new sheet id, so you can freely edit the copy without touching the original.

CSV for tables

From the Data tab → Tables you can build a whole background table out of a CSV file instead of entering it by hand — useful for bringing in a spell list or inventory you already have in a spreadsheet.

Import CSV creates a new table: pick the file, choose whether its first row is a header row, and give the table an id that isn't already in use. Column names from the header are sanitized into valid variable ids automatically (or named col1, col2, … if there's no header row), and each column's type is inferred from its values — all-numeric columns become number, all-true/false columns become boolean, everything else string. A preview shows what you'll get before you commit. To refresh an existing table from a spreadsheet, import the CSV as a new table and delete the old one.

Export CSV, from a table's own menu, downloads that table as <tableId>.csv with a header row — handy for editing a long list in a spreadsheet and bringing it back in.

minisheet is offline-first — your sheets live on your device, with optional cloud backup.