pre-alphaApache-2.0@pptx-studio/* on npmbuilt against render-svg 0.6.6

Open a .pptx in the browser, draw it the way PowerPoint does, and write it back without losing anything you did not touch.

PPTX Studio is twelve small TypeScript packages for reading, rendering and writing PowerPoint files. They treat the file itself as the document: slides keep inheriting from their layouts and masters instead of being flattened, every rule for colour, shapes and text was measured against real PowerPoint, and on export the parts you did not edit are copied out byte for byte. It all runs in a browser tab or a Web Worker with no server, and nothing you open is uploaded anywhere. One package, the CLI, runs the same renderer in Node.

A rendered slide

The first slide of a46 hundred slides, rendered to SVG
a46 hundred slides · 100 slides · 160 kB · drawn by @pptx-studio/cli when this site was builtOpen it live, or drop your own →

What it does

The file is the document.

Most tools read a .pptx into their own model and write a brand-new file from it, so anything the model did not understand is gone when you save. PPTX Studio keeps the original package and edits parts inside it. Anything you did not touch - charts, SmartArt, animations, macros, OLE objects - is streamed back out exactly as it came in, because nothing had to understand it.

Inheritance stays live.

A title on a slide usually has no position of its own; it gets one from the layout, which gets it from the master. Other editors bake those numbers in the moment they open the file, and from then on the slide is a pile of fixed boxes. Here a missing property stays missing and is resolved on demand, so you can always ask where a value came from - and later change the layout and have the slide follow.

Preservation by default, checked before you get the bytes.

You do not opt in to keeping content. The writer re-serialises only the parts you changed, then runs 34 rules that real PowerPoint is known to refuse and will not hand you a file it just broke. That is tested on 55 decks in CI, and the round trip opens in PowerPoint 365 with no repair prompt.

Twelve packages

Install only what you import from; the rest arrive as dependencies. Every one is ESM with its own types.

Read the file

  • @pptx-studio/opc0.1.3

    Reads and writes the .pptx ZIP - parts, content types and relationships - with hard limits against hostile files.

    TabWorkerNodeDocsDemo
  • @pptx-studio/xml0.1.2

    Parses OOXML into a tree that remembers its own bytes, so an edit changes only what you touched and undo is exact.

    TabWorkerNodeDocsDemo
  • @pptx-studio/census0.1.2

    Tells you what is inside a deck as plain JSON - parts, features, namespaces, problems - without refusing a broken file.

    TabWorkerNodeDocsDemo

Draw it

  • @pptx-studio/model0.5.0

    Slides, layouts, masters and themes as one document, with a resolver that reports where every value came from.

    TabWorkerNodeDocsDemo
  • @pptx-studio/geometry0.1.2

    The 187 preset shapes and custom paths, turned into SVG path data; drag an adjust handle and get the number to write back.

    TabWorkerNodeDocsDemo
  • @pptx-studio/paint0.4.1

    Colours, gradients, pattern tiles, strokes and effects, each rule measured against PowerPoint rather than read from the standard.

    TabWorkerNodeDocsDemo
  • @pptx-studio/text0.2.2

    Line spacing, wrapping, autofit, bullets, fields and font substitution, the way PowerPoint actually lays them out.

    TabWorkerNodeDocsDemo
  • @pptx-studio/render-svg0.6.6

    A slide to an SVG string - in a tab, in a Worker, or in Node.

    TabWorkerNodeDocsDemo
  • @pptx-studio/render-dom0.3.7

    The same slide as live SVG elements you can hit-test, zoom and overlay, plus an HTML text layer for selection and screen readers.

Write it back

  • @pptx-studio/validate0.5.0

    The 34 rules a .pptx must not break, with the part and XPath of everything that fired.

    TabWorkerNodeDocsDemo
  • @pptx-studio/writer0.1.6

    Exports the deck, re-serialising only what changed, checking preservation, and refusing to return a file it broke.

    TabWorkerNodeDocsDemo

From the command line

  • @pptx-studio/cli0.4.4

    The same engine from the command line: render slides without a browser, inspect, validate, round-trip, bisect.

Install

Pick what you want to do, or tick the packages yourself.

Package manager
npm install @pptx-studio/opc @pptx-studio/model @pptx-studio/render-svg
Or choose the packages:

ESM only. TypeScript types are shipped. Node 24 or newer for the CLI.

What works today

4 of 13 gates closed · 43 of 111 sub-phases recorded · 55/55 decks round-trip in CI

Full status and roadmap →

Drawn today

  • Shapes, groups and pictures
  • Fills, gradients, patterns
  • Strokes, arrowheads, effects
  • Text with bullets, fields and autofit
  • Vertical and rotated text
  • A hundred slides at any zoom

Phases 0 to 3, gates 0 to 3 closed.

Preserved, not drawn

  • Tables
  • Charts
  • SmartArt
  • OLE objects
  • Ink and 3-D models
  • Video, audio, animations, macros

Carried through an export byte for byte; shown as frames until their phase draws them.

Not yet

  • Select, resize, rotate
  • Text editing
  • Layout switching and theme verbs
  • Font embedding
  • Charts, drawn
  • 1.0

Phases 4 to 12 of the plan, in that order.

Measured, not assumed

Every rule in these packages is either cited to ECMA-376 by clause or measured against PowerPoint 16.0.20326 and committed as a fixture. The reasoning lives in one architecture decision record per sub-phase.

Not a PowerPoint clone