{}OPF

Developer docs

Start with a JSON deck, validate it against the schema, then layer catalogs and rendering behavior on top.

Open tools for agents and developers

Use the same JSON documents with any agent, a local CLI, browser previews, and the visual editor. No required AI provider, account, or paid service.

The newest editor, composition and CLI APIs currently require coordinated source builds. Follow the repository handoff guide; older npm versions do not include every API documented here.

Quickstart

1. Install the package

Install @openpresentation/opf, the canonical TypeScript types, schemas, and validation helpers, from npm.

shell
pnpm add @openpresentation/opf

2. Author or receive an OPF deck

Keep deck source as *.opf.json so editors, validators, agents, and git all see JSON.

validate.ts
import { validatePresentation } from "@openpresentation/opf"

const deck = {
  name: "Launch narrative",
  slides: [{ title: "The opportunity", items: ["Plain JSON", "Schema-backed", "Diffable"] }]
}

const result = validatePresentation(deck)

3. Validate before rendering

Validate against the schema first. Rendering tools should reject invalid documents before attempting any OOXML or canvas output.

No install needed to experiment: paste any deck into the in-browser playground and get the same errors and warnings validatePresentation returns in your pipeline.

For ColorRef, variables, and opf bundle, start with the OPF format card and validation notes. The site schema snapshot may lead the pinned npm validator until the next @openpresentation/opf registry release.

Authoring guides

Short guides for common OPF authoring patterns, AI-generated decks, and renderer-friendly shorthand.

Format reference

The canonical reference docs from the OPF repository, rendered here in reading order. Each page links back to its Markdown source and can be copied whole for LLM context.

How OPF WorksAn OPF document is one JSON file that answers three questions about a presentation.OPF format cardA self-contained authoring reference for agents and humans writing *.opf.json documents, sized for pasting into a model's context. The canonical contract is the JSON Schema (https://openpresentation.org/schema…Content PayloadsSlide content lives directly on a slide as a full-slide payload, in layout-agnostic blocks, or inside a promoted region key such as left, center+right, or top:left.Design ResolutionHow an engine decides the effective design for any given slide. The schema spreads these rules across field descriptions; this page states them once, as an algorithm.Possible Content Payload DesignThis is a parking-lot note for design controls intentionally removed from slide content payloads while the v1 content model stabilizes.OPF Presentation Schema ReferenceThis reference documents the author-facing shape of a complete *.opf.json presentation document. It summarizes the canonical schema in spec/schemas/opf.schema.json; the schema remains the source of truth for v…OPF Catalog Schema ReferenceCatalog records are reusable presets that OPF documents reference by id. This page summarizes every companion schema in spec/schemas/ except the top-level presentation schema.OPF Examples GuideThe examples/ directory has two shipped layers, plus a docs fixture kept outside the catalog.OPF Release ProcessUse Node 24 (24.x) for all future source, candidate and registry verification. The next releases must document the Node 24 migration and use new versions. Historical dual-runtime release records remain unchang…AI agent skills for OPFThe repository ships six reusable skills in skills/. Each folder has a SKILL.md entrypoint and optional references, assets, or scripts. agents/openai.yaml supplies Codex display metadata; the instructions them…Compatibility matrixPublished registry evidence for the coordinated Node 24 toolchain. This matrix is the honest supported subset for the developer quickstart. It is not universal Office parity and does not describe archived prot…CSV and JSON data in OPFImport CSV, TSV, and JSON as ordinary inline tables or charts. The resulting OPF stays editable in the browser and works with PPTX export without needing the original file.Dynamic compositionOPF keeps authoring intent in JSON. Use blocks when content can reflow; use promoted regions when relative placement is meaningful. composition on a slide overrides fields in the resolved layout's composition.…Local ecosystem developmentKeep opf, opf-render, opf-pptx, opf-editor, and pptx-gallery in the same parent directory. Install each repository's dependencies normally, then run these commands from opf.Windows release and adoption evidence — 2026-09-08Measured fonts and reproducible previewsFor the starter set and delivery priorities, see the font roadmap.Continue the OPF ecosystem workRuntime update (September 10): use Node 24 only for new development and verification; see migration instructions. Historical Node 20/24 results and commands below describe prior checkpoints. Keep distinct brow…OpenPresentation ecosystem handoff — 2026-09-08Runtime update (September 10): use Node 24 only for new development and verification; see migration instructions. Historical Node 20/24 results and commands below describe prior checkpoints. Keep distinct brow…Source wrap-up and two-machine continuation — September 10, 2026Runtime update (September 10): use Node 24 only for new development and verification; see migration instructions. Historical Node 20/24 results and commands below describe prior checkpoints. Keep distinct brow…OpenPresentation owner handoff — September 15, 2026Handoff — September 16, 2026Continue as primary owner. Read this file after the 15 September handoff; that checkpoint’s npm versions are outdated.Mac owner checkpoint — 10 September 2026Runtime update (September 10): use Node 24 only for new development and verification; see migration instructions. Historical Node 20/24 results and commands below describe prior checkpoints. Keep distinct brow…Windows native testing checkpointRuntime update (September 10): use Node 24 only for new development and verification; see migration instructions. Historical Node 20/24 results and commands below describe prior checkpoints. Keep distinct brow…OPF lint for humans and agentsCore 0.10.0 added the browser-safe @openpresentation/opf/lint entrypoint, and CLI 0.8.0 added opf lint. Current published packages are core 0.11.0 and CLI 0.9.0; they still include lint. Earlier versions than…Browser preview and live editingThe current local preview provides an embeddable SVG canvas in @openpresentation/opf-editor/canvas. OPF JSON remains the document; the canvas writes validated JSON Patch operations through an EditorSession. Dr…Authoring OPF with an LLMWrite a complete JSON document with name and slides. Put visible words in slide fields, not presentation metadata. Use *.opf.json filenames and stable, unique slide id values when a deck will be revised repeat…Native content releases — September 9, 2026Renderer 0.5.1 and PPTX 0.5.2 are published with provenance. Core 0.7.0, editor 0.4.0 and CLI 0.5.0 remain unchanged. The registry records include actual UTC publication timestamps, gitHeads and tarball integr…Native PowerPoint feature matrix — September 9, 2026Copy/paste prompt for the next project ownerOpenPresentation ecosystem and agent accessOpenPresentation's format, schemas, presets, libraries, CLI, agent skills, and documentation form a free, open-source foundation. The OPF repository uses the MIT license. Bundled fonts and third-party dependen…PR backlog and public adoption checkpoint — 2026-09-09The user authorized resolving older PRs as well as completing active adoption work. Closures below preserve branches and explicit remaining work; they do not hide security alerts or claim deferred features wer…Developer quickstartA new developer can install the published OPF packages into a fresh Node 24 project and author, lint, compose, paginate, edit with undo, preview and export a representative deck. No account, model call, or sib…Rich text measurement and outputOPF text arrays preserve run formatting in the document. Text payloads now use a shared mixed-style layout for composition, SVG preview, and native PPTX export. Plain string text keeps its existing layout path.Security and dependency review — September 9, 2026 UTCOpenPresentation status — September 15, 2026The public JSON/slide demo and reusable authoring foundation are available. Shared headers/footers are validated on main. Four unfinished shaping prototypes are preserved on remote archive branches and tracked…OpenPresentation status — September 16, 2026Treat status-2026-09-15 as the previous checkpoint. Live npm is newer than that file: core 0.10.1, renderer/PPTX/CLI 0.8.1, editor 0.7.1, all Node 24.Inherited table text colorsThe unpublished shared-metric integration branches use one core rule for inherited table text colors in SVG and editable PowerPoint cells. After resolving the cell fill, keep the inherited text color when its…

Core schemas

Schema reference pages render from spec/schemas/*.schema.json.

Package status: @openpresentation/opf on npm ↗