Oxi logo Oxi

A browser-native .docx rendering engine,
measured against Microsoft Word — pixel by pixel.

Oxi opens Word documents in the browser with Word-faithful layout. Built from scratch in Rust + WebAssembly, verified page-by-page against Microsoft Word with SSIM. Open source, no server, and your files never leave your device.

Free · No account · Runs entirely in your browser

0.83
SSIM vs Word — Japanese blind
benchmark (50 never-seen docs)
0.82
SSIM vs Word — English blind
benchmark (50 never-seen docs)
100%
parse success on real
government .docx files
0
bytes uploaded —
everything runs client-side

Layout accuracy is measured, not asserted

Every claim below comes from a reproducible measurement pipeline, published in the repository.

Engineering deep dive: Why modern font metrics cannot reproduce Word pagination — how Oxi measured GDI integer rounding and implemented the result in Rust.

English blind set — 50 never-seen documents

English is measured the hard way: a frozen blind benchmark of 50 documents from the public docx-corpus that are never used as fix targets — every score is first-sight generalization, with nothing tuned to the test. Re-measured on 2026-07-29 Oxi scores 0.825 per document (0.800 at its first measurement on 2026-07-19, 0.807 on 2026-07-20) and now matches Word's page count on 48 of the 50 documents — more than any other engine measured, including ONLYOFFICE (41) and LibreOffice (43). On pixel similarity it is still behind ONLYOFFICE (0.902) and LibreOffice (0.876) and ahead of SILURUS (0.776) — the closest architectural peer, a Rust + WebAssembly canvas renderer, which Oxi beats on 36 of the 50 documents. That remaining gap is the English work queue: the set is re-measured as the engine improves. Engines: Microsoft Word (Microsoft 365 16.0.20131.20154) as ground truth, ONLYOFFICE 9.3.1.8, LibreOffice 26.2.1.2, SILURUS @silurus/ooxml 0.72.2 — all rendered at 150 DPI. On 2026-07-27 a fifth engine was added against the same frozen ground truth: BetterOffice (@betteroffice/docx 0.0.4, a new Rust + WebAssembly editor suite first published 2026-07-18), which scores 0.734 with Oxi ahead on 45 of the 50 documents. The same day added a sixth: eigenpal (@eigenpal/docx-editor-react 1.9.0, an Apache-2.0 WYSIWYG DOCX editor that lays out DOM pages via ProseMirror), which opens all 50 and scores 0.739 — Oxi is ahead on 44 of the 50 documents.

English blind set — 50 never-touched documents, per-document mean SSIM vs Word (2026-07-29)

ONLYOFFICEpage count matches Word on 41/50 · v9.3.1.8
0.902
LibreOfficepage count matches Word on 43/50 · v26.2.1.2
0.876
Oxipage count matches Word on 48/50 — best of the six
0.825
SILURUSpage count matches Word on 35/50 · v0.72.2
0.776
eigenpalpage count matches Word on 33/50 · v1.9.0 · measured 2026-07-27
0.739
BetterOfficepage count matches Word on 25/50 · v0.0.4 · measured 2026-07-27
0.734
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ LibreOffice better ↓ legal: Oxi 0.863 / LibreOffice 0.981 legal: Oxi 0.872 / LibreOffice 0.960 forms: Oxi 0.787 / LibreOffice 0.903 forms: Oxi 0.786 / LibreOffice 0.823 legal: Oxi 0.951 / LibreOffice 0.858 forms: Oxi 0.847 / LibreOffice 0.980 forms: Oxi 0.576 / LibreOffice 0.830 forms: Oxi 0.786 / LibreOffice 0.811 reports: Oxi 0.916 / LibreOffice 0.967 reports: Oxi 0.942 / LibreOffice 0.986 reports: Oxi 0.984 / LibreOffice 0.979 reports: Oxi 0.719 / LibreOffice 0.728 policies: Oxi 0.763 / LibreOffice 0.906 policies: Oxi 0.727 / LibreOffice 0.962 reports: Oxi 0.693 / LibreOffice 0.653 policies: Oxi 0.910 / LibreOffice 0.944 legal: Oxi 0.902 / LibreOffice 0.820 educational: Oxi 0.803 / LibreOffice 0.880 policies: Oxi 0.878 / LibreOffice 0.936 policies: Oxi 0.834 / LibreOffice 0.907 educational: Oxi 0.819 / LibreOffice 0.964 educational: Oxi 0.698 / LibreOffice 0.849 correspondence: Oxi 0.733 / LibreOffice 0.706 correspondence: Oxi 0.934 / LibreOffice 0.985 correspondence: Oxi 0.974 / LibreOffice 0.839 educational: Oxi 0.966 / LibreOffice 0.983 educational: Oxi 0.763 / LibreOffice 0.762 correspondence: Oxi 0.743 / LibreOffice 0.761 technical: Oxi 0.793 / LibreOffice 0.979 correspondence: Oxi 0.854 / LibreOffice 0.770 technical: Oxi 0.689 / LibreOffice 0.849 technical: Oxi 0.870 / LibreOffice 0.958 administrative: Oxi 0.888 / LibreOffice 0.924 administrative: Oxi 0.678 / LibreOffice 0.876 administrative: Oxi 0.859 / LibreOffice 0.906 technical: Oxi 0.765 / LibreOffice 0.812 administrative: Oxi 0.952 / LibreOffice 0.993 administrative: Oxi 0.835 / LibreOffice 0.922 creative: Oxi 0.849 / LibreOffice 0.973 creative: Oxi 0.916 / LibreOffice 0.976 technical: Oxi 0.742 / LibreOffice 0.720 creative: Oxi 0.994 / LibreOffice 0.984 reference: Oxi 0.815 / LibreOffice 0.913 legal: Oxi 0.896 / LibreOffice 0.813 creative: Oxi 0.929 / LibreOffice 0.992 reference: Oxi 0.520 / LibreOffice 0.507 reference: Oxi 0.900 / LibreOffice 0.889 reference: Oxi 0.820 / LibreOffice 0.863 reference: Oxi 0.769 / LibreOffice 0.736 creative: Oxi 0.747 / LibreOffice 0.799 vs LibreOffice — Oxi ahead on 13/50 LibreOffice SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ ONLYOFFICE better ↓ legal: Oxi 0.863 / ONLYOFFICE 0.994 legal: Oxi 0.872 / ONLYOFFICE 0.985 forms: Oxi 0.787 / ONLYOFFICE 0.901 forms: Oxi 0.786 / ONLYOFFICE 0.887 legal: Oxi 0.951 / ONLYOFFICE 0.859 forms: Oxi 0.847 / ONLYOFFICE 0.979 forms: Oxi 0.576 / ONLYOFFICE 0.950 forms: Oxi 0.786 / ONLYOFFICE 0.783 reports: Oxi 0.916 / ONLYOFFICE 0.964 reports: Oxi 0.942 / ONLYOFFICE 0.990 reports: Oxi 0.984 / ONLYOFFICE 0.984 reports: Oxi 0.719 / ONLYOFFICE 0.712 policies: Oxi 0.763 / ONLYOFFICE 0.950 policies: Oxi 0.727 / ONLYOFFICE 0.695 reports: Oxi 0.693 / ONLYOFFICE 0.970 policies: Oxi 0.910 / ONLYOFFICE 0.984 legal: Oxi 0.902 / ONLYOFFICE 0.822 educational: Oxi 0.803 / ONLYOFFICE 0.983 policies: Oxi 0.878 / ONLYOFFICE 0.969 policies: Oxi 0.834 / ONLYOFFICE 0.928 educational: Oxi 0.819 / ONLYOFFICE 0.788 educational: Oxi 0.698 / ONLYOFFICE 0.822 correspondence: Oxi 0.733 / ONLYOFFICE 0.707 correspondence: Oxi 0.934 / ONLYOFFICE 0.980 correspondence: Oxi 0.974 / ONLYOFFICE 0.969 educational: Oxi 0.966 / ONLYOFFICE 0.988 educational: Oxi 0.763 / ONLYOFFICE 0.765 correspondence: Oxi 0.743 / ONLYOFFICE 0.756 technical: Oxi 0.793 / ONLYOFFICE 0.948 correspondence: Oxi 0.854 / ONLYOFFICE 0.891 technical: Oxi 0.689 / ONLYOFFICE 0.959 technical: Oxi 0.870 / ONLYOFFICE 0.968 administrative: Oxi 0.888 / ONLYOFFICE 0.948 administrative: Oxi 0.678 / ONLYOFFICE 0.968 administrative: Oxi 0.859 / ONLYOFFICE 0.942 technical: Oxi 0.765 / ONLYOFFICE 0.887 administrative: Oxi 0.952 / ONLYOFFICE 0.984 administrative: Oxi 0.835 / ONLYOFFICE 0.970 creative: Oxi 0.849 / ONLYOFFICE 0.974 creative: Oxi 0.916 / ONLYOFFICE 0.965 technical: Oxi 0.742 / ONLYOFFICE 0.737 creative: Oxi 0.994 / ONLYOFFICE 0.992 reference: Oxi 0.815 / ONLYOFFICE 0.815 legal: Oxi 0.896 / ONLYOFFICE 0.815 creative: Oxi 0.929 / ONLYOFFICE 0.994 reference: Oxi 0.520 / ONLYOFFICE 0.606 reference: Oxi 0.900 / ONLYOFFICE 0.892 reference: Oxi 0.820 / ONLYOFFICE 0.936 reference: Oxi 0.769 / ONLYOFFICE 0.915 creative: Oxi 0.747 / ONLYOFFICE 0.950 vs ONLYOFFICE — Oxi ahead on 12/50 ONLYOFFICE SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ SILURUS better ↓ legal: Oxi 0.863 / SILURUS 0.902 legal: Oxi 0.872 / SILURUS 0.796 forms: Oxi 0.787 / SILURUS 0.775 forms: Oxi 0.786 / SILURUS 0.821 legal: Oxi 0.951 / SILURUS 0.916 forms: Oxi 0.847 / SILURUS 0.861 forms: Oxi 0.576 / SILURUS 0.652 forms: Oxi 0.786 / SILURUS 0.780 reports: Oxi 0.916 / SILURUS 0.900 reports: Oxi 0.942 / SILURUS 0.813 reports: Oxi 0.984 / SILURUS 0.917 reports: Oxi 0.719 / SILURUS 0.733 policies: Oxi 0.763 / SILURUS 0.703 policies: Oxi 0.727 / SILURUS 0.731 reports: Oxi 0.693 / SILURUS 0.645 policies: Oxi 0.910 / SILURUS 0.852 legal: Oxi 0.902 / SILURUS 0.853 educational: Oxi 0.803 / SILURUS 0.813 policies: Oxi 0.878 / SILURUS 0.797 policies: Oxi 0.834 / SILURUS 0.742 educational: Oxi 0.819 / SILURUS 0.829 educational: Oxi 0.698 / SILURUS 0.718 correspondence: Oxi 0.733 / SILURUS 0.674 correspondence: Oxi 0.934 / SILURUS 0.861 correspondence: Oxi 0.974 / SILURUS 0.692 educational: Oxi 0.966 / SILURUS 0.886 educational: Oxi 0.763 / SILURUS 0.757 correspondence: Oxi 0.743 / SILURUS 0.727 technical: Oxi 0.793 / SILURUS 0.843 correspondence: Oxi 0.854 / SILURUS 0.701 technical: Oxi 0.689 / SILURUS 0.718 technical: Oxi 0.870 / SILURUS 0.742 administrative: Oxi 0.888 / SILURUS 0.690 administrative: Oxi 0.678 / SILURUS 0.694 administrative: Oxi 0.859 / SILURUS 0.730 technical: Oxi 0.765 / SILURUS 0.770 administrative: Oxi 0.952 / SILURUS 0.896 administrative: Oxi 0.835 / SILURUS 0.839 creative: Oxi 0.849 / SILURUS 0.846 creative: Oxi 0.916 / SILURUS 0.832 technical: Oxi 0.742 / SILURUS 0.703 creative: Oxi 0.994 / SILURUS 0.939 reference: Oxi 0.815 / SILURUS 0.727 legal: Oxi 0.896 / SILURUS 0.809 creative: Oxi 0.929 / SILURUS 0.809 reference: Oxi 0.520 / SILURUS 0.454 reference: Oxi 0.900 / SILURUS 0.879 reference: Oxi 0.820 / SILURUS 0.761 reference: Oxi 0.769 / SILURUS 0.596 creative: Oxi 0.747 / SILURUS 0.682 vs SILURUS — Oxi ahead on 36/50 SILURUS SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ BetterOffice better ↓ legal: Oxi 0.863 / BetterOffice 0.778 legal: Oxi 0.872 / BetterOffice 0.779 forms: Oxi 0.787 / BetterOffice 0.653 forms: Oxi 0.786 / BetterOffice 0.749 legal: Oxi 0.951 / BetterOffice 0.866 forms: Oxi 0.847 / BetterOffice 0.889 forms: Oxi 0.576 / BetterOffice 0.622 forms: Oxi 0.786 / BetterOffice 0.780 reports: Oxi 0.916 / BetterOffice 0.847 reports: Oxi 0.942 / BetterOffice 0.789 reports: Oxi 0.984 / BetterOffice 0.908 reports: Oxi 0.719 / BetterOffice 0.694 policies: Oxi 0.763 / BetterOffice 0.661 policies: Oxi 0.727 / BetterOffice 0.681 reports: Oxi 0.693 / BetterOffice 0.673 policies: Oxi 0.910 / BetterOffice 0.785 legal: Oxi 0.902 / BetterOffice 0.810 educational: Oxi 0.803 / BetterOffice 0.853 policies: Oxi 0.878 / BetterOffice 0.770 policies: Oxi 0.834 / BetterOffice 0.759 educational: Oxi 0.819 / BetterOffice 0.669 educational: Oxi 0.698 / BetterOffice 0.612 correspondence: Oxi 0.733 / BetterOffice 0.730 correspondence: Oxi 0.934 / BetterOffice 0.647 correspondence: Oxi 0.974 / BetterOffice 0.733 educational: Oxi 0.966 / BetterOffice 0.781 educational: Oxi 0.763 / BetterOffice 0.759 correspondence: Oxi 0.743 / BetterOffice 0.627 technical: Oxi 0.793 / BetterOffice 0.784 correspondence: Oxi 0.854 / BetterOffice 0.525 technical: Oxi 0.689 / BetterOffice 0.712 technical: Oxi 0.870 / BetterOffice 0.630 administrative: Oxi 0.888 / BetterOffice 0.597 administrative: Oxi 0.678 / BetterOffice 0.652 administrative: Oxi 0.859 / BetterOffice 0.713 technical: Oxi 0.765 / BetterOffice 0.723 administrative: Oxi 0.952 / BetterOffice 0.883 administrative: Oxi 0.835 / BetterOffice 0.735 creative: Oxi 0.849 / BetterOffice 0.812 creative: Oxi 0.916 / BetterOffice 0.714 technical: Oxi 0.742 / BetterOffice 0.769 creative: Oxi 0.994 / BetterOffice 0.932 reference: Oxi 0.815 / BetterOffice 0.783 legal: Oxi 0.896 / BetterOffice 0.781 creative: Oxi 0.929 / BetterOffice 0.646 reference: Oxi 0.520 / BetterOffice 0.477 reference: Oxi 0.900 / BetterOffice 0.866 reference: Oxi 0.820 / BetterOffice 0.810 reference: Oxi 0.769 / BetterOffice 0.576 creative: Oxi 0.747 / BetterOffice 0.662 vs BetterOffice — Oxi ahead on 45/50 BetterOffice SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ eigenpal better ↓ legal: Oxi 0.863 / eigenpal 0.863 legal: Oxi 0.872 / eigenpal 0.745 forms: Oxi 0.787 / eigenpal 0.598 forms: Oxi 0.786 / eigenpal 0.729 legal: Oxi 0.951 / eigenpal 0.857 forms: Oxi 0.847 / eigenpal 0.885 forms: Oxi 0.576 / eigenpal 0.707 forms: Oxi 0.786 / eigenpal 0.766 reports: Oxi 0.916 / eigenpal 0.838 reports: Oxi 0.942 / eigenpal 0.710 reports: Oxi 0.984 / eigenpal 0.909 reports: Oxi 0.719 / eigenpal 0.725 policies: Oxi 0.763 / eigenpal 0.617 policies: Oxi 0.727 / eigenpal 0.622 reports: Oxi 0.693 / eigenpal 0.619 policies: Oxi 0.910 / eigenpal 0.839 legal: Oxi 0.902 / eigenpal 0.807 educational: Oxi 0.803 / eigenpal 0.844 policies: Oxi 0.878 / eigenpal 0.705 policies: Oxi 0.834 / eigenpal 0.731 educational: Oxi 0.819 / eigenpal 0.717 educational: Oxi 0.698 / eigenpal 0.591 correspondence: Oxi 0.733 / eigenpal 0.700 correspondence: Oxi 0.934 / eigenpal 0.785 correspondence: Oxi 0.974 / eigenpal 0.786 educational: Oxi 0.966 / eigenpal 0.797 educational: Oxi 0.763 / eigenpal 0.753 correspondence: Oxi 0.743 / eigenpal 0.702 technical: Oxi 0.793 / eigenpal 0.784 correspondence: Oxi 0.854 / eigenpal 0.727 technical: Oxi 0.689 / eigenpal 0.709 technical: Oxi 0.870 / eigenpal 0.700 administrative: Oxi 0.888 / eigenpal 0.679 administrative: Oxi 0.678 / eigenpal 0.619 administrative: Oxi 0.859 / eigenpal 0.675 technical: Oxi 0.765 / eigenpal 0.710 administrative: Oxi 0.952 / eigenpal 0.885 administrative: Oxi 0.835 / eigenpal 0.759 creative: Oxi 0.849 / eigenpal 0.804 creative: Oxi 0.916 / eigenpal 0.680 technical: Oxi 0.742 / eigenpal 0.700 creative: Oxi 0.994 / eigenpal 0.971 reference: Oxi 0.815 / eigenpal 0.798 legal: Oxi 0.896 / eigenpal 0.794 creative: Oxi 0.929 / eigenpal 0.755 reference: Oxi 0.520 / eigenpal 0.422 reference: Oxi 0.900 / eigenpal 0.862 reference: Oxi 0.820 / eigenpal 0.735 reference: Oxi 0.769 / eigenpal 0.605 creative: Oxi 0.747 / eigenpal 0.648 vs eigenpal — Oxi ahead on 44/50 eigenpal SSIM (per document) Oxi SSIM
Top: per-engine mean — the dashed edge marks Microsoft Word itself (1.00). SILURUS is the closest architectural peer (Rust + WebAssembly rendering to a canvas, like Oxi); ONLYOFFICE and LibreOffice are mature native suites; BetterOffice (a Rust + WebAssembly editor suite, v0.0.4) and eigenpal (an Apache-2.0 ProseMirror-based DOM renderer, v1.9.0) are the newest entrants, both measured 2026-07-27 against the same frozen ground truth. Bottom: every dot is one document, with Oxi on the vertical axis; dots above the dashed diagonal are documents where Oxi is closer to Word. The blind set is measured but never fixed against, so this is first-sight generalization, published as-is.

Japanese blind set — 50 never-seen documents

Japanese is held to the same standard as English: a frozen blind benchmark of 50 documents from the public docx-corpus that are never used as fix targets — every score is first-sight generalization, with nothing tuned to the test. At its first measurement (2026-07-21) Oxi scores 0.828 per document and matches Word's page count on 44 of the 50 documents — ahead of LibreOffice (0.816), SILURUS (0.804) and ONLYOFFICE (0.772) on the same documents. Engines: Microsoft Word (Microsoft 365 16.0.20131.20154) as ground truth, LibreOffice 26.2.1.2, ONLYOFFICE 9.3.1.8, SILURUS @silurus/ooxml 0.72.2 — all rendered at 150 DPI. On 2026-07-27 a fifth engine was added against the same frozen ground truth: BetterOffice (@betteroffice/docx 0.0.4), which scores 0.766 and fails to open one of the 50 documents (its parser rejects nextColumn, a standard OOXML section-start type); Oxi is ahead on 38 of the 49 documents both engines open. The same day added a sixth: eigenpal (@eigenpal/docx-editor-react 1.9.0), which opens all 50 — including the nextColumn document BetterOffice rejects — and scores 0.744, with Oxi ahead on 43 of the 50 documents.

Japanese blind set — 50 never-touched documents, per-document mean SSIM vs Word (2026-07-21)

Oxipage count matches Word on 44/50
0.828
LibreOfficepage count matches Word on 41/50 · v26.2.1.2
0.816
SILURUSpage count matches Word on 32/50 · v0.72.2
0.804
ONLYOFFICEpage count matches Word on 38/50 · v9.3.1.8
0.772
BetterOfficepage count matches Word on 29/50 · v0.0.4 · measured 2026-07-27
0.766
eigenpalpage count matches Word on 36/50 · v1.9.0 · measured 2026-07-27
0.744
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ LibreOffice better ↓ legal: Oxi 0.978 / LibreOffice 0.960 legal: Oxi 0.993 / LibreOffice 0.931 legal: Oxi 0.994 / LibreOffice 0.970 legal: Oxi 0.893 / LibreOffice 0.849 forms: Oxi 0.945 / LibreOffice 0.911 forms: Oxi 0.840 / LibreOffice 0.855 forms: Oxi 0.931 / LibreOffice 0.892 forms: Oxi 0.892 / LibreOffice 0.800 forms: Oxi 0.778 / LibreOffice 0.821 reports: Oxi 0.894 / LibreOffice 0.932 reports: Oxi 0.772 / LibreOffice 0.763 legal: Oxi 0.831 / LibreOffice 0.830 reports: Oxi 0.843 / LibreOffice 0.750 reports: Oxi 0.859 / LibreOffice 0.803 policies: Oxi 0.923 / LibreOffice 0.893 policies: Oxi 0.880 / LibreOffice 0.950 policies: Oxi 0.754 / LibreOffice 0.761 policies: Oxi 0.969 / LibreOffice 0.818 reports: Oxi 0.689 / LibreOffice 0.810 policies: Oxi 0.880 / LibreOffice 0.868 educational: Oxi 0.895 / LibreOffice 0.880 educational: Oxi 0.770 / LibreOffice 0.866 educational: Oxi 0.686 / LibreOffice 0.721 correspondence: Oxi 0.860 / LibreOffice 0.816 correspondence: Oxi 0.716 / LibreOffice 0.777 correspondence: Oxi 0.848 / LibreOffice 0.807 correspondence: Oxi 0.925 / LibreOffice 0.840 educational: Oxi 0.802 / LibreOffice 0.849 correspondence: Oxi 0.858 / LibreOffice 0.767 technical: Oxi 0.749 / LibreOffice 0.672 technical: Oxi 0.886 / LibreOffice 0.810 technical: Oxi 0.850 / LibreOffice 0.765 administrative: Oxi 0.937 / LibreOffice 0.934 technical: Oxi 0.754 / LibreOffice 0.578 administrative: Oxi 0.919 / LibreOffice 0.782 educational: Oxi 0.776 / LibreOffice 0.842 administrative: Oxi 0.773 / LibreOffice 0.769 administrative: Oxi 0.897 / LibreOffice 0.983 administrative: Oxi 0.701 / LibreOffice 0.684 creative: Oxi 0.673 / LibreOffice 0.906 creative: Oxi 0.472 / LibreOffice 0.549 creative: Oxi 0.729 / LibreOffice 0.759 creative: Oxi 0.865 / LibreOffice 0.783 reference: Oxi 0.790 / LibreOffice 0.831 creative: Oxi 0.860 / LibreOffice 0.819 reference: Oxi 0.884 / LibreOffice 0.818 reference: Oxi 0.882 / LibreOffice 0.839 technical: Oxi 0.815 / LibreOffice 0.763 reference: Oxi 0.649 / LibreOffice 0.772 reference: Oxi 0.631 / LibreOffice 0.629 vs LibreOffice — Oxi ahead on 33/50 LibreOffice SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ ONLYOFFICE better ↓ legal: Oxi 0.978 / ONLYOFFICE 0.927 legal: Oxi 0.993 / ONLYOFFICE 0.886 legal: Oxi 0.994 / ONLYOFFICE 0.947 legal: Oxi 0.893 / ONLYOFFICE 0.828 forms: Oxi 0.945 / ONLYOFFICE 0.830 forms: Oxi 0.840 / ONLYOFFICE 0.950 forms: Oxi 0.931 / ONLYOFFICE 0.748 forms: Oxi 0.892 / ONLYOFFICE 0.765 forms: Oxi 0.778 / ONLYOFFICE 0.834 reports: Oxi 0.894 / ONLYOFFICE 0.883 reports: Oxi 0.772 / ONLYOFFICE 0.722 legal: Oxi 0.831 / ONLYOFFICE 0.821 reports: Oxi 0.843 / ONLYOFFICE 0.721 reports: Oxi 0.859 / ONLYOFFICE 0.772 policies: Oxi 0.923 / ONLYOFFICE 0.803 policies: Oxi 0.880 / ONLYOFFICE 0.866 policies: Oxi 0.754 / ONLYOFFICE 0.688 policies: Oxi 0.969 / ONLYOFFICE 0.747 reports: Oxi 0.689 / ONLYOFFICE 0.599 policies: Oxi 0.880 / ONLYOFFICE 0.861 educational: Oxi 0.895 / ONLYOFFICE 0.876 educational: Oxi 0.770 / ONLYOFFICE 0.748 educational: Oxi 0.686 / ONLYOFFICE 0.702 correspondence: Oxi 0.860 / ONLYOFFICE 0.736 correspondence: Oxi 0.716 / ONLYOFFICE 0.676 correspondence: Oxi 0.848 / ONLYOFFICE 0.856 correspondence: Oxi 0.925 / ONLYOFFICE 0.789 educational: Oxi 0.802 / ONLYOFFICE 0.812 correspondence: Oxi 0.858 / ONLYOFFICE 0.735 technical: Oxi 0.749 / ONLYOFFICE 0.685 technical: Oxi 0.886 / ONLYOFFICE 0.711 technical: Oxi 0.850 / ONLYOFFICE 0.728 administrative: Oxi 0.937 / ONLYOFFICE 0.927 technical: Oxi 0.754 / ONLYOFFICE 0.649 administrative: Oxi 0.919 / ONLYOFFICE 0.759 educational: Oxi 0.776 / ONLYOFFICE 0.805 administrative: Oxi 0.773 / ONLYOFFICE 0.732 administrative: Oxi 0.897 / ONLYOFFICE 0.998 administrative: Oxi 0.701 / ONLYOFFICE 0.651 creative: Oxi 0.673 / ONLYOFFICE 0.847 creative: Oxi 0.472 / ONLYOFFICE 0.600 creative: Oxi 0.729 / ONLYOFFICE 0.735 creative: Oxi 0.865 / ONLYOFFICE 0.818 reference: Oxi 0.790 / ONLYOFFICE 0.770 creative: Oxi 0.860 / ONLYOFFICE 0.659 reference: Oxi 0.884 / ONLYOFFICE 0.790 reference: Oxi 0.882 / ONLYOFFICE 0.646 technical: Oxi 0.815 / ONLYOFFICE 0.793 reference: Oxi 0.649 / ONLYOFFICE 0.537 reference: Oxi 0.631 / ONLYOFFICE 0.617 vs ONLYOFFICE — Oxi ahead on 40/50 ONLYOFFICE SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ SILURUS better ↓ legal: Oxi 0.978 / SILURUS 0.957 legal: Oxi 0.993 / SILURUS 0.919 legal: Oxi 0.994 / SILURUS 0.971 legal: Oxi 0.893 / SILURUS 0.864 forms: Oxi 0.945 / SILURUS 0.906 forms: Oxi 0.840 / SILURUS 0.812 forms: Oxi 0.931 / SILURUS 0.845 forms: Oxi 0.892 / SILURUS 0.758 forms: Oxi 0.778 / SILURUS 0.736 reports: Oxi 0.894 / SILURUS 0.882 reports: Oxi 0.772 / SILURUS 0.794 legal: Oxi 0.831 / SILURUS 0.810 reports: Oxi 0.843 / SILURUS 0.758 reports: Oxi 0.859 / SILURUS 0.894 policies: Oxi 0.923 / SILURUS 0.884 policies: Oxi 0.880 / SILURUS 0.855 policies: Oxi 0.754 / SILURUS 0.764 policies: Oxi 0.969 / SILURUS 0.805 reports: Oxi 0.689 / SILURUS 0.683 policies: Oxi 0.880 / SILURUS 0.869 educational: Oxi 0.895 / SILURUS 0.874 educational: Oxi 0.770 / SILURUS 0.809 educational: Oxi 0.686 / SILURUS 0.686 correspondence: Oxi 0.860 / SILURUS 0.890 correspondence: Oxi 0.716 / SILURUS 0.768 correspondence: Oxi 0.848 / SILURUS 0.749 correspondence: Oxi 0.925 / SILURUS 0.838 educational: Oxi 0.802 / SILURUS 0.856 correspondence: Oxi 0.858 / SILURUS 0.828 technical: Oxi 0.749 / SILURUS 0.816 technical: Oxi 0.886 / SILURUS 0.841 technical: Oxi 0.850 / SILURUS 0.745 administrative: Oxi 0.937 / SILURUS 0.936 technical: Oxi 0.754 / SILURUS 0.608 administrative: Oxi 0.919 / SILURUS 0.861 educational: Oxi 0.776 / SILURUS 0.839 administrative: Oxi 0.773 / SILURUS 0.799 administrative: Oxi 0.897 / SILURUS 0.912 administrative: Oxi 0.701 / SILURUS 0.669 creative: Oxi 0.673 / SILURUS 0.823 creative: Oxi 0.472 / SILURUS 0.547 creative: Oxi 0.729 / SILURUS 0.743 creative: Oxi 0.865 / SILURUS 0.859 reference: Oxi 0.790 / SILURUS 0.777 creative: Oxi 0.860 / SILURUS 0.799 reference: Oxi 0.884 / SILURUS 0.825 reference: Oxi 0.882 / SILURUS 0.720 technical: Oxi 0.815 / SILURUS 0.715 reference: Oxi 0.649 / SILURUS 0.677 reference: Oxi 0.631 / SILURUS 0.644 vs SILURUS — Oxi ahead on 33/50 SILURUS SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ BetterOffice better ↓ legal: Oxi 0.978 / BetterOffice 0.929 legal: Oxi 0.993 / BetterOffice 0.895 legal: Oxi 0.994 / BetterOffice 0.947 legal: Oxi 0.893 / BetterOffice 0.795 forms: Oxi 0.945 / BetterOffice 0.813 forms: Oxi 0.840 / BetterOffice 0.811 forms: Oxi 0.931 / BetterOffice 0.730 forms: Oxi 0.892 / BetterOffice 0.770 forms: Oxi 0.778 / BetterOffice 0.722 reports: Oxi 0.894 / BetterOffice 0.883 reports: Oxi 0.772 / BetterOffice 0.702 legal: Oxi 0.831 / BetterOffice 0.806 reports: Oxi 0.843 / BetterOffice 0.699 reports: Oxi 0.859 / BetterOffice 0.794 policies: Oxi 0.923 / BetterOffice 0.799 policies: Oxi 0.880 / BetterOffice 0.807 policies: Oxi 0.754 / BetterOffice 0.663 policies: Oxi 0.969 / BetterOffice 0.735 reports: Oxi 0.689 / BetterOffice 0.638 policies: Oxi 0.880 / BetterOffice 0.847 educational: Oxi 0.895 / BetterOffice 0.892 educational: Oxi 0.770 / BetterOffice 0.807 educational: Oxi 0.686 / BetterOffice 0.702 correspondence: Oxi 0.860 / BetterOffice 0.761 correspondence: Oxi 0.716 / BetterOffice 0.708 correspondence: Oxi 0.925 / BetterOffice 0.806 educational: Oxi 0.802 / BetterOffice 0.855 correspondence: Oxi 0.858 / BetterOffice 0.752 technical: Oxi 0.749 / BetterOffice 0.699 technical: Oxi 0.886 / BetterOffice 0.687 technical: Oxi 0.850 / BetterOffice 0.736 administrative: Oxi 0.937 / BetterOffice 0.913 technical: Oxi 0.754 / BetterOffice 0.608 administrative: Oxi 0.919 / BetterOffice 0.759 educational: Oxi 0.776 / BetterOffice 0.838 administrative: Oxi 0.773 / BetterOffice 0.755 administrative: Oxi 0.897 / BetterOffice 0.967 administrative: Oxi 0.701 / BetterOffice 0.631 creative: Oxi 0.673 / BetterOffice 0.829 creative: Oxi 0.472 / BetterOffice 0.575 creative: Oxi 0.729 / BetterOffice 0.758 creative: Oxi 0.865 / BetterOffice 0.877 reference: Oxi 0.790 / BetterOffice 0.791 creative: Oxi 0.860 / BetterOffice 0.662 reference: Oxi 0.884 / BetterOffice 0.743 reference: Oxi 0.882 / BetterOffice 0.670 technical: Oxi 0.815 / BetterOffice 0.719 reference: Oxi 0.649 / BetterOffice 0.542 reference: Oxi 0.631 / BetterOffice 0.721 vs BetterOffice — Oxi ahead on 38/49 BetterOffice SSIM (per document) Oxi SSIM
0.4 0.4 0.6 0.6 0.8 0.8 1.0 1.0 Oxi better ↑ eigenpal better ↓ legal: Oxi 0.978 / eigenpal 0.921 legal: Oxi 0.993 / eigenpal 0.878 legal: Oxi 0.994 / eigenpal 0.945 legal: Oxi 0.893 / eigenpal 0.779 forms: Oxi 0.945 / eigenpal 0.812 forms: Oxi 0.840 / eigenpal 0.810 forms: Oxi 0.931 / eigenpal 0.731 forms: Oxi 0.892 / eigenpal 0.750 forms: Oxi 0.778 / eigenpal 0.721 reports: Oxi 0.894 / eigenpal 0.880 reports: Oxi 0.772 / eigenpal 0.716 legal: Oxi 0.831 / eigenpal 0.814 reports: Oxi 0.843 / eigenpal 0.669 reports: Oxi 0.859 / eigenpal 0.767 policies: Oxi 0.923 / eigenpal 0.791 policies: Oxi 0.880 / eigenpal 0.731 policies: Oxi 0.754 / eigenpal 0.656 policies: Oxi 0.969 / eigenpal 0.752 reports: Oxi 0.689 / eigenpal 0.566 policies: Oxi 0.880 / eigenpal 0.828 educational: Oxi 0.895 / eigenpal 0.898 educational: Oxi 0.770 / eigenpal 0.798 educational: Oxi 0.686 / eigenpal 0.688 correspondence: Oxi 0.860 / eigenpal 0.723 correspondence: Oxi 0.716 / eigenpal 0.659 correspondence: Oxi 0.848 / eigenpal 0.742 correspondence: Oxi 0.925 / eigenpal 0.789 educational: Oxi 0.802 / eigenpal 0.806 correspondence: Oxi 0.858 / eigenpal 0.727 technical: Oxi 0.749 / eigenpal 0.677 technical: Oxi 0.886 / eigenpal 0.713 technical: Oxi 0.850 / eigenpal 0.726 administrative: Oxi 0.937 / eigenpal 0.918 technical: Oxi 0.754 / eigenpal 0.579 administrative: Oxi 0.919 / eigenpal 0.756 educational: Oxi 0.776 / eigenpal 0.785 administrative: Oxi 0.773 / eigenpal 0.730 administrative: Oxi 0.897 / eigenpal 0.911 administrative: Oxi 0.701 / eigenpal 0.635 creative: Oxi 0.673 / eigenpal 0.834 creative: Oxi 0.472 / eigenpal 0.470 creative: Oxi 0.729 / eigenpal 0.711 creative: Oxi 0.865 / eigenpal 0.807 reference: Oxi 0.790 / eigenpal 0.753 creative: Oxi 0.860 / eigenpal 0.630 reference: Oxi 0.884 / eigenpal 0.727 reference: Oxi 0.882 / eigenpal 0.632 technical: Oxi 0.815 / eigenpal 0.704 reference: Oxi 0.649 / eigenpal 0.528 reference: Oxi 0.631 / eigenpal 0.614 vs eigenpal — Oxi ahead on 43/50 eigenpal SSIM (per document) Oxi SSIM
Top: per-engine mean — the dashed edge marks Microsoft Word itself (1.00). Bottom: every dot is one document, with Oxi on the vertical axis; dots above the dashed diagonal are documents where Oxi is closer to Word. The blind set is measured but never fixed against, so this is first-sight generalization, published as-is.

How the fidelity is earned

  • 100% clean-room: no disassembly or binary analysis. Specifications come only from published standards (OOXML — ISO/IEC 29500 / ECMA-376) and black-box observation of Word's output via the COM API.
  • Dual font engine: Word's layout inherits GDI's integer-pixel metrics, so Oxi reproduces GDI exactly for .docx — and uses DirectWrite's floating-point metrics for formats without that legacy.
  • Continuous regression gates: every change is checked against the full corpus — pagination match, element positions, and pixel SSIM.

Details and reproduction scripts: README — Layout Accuracy · docs/layout_accuracy.md

First-class Japanese typography

Most Word-compatible renderers treat Japanese layout as an afterthought. For Oxi it is a measured target.

  • Kinsoku shori (禁則処理) — JIS X 4051 line-breaking: prohibited line-start/line-end characters, punctuation compression, hanging punctuation (ぶら下げ).
  • Vertical writing (縦書き) — vertical text sections with right-to-left column flow, plus tate-chu-yoko (縦中横) for horizontal-in-vertical runs.
  • Ruby (ルビ / furigana), warichu (割注) two-line inline notes, and emphasis marks (圏点).
  • Character grid (docGrid) — Word's Japanese line-grid and character-pitch model, reproduced to the point.
  • Hanko (判子) — Japanese digital stamp generation (round, square, oval) with PAdES PDF signatures.

The measurement corpus itself is Japanese-first: ministry regulations, government application forms, and employment contracts — the documents where Japanese layout is hardest.

Technology

Rust + WebAssembly, a format-agnostic intermediate representation, and zero server dependency.

Why it matters now

Public-sector organizations across Europe — France's DINUM directive, Switzerland's Federal Chancellery, Germany's OpenDesk deployments — are actively reducing Microsoft Office dependency in 2026. Every one of those migrations hits the same wall: existing .docx files must keep looking exactly as they do in Word. Oxi's goal is to dissolve that problem with a rendering engine whose Word fidelity is continuously measured, not promised.

Architecture

  • Client-side only: parsing, layout, rendering and editing run in WebAssembly in your browser. No server infrastructure, no upload, zero hosting cost per document.
  • Format-agnostic IR: Document → Page → Block (Paragraph | Table | Image) → Run. Neither OOXML nor ODF "owns" the model, so round-trips don't degrade.
  • Round-trip editing: the original ZIP is preserved and only changed XML text nodes are patched — never rebuilt from scratch.
  • Open fonts only: no proprietary fonts are bundled; open-licensed fonts are metric-matched to their Microsoft counterparts.
  • Embeddable: a wasm-bindgen JavaScript API (parse_document, layout_document, edit_docx, …) callable from any web app.

License

Core engine crates are MPL-2.0 (file-level copyleft — embeddable in proprietary products, unlike AGPL). WebAssembly and Python bindings are MIT OR Apache-2.0. Contributions are DCO-only, no CLA.

Frequently asked questions

Is Oxi free to use?

Yes. Oxi is open source — MPL-2.0 core, MIT OR Apache-2.0 bindings — and the web demo is free with no account.

Are my documents uploaded to a server?

No. Everything runs inside your browser via WebAssembly. Files are never transmitted anywhere, which makes Oxi suitable for confidential and personal documents.

How accurate is Oxi compared with Microsoft Word?

Measured with pixel-level SSIM against Word on frozen blind benchmarks — 50 never-seen documents per language that are never used as fix targets. Japanese: 0.828 per document with Word's page count matched on 44/50. English: 0.825 with Word's page count matched on 48/50 — the highest page-count result among the engines measured, while pixel similarity remains behind LibreOffice and ONLYOFFICE there (2026-07-29). See the accuracy section for the comparison charts and methodology.

Which file formats does Oxi support?

Oxi focuses on Word .docx: full page layout and round-trip editing. Reproducing Word's .docx rendering faithfully is the mission — everything else comes after.

Can I embed Oxi in my own product?

Yes. MPL-2.0's file-level copyleft plus permissive bindings mean Oxi can be embedded in commercial and proprietary products.

Does Oxi work offline?

Once the page and the WebAssembly module are loaded, all document processing is local — no network connection is needed to open, render or edit files.