Skip to content
Genom

Open a Word document in your browser

Free, no sign-up, and the file never leaves your computer.

Samplesample.docx
Loading the viewer…
Also opensDrop any of them on the viewer above — the format is recognised from the bytes.

Drop a .docx file above and it opens. It is not sent to a server, because there is no server involved: the parser and the renderer are JavaScript running in this page.

Pages break where Word breaks them, because the content is measured after it is laid out rather than trusting the hints stored in the file. Text stays selectable and searchable — this is a rendered document, not a picture of one.

How the format actually works

Why a .docx has no pages in it

A Word file does not store pages. It stores a continuous flow of paragraphs plus the rules for how wide a page is, and Word works out the breaks each time it opens the document — which is why the same file can paginate differently on two machines with different fonts. Most browser viewers sidestep this by trusting `lastRenderedPageBreak`, a hint Word leaves behind from the last time it was opened; that hint is stale the moment anything changes. This viewer measures the rendered line boxes and breaks pages from the measurement, which is the only way a page number in a footer can be right.

What is supported

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.

Text and styles

Paragraphs and runs with the complete w:rPr and w:pPr property sets, and the six-layer style cascade: document defaults → table style → numbering → paragraph style chain → character style chain → direct formatting. Themes, including themeColor with tint and shade, and theme font slots.

Structure

Sections with independent page setup, multi-column layouts, headers and footers (default, first page, even pages), footnotes placed on the page that references them, endnotes, threaded comments, bookmarks, hyperlinks and content controls.

Tables

The full grid, gridSpan and vMerge merging, repeating header rows, cell margins and borders, and all thirteen conditional formatting blocks of a table style with correct precedence.

Lists

Abstract definitions and instances, per-instance level overrides and startOverride, multi-level %1.%2 patterns, lvlRestart, legal numbering, and the number formats: decimal, Roman, alphabetic including Cyrillic, ordinal, cardinal and ordinal text, Chicago marks, bullets. Numbers are computed and emitted as text, so they survive virtualisation, printing, selection and search.

Graphics

DrawingML pictures with cropping, rotation and flipping; anchored drawings with text wrapping; text boxes; legacy VML shapes; symbol fonts mapped to Unicode.

Fields and equations

PAGE, NUMPAGES, SECTIONPAGES and PAGEREF resolved after pagination; HYPERLINK with URL scheme validation; TOC rendered from its cached result. OMML equations converted to MathML: fractions, radicals, scripts, n-ary operators with correctly placed limits, delimiters, matrices, accents, functions.

Revisions

Insertions and deletions, shown as accepted by default or as markup on request.
Being straight with you

What this does not do

Every renderer has a list like this. Most do not publish it.

  • Tab stops are approximated; explicit stop positions are not yet honoured.
  • Text wrapping around anchored drawings uses CSS floats — close to Word’s wrap polygons, but not identical.
  • East Asian numbering formats fall back to decimal.
  • Embedded fonts are declared but not yet decrypted and installed.
  • Encrypted documents 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.

Questions

Things people ask

Is my document 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.
Do I need Microsoft Word installed?
No. Nothing is installed and no account is needed. The file is read directly from the bytes of the .docx, which is a ZIP archive of XML parts.
Can I open old .doc files too?
Yes, on the .doc page. The 97-2003 binary format is read directly rather than converted, so it lands in the same viewer.
Will it look exactly like Word?
Close, and measurably so — rendering is scored against Word’s own PDF export across a corpus of third-party documents. It is not identical. Tab stops are approximated, and text wrapping around floating images uses CSS floats rather than Word’s wrap polygons.
Using it in your own code

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. Word and its other generation are one package.

import { DocumentViewer } from '@genomdev/react';

<DocumentViewer file={file} fit="width" />;