{}OPF
DocsSpec sectionEdit on GitHub

Open Presentation Format spec

Formal source links, normative rules, and schema references for OPF.

1. Source of truth

OPF spec content is pulled from OpenPresentation/opf at build time. This site renders the format reference; it does not fork the spec.

![npm version](https://www.npmjs.com/package/@openpresentation/opf) ![npm downloads](https://www.npmjs.com/package/@openpresentation/opf) ![license](./LICENSE)

Public npm package: @openpresentation/opf (npm install @openpresentation/opf).

Open Presentation Format is the portable, human-readable JSON document format for slide decks.

2. Schema index

Schema files live in spec/schemas. The OPF site reads the same JSON Schema files that validators and packages consume.

PresentationOpen-source JSON format for describing PowerPoint presentations. Agents describe narratives, content, audience, reusable assets, and design — the engine handles OOXML complexity. Fields that reference catalog…20 fields · 1 requiredAudienceSchema for audience records in the pptx.gallery library. Each record names an audience archetype (e.g. 'executives', 'engineering-team', 'investors') and carries seniority, technical-fluency, decision-power, a…13 fields · 3 requiredChart TypeSchema for chart-type records in the pptx.gallery catalog. Each record describes a named chart variant, its Open XML mapping, its series/category cardinality, the column structure of the underlying workbook, a…22 fields · 4 requiredColor SchemeSchema for color-scheme records in the pptx.gallery library. Each scheme is a named palette with the twelve PowerPoint color slots (six accents, two darks, two lights, plus hyperlink and followed-hyperlink), s…19 fields · 3 requiredFont SchemeSchema for font-scheme records in the pptx.gallery library. Each scheme pairs a major (heading) and minor (body) font family in the OOXML majorFont/minorFont sense, scoped to a target app (PowerPoint or Google…14 fields · 5 requiredLanguageSchema for language records in the pptx.gallery library. Each record names a presentation language, carries a BCP-47 language tag, and pairs it with sensible default font schemes for PowerPoint and Google Slid…13 fields · 4 requiredNarrative TemplateSchema for narrative template files in the openpresentation.org catalog. Each template describes a named story arc (e.g. 'problem-solution', 'scqa') as an ordered list of beats. Templates are referenced from O…10 fields · 4 requiredPurposeSchema for purpose records in the pptx.gallery library. Each record names a presentation objective such as informing, aligning, persuading, driving a decision, or selling. Purposes are referenced from OPF docu…11 fields · 3 requiredSlide LayoutSchema for slide-layout records in the pptx.gallery library. Each record describes a semantic slide layout — what regions it exposes and what content kinds those regions are intended to hold. Layouts are refer…23 fields · 3 requiredSocial PlatformSchema for social-platform records in the pptx.gallery library. Each record describes a single social-media platform — its base URL, profile-URL pattern, handle prefix, brand color, and themed icons. Records a…16 fields · 3 requiredThemeSchema for theme records in the pptx.gallery library. Each theme is a small, named bundle that pairs a color scheme, a font scheme, a default theme-controlled background, and a slide size. Themes are reference…11 fields · 3 requiredToneSchema for tone records in the pptx.gallery library. Each record names a presentation tone (e.g. 'formal', 'casual', 'inspirational') and carries voice cues, anti-patterns, and sample phrases that AI-driven ge…11 fields · 3 required

3. Object index

The presentation schema also defines reusable object shapes for slides, content payloads, charts, tables, design, catalog references, and metadata.

4. Document contract

An OPF document MUST be valid JSON. Complete presentation documents use the *.opf.json suffix and include a slides array.

minimal document contract
{
  "$schema": "https://openpresentation.org/schema/opf/v1",
  "name": "Series B narrative",
  "slides": [
    {
      "title": "Why now",
      "layout": "title-subtitle"
    }
  ]
}