Generate Office Open XML documents.

Create .docx, .pptx, and .xlsx files with JSON or TypeScript. Designed for AI agents and traditional workflows alike.
{
    "sections": [
        {
            "children": [
                { "paragraph": { "children": [{ "text": "Hello, World!", "bold": true }] } }
            ]
        }
    ]
}
  • JSON & TypeScript
    Create documents with pure JSON objects or the TypeScript functional API. The JSON-first design pairs naturally with AI agents, LLM workflows, and Zod-powered schemas.
  • Rich Content
    Paragraphs, tables, images, charts, SmartArt, math equations, headers, footers, and more.
  • Type-safe
    Comprehensive TypeScript definitions for autocomplete and type safety across every API.
  • Cross-platform
    Runs in Node.js, browsers, Deno, and Bun. Export to Buffer, Blob, Base64, stream, or string.
  • OOXML Compliant
    Output validates against the OOXML XSD and opens in Microsoft Office, WPS Office, LibreOffice, and Google Workspace.
  • Modular Packages
    Install only what you need — docx, pptx, xlsx, xml, or core. The unified office-open package adds a CLI and AI SDK tools.

Build documents with JSON or TypeScript

Define documents as plain JSON objects — zero class instantiation — or use the TypeScript functional API for a full IDE experience. Both produce valid OOXML markup.
  • Create Word documents with paragraphs, tables, images, and charts
  • Create PowerPoint presentations with shapes, animations, and transitions
  • Create Excel spreadsheets with styles, charts, and data validation
  • High Performance with native zlib compression and streaming output
{
    "sections": [
        {
            "children": [
                {
                    "table": {
                        "rows": [
                            { "cells": [{ "children": [{ "paragraph": "Name" }] }, { "children": [{ "paragraph": "Role" }] }] },
                            { "cells": [{ "children": [{ "paragraph": "Alice" }] }, { "children": [{ "paragraph": "Engineer" }] }] },
                            { "cells": [{ "children": [{ "paragraph": "Bob" }] }, { "children": [{ "paragraph": "Designer" }] }] }
                        ]
                    }
                }
            ]
        }
    ]
}

Read and modify existing files

Parse .docx, .pptx, and .xlsx files into structured objects for inspection, or patch templates by replacing {{placeholder}} tokens with new content.
  • Read document structure, styles, and content
  • Patch template placeholders with new content
  • Parse, modify, and re-export in a pipeline
import { parseDocument, patchDocument } from "@office-open/docx";

// Parse existing file
const opts = parseDocument(buffer);
// opts.sections — document sections
// opts.title, opts.creator — core properties

// Patch template placeholders
const result = await patchDocument({
  outputType: "nodebuffer",
  data: buffer,
  placeholders: {
    name: { type: "paragraph", children: [{ text: "John" }] },
  },
});

Add document generation to your project.

Copyright © 2026