Open an old PowerPoint 97-2003 deck
Free, no sign-up, and the file never leaves your computer.
A .ppt is not a .pptx. There is no XML, no parts and no names — one stream of records, where a slide is a record somewhere in the middle and a title is not in the slide at all but in a list the document keeps separately.
This reads that structure directly into the same deck model the modern format produces. Nothing is converted, and nothing is sent anywhere.
The file holds every draft, and nothing marks which are dead
PowerPoint never rewrote a .ppt when you edited it. It appended a fresh copy of the changed slide to the end of the stream and left the old one exactly where it was, so a presentation of forty slides can contain four hundred — most of them superseded. Nothing in the stream flags a record as obsolete. What decides is a separate structure, the persist directory, which maps each slide to the one copy that is current; a reader that walks the records in order instead gets the deck interleaved with every draft it passed through on the way. There is a second trap in the same file: the picture store sits in the drawing group record while the picture *bytes* live in a stream of their own, referenced only by offset — so the store looks empty to anyone who does not know to go and find them.
Everything below is parsed from the file, not approximated
Read from the bytes the format actually stores, into a model that does not know which generation produced it.
The stream, and which half of it is alive
Slides and their text
Typography
Shapes and pictures
Tables and SmartArt, where PowerPoint left them
PowerPoint 95
What this does not do
Every renderer has a list like this. Most do not publish it.
- Ink placement is measured at about 82% of lines landing where PowerPoint puts them — below .pptx, which has absolute coordinates for everything.
- Italic runs are the weakest of the character properties, matching about 94% of the reference.
- A table or diagram written by PowerPoint 97 itself, with no modern package beside it, stays a grid of text boxes — there is nothing in the file that says otherwise.
- Animations and transitions are ignored, as in the modern format.
- Encrypted presentations are detected but cannot be opened.
If a file of yours renders wrong, send it to admin@genom.dev. It joins the corpus everything is measured against, which is what makes a fix stay fixed.
Things people ask
- Is my presentation uploaded anywhere?
- No. The file is opened by JavaScript running in this tab and is never sent anywhere — there is no upload, no server-side conversion and no copy kept. You can confirm it: open your browser’s network panel, then open a file. Nothing leaves. This also means the page works with no connection at all once it has loaded.
- Is the file converted to .pptx first?
- No. The binary record stream is parsed straight into the same model the modern format produces, so the same renderer draws it and the same extractor reads it. Nothing round-trips through another format.
- Do tables and SmartArt come out?
- It depends who saved the file. A .ppt has no concept of a table — PowerPoint 97 drew one as a grid of separate text boxes with lines between them. When a later version of PowerPoint saves to this format it writes that grid for old readers and, beside it in a shape property, a complete package describing the real table; that is read, so the table comes back. A grid drawn by PowerPoint 97 itself stays a grid of text boxes, because nothing in the file says otherwise.
- How close is it to PowerPoint?
- Measured across 311 presentations and 2,681 slides against PowerPoint’s own export: every slide accounted for, 98.5% of words and 99.5% of placeholders matched. Ink placement is the weaker number, with about 82% of lines landing where PowerPoint puts them — a modern .pptx does better there because every shape carries absolute coordinates.
The viewer, and the parser on its own
The parser produces a model that knows nothing about CSS or the DOM, so the same call runs in Node for extraction, search and conversion. PowerPoint 97-2003 and its other generation are one package.
import { DocumentViewer } from '@genomdev/react';
<DocumentViewer file={file} fit="width" />;