🎩 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.3
Version published
Weekly downloads
507
-57.03%
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,684 ops/s773 ops/s6,061 ops/s5,249 ops/s181 ops/s185 ops/s
Styled shapes (20)1,497 ops/s745 ops/s5,154 ops/s4,958 ops/s168 ops/s170 ops/s
Table (10x5)1,657 ops/s729 ops/s7,252 ops/s6,797 ops/s889 ops/s999 ops/s
Full featured1,635 ops/s714 ops/s4,816 ops/s4,321 ops/s96 ops/s94 ops/s

Large Files — Create + toBuffer

ScenarioDefault syncDefault asyncAll STORE syncAll STORE asyncPptxGenJS DEFLATEPptxGenJS STORE
30 slides x 20 shapes253 ops/s139 ops/s500 ops/s490 ops/s119 ops/s123 ops/s
30 slides x 10 images320 ops/s160 ops/s793 ops/s795 ops/s0.26 ops/s0.30 ops/s
100x10 table641 ops/s460 ops/s954 ops/s891 ops/s120 ops/s126 ops/s
50 slides full169 ops/s87 ops/s326 ops/s317 ops/s0.90 ops/s0.90 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 mixed227 ops/s124 ops/s708 ops/s721 ops/s0.23 ops/s0.22 ops/s

Examples

Check the demo folder for working examples covering every feature.

License

Keywords

office-open

FAQs

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