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

rxls-wasm

v0.1.4

Published

Read and diagnose spreadsheet files in WebAssembly with rxls

Readme

rxls-wasm

rxls-wasm is the synchronous WebAssembly adapter for the rxls spreadsheet reader. It accepts spreadsheet bytes and exposes text, CSV, HTML, Markdown, and stable diagnostic JSON outputs.

The package reads .xls, .xlsx, .xlsm, .xlsb, and .ods. It is read-only: it does not create, modify, or preserve spreadsheet packages. The synchronous exports are extractText, toCsv, toHtml, toMarkdown, reportJson, maxInputBytes, and maxExportOutputBytes.

npm install rxls-wasm

Node.js

Node.js 20 or newer is required. The Node binding initializes synchronously when loaded and does not export the browser-only default initializer.

const fs = require("node:fs");
const { reportJson, maxInputBytes } = require("rxls-wasm");

const bytes = fs.readFileSync("workbook.xlsx");
if (bytes.byteLength > maxInputBytes()) throw new Error("workbook is too large");
const report = JSON.parse(reportJson(bytes));
console.log(report.stats);

Node ESM consumers can use the same named exports:

import { reportJson } from "rxls-wasm";

Browser

Bundlers that honor the browser export condition select the web binding and its browser-specific declarations. Initialize it before calling an adapter:

import init, { reportJson } from "rxls-wasm";

await init();
const bytes = new Uint8Array(await file.arrayBuffer());
const report = JSON.parse(reportJson(bytes));

Adapter failures are JavaScript Error objects with the stable fields name ("RxlsError"), kind, message, location, and nullable string cause. The generated TypeScript declarations include RxlsErrorObject for narrowing.

Memory and input contract

The API is synchronous. wasm-bindgen first copies every Uint8Array into WebAssembly memory, and parsing may allocate additional bounded buffers. Inputs are therefore limited to 32 MiB (maxInputBytes()). Check the size before the call, avoid concurrent parses of large files, release references to input and output buffers promptly, and move parsing to a Web Worker when UI latency matters. Streaming is not currently supported.

The release gate exercises tracked XLS, XLSX, XLSM, XLSB, and ODS fixtures in Node and Chromium. It calls every public export, compares text, CSV, HTML, and diagnostic report semantics with an independently compiled native helper, and probes malformed inputs, invalid sheet indexes, the exact input limit, and one byte over it. It also installs the packed archive into a clean consumer, checks CommonJS, Node ESM, browser-conditional ESM, and compiles a strict TypeScript consumer. The shipped demo is driven in Chromium through ready, successful upload/export, malformed-file, and input-limit states.

The same gate enforces these distribution ceilings:

| Artifact | Maximum | | --- | ---: | | Each generated .wasm target | 2 MiB | | Each JavaScript glue target | 128 KiB | | Packed npm archive | 2 MiB |

Build and validate the candidate with bash scripts/build-wasm-package.sh. The adapter's separate Cargo manifest configures a size-oriented release profile; native and render-worker profiles are unchanged. The npm package also includes generated TypeScript declarations, the browser demo, and license notices. wasm-size-report.json is published separately as release evidence and is not embedded in the package it describes.