🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@office-open/pptx

Package Overview
Dependencies
Maintainers
1
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@office-open/pptx

Generate, parse, and patch .pptx presentations with a declarative TypeScript API

Source
npmnpm
Version
0.10.11
Version published
Weekly downloads
501
96.47%
Maintainers
1
Weekly downloads
 
Created
Source

@office-open/pptx

Generate and parse .pptx presentations with a declarative TypeScript API. Works in Node.js and browsers.

Features

  • 🖥️ Slide Management — Create presentations with multiple slides, slide masters, and slide layouts
  • 🔷 Shapes — Rectangles, ellipses, lines, connectors, and custom geometry shapes
  • ✍️ Text & Rich Formatting — Paragraphs, runs, fonts, colors, alignment, and spacing
  • 📊 Tables — Full table support with rows, cells, borders, and cell properties
  • 📈 Charts — Bar, line, pie, area, and scatter charts with customization
  • 🧩 SmartArt — Built-in SmartArt graphic generation with multiple layouts and styles
  • 🖼️ Images — Inline pictures with fills, transformations, and effects
  • 🎨 Backgrounds — Solid color, gradient, and picture backgrounds
  • 🔄 Transitions — Slide transitions with various types and durations
  • Animations — Entrance, emphasis, exit, and motion path animations
  • 🎬 Media — Video and audio embedding
  • 🔗 Hyperlinks — Clickable hyperlinks on shapes and text
  • 📑 Headers & Footers — Slide header/footer with date, slide number
  • 📝 Notes — Speaker notes for each slide
  • 👥 Group Shapes — Group multiple shapes together
  • 🖌️ DrawingML — Shapes with fills, outlines, shadows, glow, reflection, and 3D effects
  • 📖 Parsing — Parse existing .pptx files with parsePresentation for round-trip workflows
  • 🔧 Template Patching — Patch existing PPTX templates via placeholder replacement

Installation

# pnpm
pnpm add @office-open/pptx

# npm
npm install @office-open/pptx

# yarn
yarn add @office-open/pptx

# bun
bun add @office-open/pptx

Quick Start

import { generatePresentation } from "@office-open/pptx";
import { writeFileSync } from "node:fs";

const buffer = await generatePresentation({
  slides: [
    {
      children: [
        {
          shape: {
            textBody: {
              children: [{ paragraph: { children: ["Hello World"] } }],
            },
            fill: "4472C4",
            x: 100,
            y: 100,
            width: 600,
            height: 400,
          },
        },
      ],
    },
  ],
});

writeFileSync("presentation.pptx", buffer);

Parsing

Read existing .pptx files and re-create them as PresentationOptions:

import { parsePresentation, generatePresentation } from "@office-open/pptx";
import { readFileSync, writeFileSync } from "node:fs";

const opts = parsePresentation(new Uint8Array(readFileSync("input.pptx")));

// Modify parsed data, then re-generate
const buffer = await generatePresentation(opts);
writeFileSync("output.pptx", buffer);

Benchmark

Performance vs PptxGenJS (higher ops/s is better, Windows 11 / Node 24).

Default = XML DEFLATE level 1 (SuperFast); media is split by type, matching MS Office PowerPoint — already-compressed formats (PNG/JPEG/GIF) are STOREd, the rest (EMF/WMF/BMP/TIFF/…) use DEFLATE level 6 / Normal (verified on a real MS Office file). All STORE = no compression ({ compression: { xml: 0, media: 0 } }). PptxGenJS (async only) defaults to STORE (via JSZip), supports DEFLATE via compression: true (applies to ALL entries including images).

// Default (matches MS Office)
await generatePresentation(options);
// All STORE (no compression)
await generatePresentation(options, { compression: { xml: 0, media: 0 } });

Create + toBuffer (end-to-end)

ScenarioDefault syncDefault asyncAll STORE syncAll STORE asyncPptxGenJS DEFLATEPptxGenJS STORE
Simple (2 shapes)1,176 ops/s646 ops/s4,345 ops/s3,969 ops/s185 ops/s199 ops/s
Styled shapes (20)1,182 ops/s660 ops/s4,197 ops/s4,224 ops/s196 ops/s194 ops/s
Table (10x5)1,471 ops/s716 ops/s8,044 ops/s7,416 ops/s928 ops/s1,020 ops/s
Full featured1,033 ops/s639 ops/s2,924 ops/s2,598 ops/s107 ops/s102 ops/s

Large Files — Create + toBuffer

ScenarioDefault syncDefault asyncAll STORE syncAll STORE asyncPptxGenJS DEFLATEPptxGenJS STORE
30 slides x 20 shapes255 ops/s143 ops/s567 ops/s547 ops/s127 ops/s135 ops/s
30 slides x 10 images120 ops/s84.4 ops/s169 ops/s163 ops/s0.34 ops/s0.34 ops/s
100x10 table603 ops/s446 ops/s1,053 ops/s1,052 ops/s135 ops/s121 ops/s
50 slides full86.7 ops/s54.4 ops/s126 ops/s128 ops/s1.01 ops/s1.02 ops/s

Large File (~100MB) — Mixed Content

40 slides x (2 shapes + 2 mixed-size images + 3x3 table).

ScenarioDefault syncDefault asyncAll STORE syncAll STORE asyncPptxGenJS DEFLATEPptxGenJS STORE
40 slides mixed24.5 ops/s22.4 ops/s25.3 ops/s25.0 ops/s0.24 ops/s0.24 ops/s

Examples

Check the demo folder for working examples covering every feature.

License

Keywords

office-open

FAQs

Package last updated on 01 Jul 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts