Origami. Get the file

The format

Origami is an open format.

An Origami Fold is one self-contained .origami.html file — a document that carries its own renderer and plays in any browser, forever, with no app and no network. The file format is open and free for anyone to implement; the Origami software is proprietary. So your documents outlive any one tool — including ours.

Download a FoldOn GitHubThe openness pledge ↓

One file

A document that is also its own app.

A browser plays a Fold on double-click — it carries its renderer inline, so recipients install nothing. It is inert by default: no network, no storage, no eval. The whole document is plain, inspectable HTML.

0
Network requests
1
File to send
~25KB
Embedded runtime
Years it keeps opening

Anatomy

Four parts, in one file.

Manifest — a JSON block: id, title, fold order, per-fold metadata (kind, label, hidden, group), declared capabilities, theme, and the optional foldType and header. The single source of truth.

Folds — the content, as inert <template> elements (one per chunk). A template never executes until the renderer mounts it. A fold's id and kind are immutable.

Assets — an inline table of data-URIs: images and subsetted fonts, so the file carries everything it needs and never phones a CDN.

Engine — the base CSS, kind CSS, and the renderer (a small IIFE), healed to the current version on every save. Write your own renderer and you never need ours.

Shapes & blocks

A fold type, and a vocabulary of kinds.

A fold type sets the reading experience: deck (a card stage, one fold at a time, presentable — the default), scroll (a continuous A4 document), or ledger (data & calc). It's absent unless used, so a plain deck stays byte-identical.

Every fold has a kind whose schema is the markup contract for it. Data-driven kinds carry their data in one inert JSON block and are drawn by the renderer:

coverbulletsstatsfreedocumentganttflowgraphcharttablegridtrackervideo

The unit of editing

Read → edit → write, one chunk at a time.

  1. List the chunksA table of contents: id, kind, label, hidden — in order. A chunk is one fold.
  2. Read a chunkA self-contained payload: the deck context, the kind's markup schema, and the fold's <template>.
  3. Edit the template innerThe fold's id and kind are immutable; a reply that targets a different id or kind is rejected as drift, never silently repaired.
  4. Write & saveApplied in memory, then written atomically. A save refuses to write a Fold that fails validation, and refuses to clobber a file that changed under you.

The most important rule

Inert by default — active behind a padlock.

HARD — structural, rejected on write

No <template> inside fold content; <script> tags must balance. These would break the single-file structure, so they never apply.

SOFT — active content, flags the Fold

A real script, style, iframe, form, inline on* handler, javascript: or remote URL still saves — but the Fold is marked active, and a recipient opens it behind a padlock until they trust it.

The one inert exception — and how data-driven blocks ship — is a JSON data block, a byte-exact opener the renderer reads but the document never executes:

<script type="application/json" data-odata="KIND">…JSON…</script>

Built for agents

An AI can author a Fold having never seen one.

Because the format is open and self-describing, an AI edits the file directly — no export step, no running app to reach into. One origami_guide() call over the model-context protocol returns the entire contract — every kind's schema, the inert/active rules, the read-edit-write loop — assembled from the live format constants, so it can never drift from the spec. Point an MCP client at a folder and the agent authors Folds in it.

And because edits are staged and reviewable, a human approves a per-chunk diff before anything lands — the AI proposes, you accept.

The openness pledge

Open format. Proprietary software. Your files are yours.

✔ The format is open

You may freely read, write, parse, and build software that creates or opens .origami.html files — for any purpose, commercial or not, with no licence fee, royalty, or permission required. This specification is published under CC BY 4.0. Build your own renderer or tooling against it — that's the point.

✘ The software is not

The Origami apps — the Studio, desktop app, browser extension, and the bundled runtime — are proprietary, all rights reserved. The open format means you're never locked into them; it doesn't make their source free to copy.

And whatever you make is yours. Your .origami.html files are your content — yours to keep, share, sell, and open in any conforming tool, ours or anyone's. That's the promise an open format makes that a proprietary blob can't.

Download a Fold to inspectRead the full spec on GitHubHow it works

Versioning

A generation, not semver.

FORMAT_VERSION is an integer generation. The same generation reads and writes; a newer one opens read-only; an older one migrates forward. It bumps only on a breaking change — new optional constructs are absent when unused, so a Fold that doesn't use them stays byte-identical. Additive changes don't bump the version.

Buy me a coffee