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

@runmvm/mvm

v0.15.1

Published

TypeScript SDK for declaring mvm microVM workloads. SDK port Phase 6 — mirror of the Python SDK at sdks/python/.

Readme

@runmvm/mvm — TypeScript SDK

Declare a microVM workload in TypeScript. Describe an app, and the mvmctl toolchain bakes it into a Nix-built Firecracker / libkrun microVM image and boots it — no Dockerfile, no SSH, no agent code in your app.

npm install @runmvm/mvm

mvmctl (the Rust host CLI) is distributed separately and does the building, booting, and signing. This package is the authoring surface it reads.

Quick start

// app.ts
import * as mvm from "@runmvm/mvm";

mvm.workload({ id: "hello" });

export const greet = mvm.app({
  image: mvm.node_image({ node: "22" }),
  resources: mvm.resources({ cpu: 1, memory_mb: 256 }),
})((name: string): string => `hello ${name}`);
mvmctl compile app.ts     # parse the file (no execution) → flake.nix + launch plan
mvmctl up --flake .       # build the image and boot the microVM

mvm.app({...}) is higher-order: it records the declaration and returns the function unchanged, so the same file runs normally under tsx / node and is also read statically by mvmctl compile.

How it builds

mvmctl compile reads your file statically — the mvm.app({...}) call and the import are parsed as data, never executed, so nothing in your module runs on the host. At image-build time the framework call and the @runmvm/mvm import are stripped from the bundled source, so the guest runs your plain function with no SDK dependency inside the microVM.

You can also emit the canonical Workload IR in-process, for inspection or tests:

import * as mvm from "@runmvm/mvm";
console.log(mvm.emitJson());   // the IR mvmctl would produce

Lifecycle hooks

Four hook points, each a shell string or an argv list, passed as kwargs to mvm.app({...}). Addons contribute their own hooks, merged at compile time:

| Hook | Runs | | --- | --- | | before_build | in the builder VM, before the image is assembled | | before_start | in the guest, before the entrypoint | | after_start | in the guest, after the entrypoint is up | | before_stop | in the guest, on shutdown |

mvm.app({
  image: mvm.node_image({ node: "22" }),
  env: { API_KEY: mvm.secret("api-key") },
  before_start: mvm.hook("export TZ=UTC"),
  after_start: mvm.hook(["curl", "-fsS", "http://localhost:8080/health"]),
})((name: string) => `hello ${name}`);

Building blocks

| Helper | Purpose | | --- | --- | | mvm.nix_packages([...]), mvm.node_image({...}), mvm.python_image({...}) | base image | | mvm.resources({ cpu, memory_mb, rootfs_size_mb }) | per-VM budget | | mvm.network({ mode, ports }) | egress policy (default none) | | mvm.secret("name"), mvm.literal("v") | env values — secrets resolve on the host, never baked into the image | | mvm.entrypoint({...}), mvm.entrypoint_function({...}) | explicit / multi-function entrypoints |

The IR types (Workload, App, Resources, …) are re-exported, so import { Workload } from "@runmvm/mvm" works directly.

Versioning

The SDK version tracks the mvmctl toolchain version: a workload emitted by @runmvm/mvm X.Y.Z is consumed by mvmctl X.Y.Z. Install matching versions.

Links

  • Source & issues: https://github.com/tinylabscom/mvm
  • Python SDK: mvm

License

Apache-2.0