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

valkey-wasm

v0.1.1

Published

Real Valkey (the BSD-licensed Redis fork) compiled to WebAssembly, networking bridged to node:net — an in-process, Redis-compatible server for Node. PGlite for Redis.

Readme

valkey-wasm

Valkey (the BSD-licensed fork of Redis) compiled to WebAssembly, with its networking wired through Node's net module. You get a redis://127.0.0.1:6379 server running inside your Node process, with no native Redis install and no Docker. If you've used PGlite, it's the same idea for Redis.

Why

Sometimes you need Redis for something that shouldn't drag a running Redis into it. Local development where you'd rather not run Docker. A CI job that shouldn't have to stand up a service container. A test suite that wants a clean database on every run. An offline demo, or somewhere you just can't keep a daemon alive.

A mock like ioredis-mock is easy to reach for, but it reimplements Redis in JavaScript. That works for the common commands and falls short on the rest: Lua scripting, EVALSHA, blocking commands like BLPOP, and streams. It also lives entirely inside one process, so the moment you fork a worker, that worker is talking to an empty database.

valkey-wasm takes a different route. It's the actual Valkey source compiled to WebAssembly, running inside your Node process. Since it's the real engine, there's nothing to keep a checklist of. Scripting, streams, blocking commands, pub/sub, and transactions behave the way they do on any Redis server.

Install

npm install valkey-wasm

Then start a server and point any Redis client at it. See docs/usage.md for an example and the API.

How it works

Valkey keeps its whole event loop, client handling, blocking commands, pub/sub, and scripting. The only things swapped out are the two spots that touch the network:

  • ae_wasi.c replaces the event-loop poll (epoll/select) with a call into the host, because a wasm build can't see the sockets that live on the JS side.
  • The socket layer (read/write/accept and friends) is routed to host functions instead of real syscalls.

Those host functions live in the JS bridge and are backed by node:net. There's no fork (persistence is off) and no threads (background jobs run inline, io-threads set to 1). The wasm module is a reactor: it boots once and stays resident, and the bridge steps its event loop forward on each socket event and a timer.

 TCP client ──▶ net.Server (JS) ──▶ host_* imports ──▶ Valkey wasm core
   (ioredis,        bridge/            (fd table)         (RESP + Lua +
    BullMQ)      valkey-server.ts                         data structures)