Getting Started

Introduction

Overview of the office-open project and its packages

office-open is a TypeScript monorepo for generating Office Open XML documents. It provides declarative APIs to create .docx, .pptx, and .xlsx files without needing Microsoft Office installed.

Monorepo Structure

The project is organized into packages, each with a focused responsibility:

office-open

The unified package that re-exports all document-specific packages and provides shared utilities:

  • Re-exports @office-open/docx, @office-open/pptx, @office-open/xlsx, @office-open/core, and @office-open/xml
  • Includes a CLI for generating documents from JSON files
  • Provides Zod schemas for validating document options
  • Provides AI SDK tools (generate-docx, generate-pptx, generate-xlsx) for AI agent integration
  • Provides a unified generate() function for all document types

Install this package when you need multiple document types or AI integration.

@office-open/core

The foundational shared package. Provides:

  • Common XML components used across document types
  • Value validation utilities
  • OOXML formatting helpers
  • Unit converters (e.g., EMU, points, twips)

You typically don't install this package directly — it's a dependency of the document-specific packages.

@office-open/xml

XML parsing and serialization layer:

  • Converts XML strings to JSON-compatible object trees
  • Serializes object trees back to XML strings
  • Handles OOXML-specific XML conventions (namespaces, prefixes)

@office-open/docx

Word document generation:

  • Create .docx files with paragraphs, tables, images, headers, footers, and more
  • Support for styles, sections, page layout, and numbering
  • Export to Buffer (Node.js) or Blob (browser)

@office-open/pptx

PowerPoint presentation generation:

  • Create .pptx files with slides, shapes, images, and charts
  • Support for slide layouts, masters, and transitions
  • Export to Buffer (Node.js) or Blob (browser)

@office-open/xlsx

Excel spreadsheet generation:

  • Create .xlsx files with worksheets, cells, styles, charts, and formulas
  • Support for cell merging, frozen panes, auto-filters, and data validation
  • Export to Buffer (Node.js) or Blob (browser)

How It Works

  1. You describe your document as a JSON object (e.g., { sections: [...] }) and pass it to generateDocument()
  2. Each property maps to OOXML markup
  3. The generate function serializes the options into an Office Open XML package (ZIP archive)
  4. You receive a Buffer or Blob ready to save or serve
Copyright © 2026