npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

office-oxide-wasm

v0.1.2

Published

Fast Office document processing (DOCX/XLSX/PPTX/DOC/XLS/PPT) compiled to WebAssembly. Rust core, zero JS dependencies. Works in Node.js, bundlers, and browsers.

Readme

office-oxide-wasm — Office Documents in the Browser and Edge Runtimes

Fast Office document processing (DOCX, XLSX, PPTX, DOC, XLS, PPT) compiled to WebAssembly. Rust core, zero JavaScript runtime dependencies. Works in Node.js, bundlers (Webpack/Vite/Rollup), and modern browsers.

npm (wasm) License: MIT OR Apache-2.0

Part of the office_oxide toolkit. Same Rust core, same pass rate as the Rust, Python, Go, C# / .NET, and Node.js native bindings.

For Node.js without a bundler, consider the native addon (office-oxide) — it has lower overhead and doesn't require WASM init.

Quick Start

npm install office-oxide-wasm

Node.js (CommonJS or ESM)

import { readFileSync } from "node:fs";
import { WasmDocument } from "office-oxide-wasm";

const bytes = readFileSync("report.docx");
const doc = new WasmDocument(bytes, "docx");
console.log(doc.plainText());
console.log(doc.toMarkdown());
doc.free();

Bundlers (Webpack, Vite, Rollup, esbuild)

import { WasmDocument } from "office-oxide-wasm";

const response = await fetch("/report.docx");
const bytes = new Uint8Array(await response.arrayBuffer());
const doc = new WasmDocument(bytes, "docx");
console.log(doc.plainText());
doc.free();

Browser (native ES modules, no bundler)

<script type="module">
  import init, { WasmDocument } from "office-oxide-wasm/web";
  await init(); // loads the .wasm asynchronously

  const bytes = new Uint8Array(
    await (await fetch("/report.docx")).arrayBuffer()
  );
  const doc = new WasmDocument(bytes, "docx");
  document.body.textContent = doc.plainText();
  doc.free();
</script>

Why office-oxide-wasm?

  • Portable — runs anywhere JavaScript runs: browsers, Node.js, Deno, Bun, Cloudflare Workers
  • Reliable — 100% pass rate on valid Office files (6,062-file corpus); zero failures on legitimate documents
  • Complete — 6 formats: DOCX, XLSX, PPTX + legacy DOC, XLS, PPT
  • Permissive — MIT / Apache-2.0, no AGPL or GPL restrictions
  • No native build — pure WASM bundle, works without node-gyp or a C compiler

API

WasmDocument is the single entry point.

| Method | Description | | --- | --- | | new WasmDocument(bytes, format) | Open from Uint8Array. format: "docx" \| "xlsx" \| "pptx" \| "doc" \| "xls" \| "ppt". | | .formatName() | Detected format as a string. | | .plainText() | Extract plain text. | | .toMarkdown() | Convert to Markdown. | | .toHtml() | Convert to an HTML fragment. | | .toIr() | Return the format-agnostic document IR (JS object). | | .free() | Release the underlying WASM memory. [Symbol.dispose] is also supported. |

TypeScript definitions are shipped.

Package Layout

office-oxide-wasm exports three targets via the exports map:

| Subpath | Target | Use when | | --- | --- | --- | | office-oxide-wasm | bundler (ESM) | Default for bundlers; Node picks CJS automatically | | office-oxide-wasm/node | Node CommonJS | Pure Node without a bundler | | office-oxide-wasm/web | browser ESM | Direct <script type="module"> in the browser | | office-oxide-wasm/bundler | bundler ESM | Explicit bundler entry |

Other languages

office_oxide ships the same Rust core through six bindings:

Why I built this

I needed Office document processing that works in the browser without a server round-trip — and without pulling in a JVM or a GPL-licensed dependency. The same Rust core that powers the CLI and all native bindings compiles cleanly to WASM, so feature parity is automatic.

If something's broken or missing, open an issue.

— Yury

License

MIT OR Apache-2.0


WASM + Rust core | MIT / Apache-2.0 | 100% pass rate on valid Office files (6,062-file corpus) | Browser + Node.js + edge runtimes | 6 formats