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

@ue-shed/uasset-inspection-wasm

v0.1.0-rc.4

Published

Browser and Node WebAssembly UAsset inspection for bounded package bytes

Readme

@ue-shed/uasset-inspection-wasm

Portable WebAssembly inspection for classic, uncooked, versioned Unreal package bytes. The package accepts a Uint8Array and a display path; it does not discover files, read project roots, run processes, maintain caches, or write assets.

The first public contract is deliberately small:

  • generic inspection returns schema 8;
  • extractText and extractTextures return compact projection schema 1;
  • malformed, unsupported, partial, and resource-limited packages are represented as typed result values;
  • cooked, unversioned, IoStore/Zen, swapped-endian, and native bulk-data decoding remain outside the parser boundary.

The default input and serialized-output limit is 64 MiB. The Rust adapter also bounds package exports and compact projection records. JavaScript rejects an oversized Uint8Array before wasm-bindgen copies it into WebAssembly linear memory, and Rust stops JSON serialization when the output cap is reached instead of first constructing an oversized string.

These public limits compose with the parser's own ArchiveLimits: declared table/container counts are rejected before allocation, and nested property types, values, and struct fields are bounded by the parser. The WASM adapter calls the same Package::parse and decode_export paths; it adds host input/output, export, and projection caps rather than duplicating parser nesting or allocation policy.

Node

import {
	createNodeRuntime,
	inspect,
	extractText,
	extractTextures
} from "@ue-shed/uasset-inspection-wasm/node";

const runtime = createNodeRuntime();
const bytes = new Uint8Array(await readFile("Content/Fixture/Example.uasset"));
const inspection = runtime.inspect("Content/Fixture/Example.uasset", bytes);
const text = runtime.extractText("Content/Fixture/Example.uasset", bytes);

// The root Node entry exposes the same operations when a configured runtime is not needed.
const sameInspection = inspect("Content/Fixture/Example.uasset", bytes);
void extractTextures;
void sameInspection;

Browser

Use the explicit browser entry so bundlers do not select the Node loader:

import { createBrowserRuntime } from "@ue-shed/uasset-inspection-wasm/browser";

const runtime = await createBrowserRuntime();
const bytes = new Uint8Array(await (await fetch("/assets/Example.uasset")).arrayBuffer());
const inspection = runtime.inspect("Example.uasset", bytes);

The browser entry loads its adjacent .wasm file using import.meta.url. Servers should serve .wasm with application/wasm; the generated loader falls back to an ordinary fetch when streaming instantiation is unavailable.

WasmInputLimitError, WasmOutputLimitError, WasmProtocolError, and WasmInitializationError are thrown for host/runtime failures. Parser failures are returned as status: "error" values with schema-specific kind fields, so malformed input does not require exception-based control flow.

The npm package is MIT licensed. It is a read-only bytes-to-evidence adapter and does not publish the private Rust crate to crates.io.