{}OPF
OPEN PRESENTATION FORMAT·v0.2.2MIT licensed

Slide decks,
in plain JSON.

OPF is an open file format for presentations. A deck is one JSON document — readable in review, diffable in git, and structured so AI tools can author it directly. Render it to PPTX or the web when you ship.

{
  "$schema": "https://openpresentation.org/schema/opf/v1",
  "name": "Q1 2026 Business Review",
  "audience": "Board of Directors",
  "tone": "formal",
  "slides": [
    {
      "layout": "title-subtitle",
      "title": "Strong quarter across the core business",
      "text": "Revenue grew 34% YoY and net retention beat plan."
    },
    {
      "layout": "bullets",
      "title": "Where we focus next",
      "items": [
        "Expand enterprise onboarding",
        "Convert retention lift into renewals"
      ]
    }
  ],
  "design": {
    "theme": "minimal"
  }
}
Q1 2026 Business Reviewslide output
01 / 02

Strong quarter across the core business

Revenue grew 34% YoY and net retention beat plan.

Where you are · where OPF takes you

01Problem

LLMs can draft the deck, then hit a file-format wall.

A zipped XML bundle is hard to diff, hard to review, and brittle for agents to author directly.

02Guide

OPF turns the deck into a readable contract.

Schemas, catalogs, themes, and examples give models structure without hiding the work from developers.

03Plan

Author JSON. Validate it. Render it anywhere.

Use OPF as the interchange layer between agents, editors, renderers, and version control.

Why OPF exists

.pptx wasn’t builtfor code reviewor AI authoring.

The mismatch

PowerPoint files are zipped XML bundles. Reviewers see binary churn in pull requests. Models and converters have to infer structure from packaging.

The format leaks tooling assumptions from a desktop era — OOXML was designed for Office, not for agents, diffs, or pipelines.

+ The answer

OPF makes the deck a JSON contract — one document, schemas, catalogs, themes — that humans, tools, and agents can read the same way.

Render it back to PPTX when you need a desktop file. Render it as HTML when you need a webpage. The source of truth is portable.

format application/opf+jsonextension .opf.jsonspec  v0.2.2 · MIT

Reference docs

Every record has a schema you can link to.

The spec auto-renders from JSON Schemas in the OPF repo. Every field is anchorable, every type is linked, every page has “Edit on GitHub”. Below is a live preview — pick a schema from the tree.

Presentation

type: object
$id  https://openpresentation.org/schema/opf/v1source  spec/schemas/opf.schema.jsonspec  v0.2.2
Field
Type
Required
Description
$schema
const
Optional OPF schema version. When omitted, validators and engines should assume the latest supported OPF schema.
name
string
Display name of the presentation for GUI/TUI lists, library/search indexing, OS-level metadata, and default export filenames. This is deck identity, not slide content. Use slides[].title and slides[].subtitle for text that should appear on presented slides.
description
string
Free-form prose describing what this presentation is about. Used by agents and humans as a deck-level summary; complements purpose (the goal) and narrative (the structured storyline). Round-trips to OOXML 'docProps/core.xml' as '<dc:description>' (PowerPoint surfaces this as the…
filename
string
Optional base filename for exports (without extension). Engine strips a trailing .pptx, .pdf, .png, or .svg (case-insensitive) and appends the target format's extension. When omitted, the engine slugifies name when present. See /docs/opf for full validation rules.
organization
ref:Organization | array<ref:Organization>
Organization associated with the presentation, usually the presenting company. Array form supports hosts, partners, clients, and sponsors. The primary organization (declared via Organization.role or, if no role is set, the first item) drives default branding such as cover-slide…
speaker
ref:Speaker | array<ref:Speaker>
Person presenting the deck. Array form supports panels and multi-speaker decks. Used for cover slides, bio slides, footers, and panel attribution.
author
string | array<string>
Optional credit for the person who authored or contributed to the deck, distinct from speaker. Array form supports multiple contributors. Round-trips to OOXML 'docProps/core.xml' as '<dc:creator>' (semicolon-joined when multiple) and seeds '<cp:lastModifiedBy>' on first write; s…
audience
string | array<string | ref:Audience>
Intended audiences for the presentation. Accepts either: - A single string shorthand: free-form description ('Series B investors'), an audiences catalog id ('executives'), an HTTPS URL, or a 'pkg:' reference. - An array of string shorthands and/or inline Audience objects for cus…

Catalogs · 11

Curated presets. Sourced from anywhere.

OPF separates the deck from its style. Every catalog is a versioned JSON file. Ship with the defaults, fork them, publish your own, or reference someone else’s by URL.

Reference a remote catalog

Catalogs are URLs.

Point any catalog reference at a URL that returns catalog JSON. Versions are part of the path; entries are addressed by id with a fragment.

{
  "tone": "https://acme.example/catalogs/tones/v1#consultative",
  "narrative": "@opf/catalogs/narratives/v1#business-review"
}

Before · After

What changes when the deck is JSON.

Workflow
.pptx
OPF
File
Zipped XML bundle
Single JSON document
Diff in git
Binary churn
Line-by-line diff
Schema
Buried in OOXML
Public JSON Schemas
LLM authoring
Brittle, reverse-engineered
Direct, structured
Review
Open in PowerPoint
Open in any editor
Tooling
Tied to one renderer
Portable across OPF tools