Introduction
Apertura is a set of TypeScript packages that parse Office file formats and render them in the browser. There is no server component, and there is no runtime dependency.
The shape of it
Every format is split in two: a parser that turns bytes into a model mirroring the file format, and a renderer that turns that model into DOM. The parser knows nothing about CSS or the DOM, which is why the same call runs unchanged in Node for text extraction, search and conversion.
Above them sits @apertura/viewer, a facade that detects the format from the bytes and picks the right pair. The React, Vue and Angular packages are thin adapters over that one class, so their behaviour is identical by construction rather than by convention.
Choosing a package
| If you want to | Install |
|---|---|
| Show a document in a React app | @apertura/react |
| Show a document in Vue or Angular | @apertura/vue, @apertura/angular |
| Show a document without a framework | @apertura/viewer |
| Keep unused parsers out of the bundle | @apertura/core plus the format packages you need |
| Read a file in Node without rendering it | @apertura/docx, @apertura/xlsx, @apertura/pptx |
What to expect
This is a viewer, not a converter and not an editor. It aims to show a document so a person can read it, search it, select from it and trust what they see. It does not aim to reproduce Word to the pixel, and it never will — the browser lays out text, and its line breaking is not Word's.
What is achievable, and what is measured on every change, is that the content is all there, in the right order, correctly styled, with nothing missing, overlapping or garbled. The fidelity page describes how that is measured and publishes what is known to be wrong.
ResizeObserver and Range.getClientRects() — every current version qualifies. Node 20.11+ for the parsers on the server. No polyfills, no WebAssembly, no workers required.Next
Installation and first render takes about two minutes and ends with a document on screen.