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

cvisor

v0.1.0

Published

In-process Linux sandbox for Node, Bun, and Deno (napi + FFI over libcvisor)

Readme

cVisor — Node / Bun / Deno SDK

One npm package for all three JS runtimes. Under Node it binds via a native N-API module (libcvisor.node); under Bun and Deno the package's "bun" and "deno" export conditions select FFI entries (bun:ffi / Deno.dlopen) over libcvisor.so. All entries expose the same Sandbox / sh / Output API. Linux only (ARM & x86, glibc & musl).

Install

npm install cvisor        # Node
bun add cvisor            # Bun
deno add npm:cvisor       # Deno (run with --allow-ffi)

Under Deno the sandbox needs FFI permission: deno run --allow-ffi ... (plus --allow-env if you use the CVISOR_LIB override). The runtime is picked automatically; cvisor/bun and cvisor/deno are also exposed as explicit subpaths.

Usage

import { Sandbox, sh } from "cvisor";

// Explicit sandbox — filesystem writes are isolated per sandbox.
const sb = new Sandbox();
const out = sb.runCmd("echo 'Hello, world!'");
console.log(await out.stdout()); // "Hello, world!\n"

// Tagged-template runner on a sandbox:
console.log(await sb.sh`uname -n`.stdout()); // "cvisor\n"

// Or the standalone `sh`, which uses a shared, lazily-created sandbox:
const files = await sh`ls -l ${"/tmp"}`.stdout();

runCmd(cmd) / sh\…`block until the command exits and return anOutput`:

interface Output {
  stdout: () => Promise<string>;
  stderr: () => Promise<string>;
  stdoutStream: ReadableStream<Uint8Array>;
  stderrStream: ReadableStream<Uint8Array>;
}

Filesystem operations are virtualized (a copy-on-write overlay), and unsafe commands are blocked:

await sb.sh`echo hi > /tmp/test.txt`.stdout(); // only visible in this sandbox
await sb.sh`chroot /tmp`.stderr();             // blocked

Development

The native runtime is the Rust workspace at the repo root (crate cvisor-node), built with cargo-zigbuild. From the repo root:

cargo xtask run-node                 # build libcvisor.node + run test.ts in a bun container
cargo xtask run-node --script examples/hello-world.ts
cargo xtask node-artifacts           # build libcvisor.node for all 4 platform packages

libcvisor.node and libcvisor.so are produced per platform into platforms/linux-<arch>-<libc>/. The napi loader (src/native.ts) and the FFI loader (src/libpath.ts) resolve the right one at runtime via detect-libc; CVISOR_LIB overrides the .so path. On macOS, npm install skips the platform packages (os/cpu filtering), so use the Docker flow above. The Bun/Deno e2e tests are test-bun.ts / test-deno.ts (run by CI in Alpine containers with CVISOR_LIB set).

Publishing

Bump versions across all packages, then publish:

bun run version:patch
bun run publish:all      # builds the .node artifacts (cargo xtask node-artifacts) then publishes