Skip to content
Office Open

Getting Started

Introduction

Overview of the office-open project and its packages

office-open is a TypeScript monorepo for Office documents. It provides declarative APIs to create .docx, .pptx, and .xlsx files, plus parsing for legacy formats 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/doc, @office-open/xls, @office-open/ppt, @office-open/rtf, @office-open/odt, @office-open/ods, @office-open/odp, @office-open/core, and @office-open/xml
  • Includes a CLI for generating documents from JSON files
  • Provides JSON Schemas for validating document options
  • Provides AI SDK tools for DOCX, PPTX, XLSX, ODT, RTF, ODS, and ODP generation
  • 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)

#Additional Formats

  • @office-open/doc, @office-open/xls, and @office-open/ppt parse legacy binary documents into the matching OOXML option models
  • @office-open/rtf generates and parses RTF with DocumentOptions
  • @office-open/odt, @office-open/ods, and @office-open/odp read and write their ODF documents; internal @office-open/odf code owns the container, generic nodes, and low-level chart and database codecs

#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