
Security News
PolinRider: North Korea-Linked Supply Chain Campaign Expands Across Open Source Ecosystems
PolinRider expands across npm, Packagist, Go modules, and Chrome extensions, using hidden loaders to target developer environments.
@office-open/docx
Advanced tools
Generate, parse, and patch .docx documents with a declarative TypeScript API
Generate, parse, and patch .docx documents with a declarative TypeScript API. Works in Node.js and browsers.
# pnpm
pnpm add @office-open/docx
# npm
npm install @office-open/docx
# yarn
yarn add @office-open/docx
# bun
bun add @office-open/docx
import { generateDocument } from "@office-open/docx";
import { writeFileSync } from "node:fs";
const buffer = await generateDocument({
sections: [
{
children: [
{
paragraph: {
children: ["Hello World", { text: " - Bold text", bold: true }],
},
},
],
},
],
});
writeFileSync("My Document.docx", buffer);
Check the demo folder for 100+ working examples covering every feature.
Performance vs original docx (9.6.1) package (higher ops/s is better, Windows 11 / Node 24).
Default = XML DEFLATE level 1 (SuperFast); media is split by type, matching MS Office Word — already-compressed formats (PNG/JPEG/GIF) are STOREd, the rest (EMF/WMF/BMP/TIFF/…) use DEFLATE level 1 (verified on a real MS Office file). All STORE = no compression ({ compression: { xml: 0, media: 0 } }). docx (async only) always uses DEFLATE for ALL entries including images (via JSZip, hardcoded, no STORE option).
// Default (matches MS Office)
await generateDocument(options);
// All STORE (no compression)
await generateDocument(options, { compression: { xml: 0, media: 0 } });
Create + toBuffer (end-to-end)
| Scenario | Default sync | Default async | All STORE sync | All STORE async | docx |
|---|---|---|---|---|---|
| Simple (2p + 1 img) | 1,026 ops/s | 636 ops/s | 2,509 ops/s | 2,500 ops/s | 92.0 ops/s |
| Styled paragraphs (20) + 1 img | 1,132 ops/s | 663 ops/s | 2,849 ops/s | 2,791 ops/s | 99.1 ops/s |
| Table (10x5) | 1,226 ops/s | 681 ops/s | 2,774 ops/s | 2,616 ops/s | 221 ops/s |
| Full featured + 2 imgs | 753 ops/s | 496 ops/s | 1,642 ops/s | 1,634 ops/s | 55.3 ops/s |
Large Files — Create + toBuffer
| Scenario | Default sync | Default async | All STORE sync | All STORE async | docx |
|---|---|---|---|---|---|
| 2000 paragraphs + 20 images | 81.5 ops/s | 78.7 ops/s | 90.9 ops/s | 88.7 ops/s | 3.04 ops/s |
| 200x10 table | 196 ops/s | 168 ops/s | 216 ops/s | 216 ops/s | 37.2 ops/s |
| 20 sections x 100p + 40 images | 80.9 ops/s | 67.7 ops/s | 95.8 ops/s | 91.0 ops/s | 1.82 ops/s |
Large File (~100MB) — Mixed Content
500 styled paragraphs + 38 mixed-size images (1-5MB, 100MB total) + 50x10 table.
| Scenario | Default sync | Default async | All STORE sync | All STORE async | docx |
|---|---|---|---|---|---|
| Mixed (500p+38img+50x10) | 24.4 ops/s | 22.6 ops/s | 24.7 ops/s | 25.3 ops/s | 0.31 ops/s |
FAQs
Generate, parse, and patch .docx documents with a declarative TypeScript API
The npm package @office-open/docx receives a total of 1,815 weekly downloads. As such, @office-open/docx popularity was classified as popular.
We found that @office-open/docx demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
PolinRider expands across npm, Packagist, Go modules, and Chrome extensions, using hidden loaders to target developer environments.

Security News
Open source attacks are accelerating as AI coding agents pull in dependencies faster, with less human review.

Research
/Security News
Malicious Chrome and Firefox extensions posed as free VPNs while stealing clipboard data through later extension updates.