🎩 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
55
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.9
Version published
Weekly downloads
273
-87.3%
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 1 (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,391 ops/s693 ops/s4,055 ops/s4,148 ops/s182 ops/s187 ops/s
Styled shapes (20)1,302 ops/s661 ops/s4,387 ops/s4,030 ops/s188 ops/s183 ops/s
Table (10x5)1,694 ops/s802 ops/s7,787 ops/s7,891 ops/s857 ops/s937 ops/s
Full featured1,155 ops/s627 ops/s2,873 ops/s2,821 ops/s97 ops/s98 ops/s

Large Files — Create + toBuffer

ScenarioDefault syncDefault asyncAll STORE syncAll STORE asyncPptxGenJS DEFLATEPptxGenJS STORE
30 slides x 20 shapes271 ops/s144 ops/s571 ops/s577 ops/s119 ops/s120 ops/s
30 slides x 10 images130 ops/s87.4 ops/s173 ops/s168 ops/s0.32 ops/s0.32 ops/s
100x10 table618 ops/s453 ops/s1,082 ops/s1,039 ops/s128 ops/s123 ops/s
50 slides full89.2 ops/s60.5 ops/s131 ops/s129 ops/s0.95 ops/s0.95 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.1 ops/s26.3 ops/s26.5 ops/s0.22 ops/s0.23 ops/s

Examples

Check the demo folder for working examples covering every feature.

License

Keywords

office-open

FAQs

Package last updated on 29 Jun 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