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

@grampelberg/bun-plugin-wasm

v1.0.0

Published

Bun plugin for loading wasm-pack WebAssembly modules in Bun projects

Readme

bun-web-wasm

Plugin that enables loading wasm-pack packages in Bun. Check out the demo to see it in action.

Getting Started

Add the package to your project:

bun add @grampelberg/bun-plugin-wasm

Then, for the dev server, edit bunfig.toml to include:

[serve.static]
plugins = ["@grampelberg/bun-plugin-wasm"]

For builds:

Bun.build({
  ...
  plugins: ["@grampelberg/bun-plugin-wasm"],
})

To use bun run, edit bunfig.toml to include:

preload = ["@grampelberg/bun-plugin-wasm/preload"]

How does it work?

During compilation, the plugin looks for any file that imports something ending in .wasm and rewrites its source so that it can be correctly loaded. This is because bun treats .wasm files as assets and does not try to bundle them. See the proposal for how this might end up looking in the future.

In this instance, the file is rewritten like:

Index: rust/pkg/bun_wasm_demo.js
===================================================================
--- rust/pkg/bun_wasm_demo.js
+++ rust/pkg/bun_wasm_demo.js
@@ -1,5 +1,7 @@
-import * as wasm from "./bun_wasm_demo_bg.wasm";
+import * as __bun_wasm_import_0 from "./bun_wasm_demo_bg.js";
+import * as __bun_import_wasm_wasm from "./bun_wasm_demo_bg.wasm";
+const wasm = (await WebAssembly.instantiateStreaming(fetch(__bun_import_wasm_wasm.default || __bun_import_wasm_wasm), { "./bun_wasm_demo_bg.js": __bun_wasm_import_0 })).instance.exports;
export * from "./bun_wasm_demo_bg.js";
import { __wbg_set_wasm } from "./bun_wasm_demo_bg.js";
__wbg_set_wasm(wasm);
wasm.__wbindgen_start();

The long WebAssembly.instantiateStreaming line is the most important here. It is:

  • Relying on the __bun_import_wasm_wasm value to be the path .wasm can be loaded from the server.
  • Fetches, compiles and then instantiates the module.
  • Sets the original wasm variable to the exports of the instantiated module.

There are handlers to allow for loading WASM in webpack and vite.

Development

There are some extra things that need to be done. To get this working, first install mise and run:

mise install

Then, you'll want to run:

just install

This will do some install/compilation that is needed to run the tests.

  • All logging is controlled via LOG_LEVEL.

Release

Trigger the release workflow.

TODO

  • [ ] Figure out the release process. npm publish requires pushing to default, which I've disabled. It also formats package.json wrong.
  • [ ] Add bun audit to the CI checks. Should this be run on a schedule instead? What's the overlap with dependabot?
  • [ ] Add renovate to the repo ... somehow. CI check maybe?