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

@unrdf/atomvm

v5.0.1

Published

Run AtomVM (Erlang/BEAM VM) in browser and Node.js using WebAssembly

Readme

@unrdf/atomvm

Run AtomVM (Erlang/BEAM VM) in the browser and Node.js using WebAssembly.

Quick Start

Browser

  1. Build an Erlang module:

    pnpm run build:erlang mymodule
  2. Start dev server:

    pnpm dev
  3. Open browser with module name:

    http://localhost:3000?module=mymodule
  4. Click "Initialize AtomVM" then "Run Example"

The page may auto-reload once to enable Cross-Origin-Isolation (required for SharedArrayBuffer).

Node.js

  1. Build an Erlang module:

    pnpm run build:erlang mymodule
  2. Execute the .avm file:

    node src/cli.mjs public/mymodule.avm

Features

  • State Machine Design: Poka-yoke error prevention - invalid operations are impossible
  • Real AtomVM WASM: Uses actual AtomVM v0.6.6 compiled to WebAssembly
  • Dual Runtime: Works in both browser and Node.js environments
  • Cross-Origin-Isolation: Automatic COI setup via service workers
  • Module-Based: Explicit module naming (no defaults)
  • SLA Tracking: Strict SLA for JS→Erlang→JS roundtrips (<10ms latency, <0.1% error rate)
  • Poka-Yoke SLA: Prevents operations that would violate SLA thresholds

Installation

pnpm install

Usage

Browser Runtime

The browser runtime requires a module name in the URL:

// URL: ?module=mymodule
// Code automatically:
// 1. Registers service worker for COI
// 2. Creates AtomVMRuntime with module name
// 3. Enables UI controls

API:

import { AtomVMRuntime } from '@unrdf/atomvm';

const runtime = new AtomVMRuntime(terminal, 'mymodule');
await runtime.loadWASM();
await runtime.executeBeam('/mymodule.avm');

Node.js Runtime

import { AtomVMNodeRuntime } from '@unrdf/atomvm/src/node-runtime.mjs';

const runtime = new AtomVMNodeRuntime();
await runtime.load();
await runtime.execute('/path/to/file.avm');

CLI

# Execute .avm file
node src/cli.mjs public/mymodule.avm

Build Scripts

# Build Erlang module to .avm
pnpm run build:erlang mymodule

# Complete workflow (build + instructions)
pnpm run build:erlang:workflow mymodule

# Clean build artifacts
pnpm run build:erlang:clean

Browser Compatibility

  • Chrome/Edge: 92+ ✅
  • Firefox: 95+ ✅
  • Safari: 15.2+ ✅

Requires service worker support and Cross-Origin-Isolation (automatic via coi-serviceworker).

SLA Requirements

Strict SLA for JS→Erlang→JS Roundtrips:

  • Latency: <10ms per roundtrip (end-to-end)
  • Error Rate: <0.1% (1 error per 1000 roundtrips)

Poka-Yoke Enforcement:

  • Operations rejected if error rate would exceed 0.1%
  • Latency warnings logged if >10ms (but allowed - may be transient)
  • SLA metrics tracked in OTEL spans

See SLA Roundtrip Documentation for details.

Documentation

Complete documentation is organized using the Diataxis framework:

Start with: Getting Started Tutorial

Development

# Run tests
pnpm test

# Run tests in watch mode
pnpm test:watch

# Run browser integration tests
pnpm test:browser

# Run Playwright E2E tests
pnpm test:playwright

# Build for production
pnpm build

# Preview production build
pnpm preview

Architecture

  • Browser: Service worker enables COI → SharedArrayBuffer → AtomVM WASM execution
  • Node.js: Spawns Node.js process with AtomVM-node-v0.6.6.js
  • State Machine: Prevents invalid operations (poka-yoke design)
  • Module-Based: Explicit module naming required (no defaults)

See Architecture Explanation for details.

Requirements

  • Browser: Module name in URL (?module=<name>)
  • Node.js: Node.js 18+, Erlang toolchain for building modules
  • Build Tools: erlc and packbeam in PATH

License

MIT