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

lammps.js

v1.1.0

Published

Browser-friendly WebAssembly build of LAMMPS with a typed JavaScript interface.

Readme

lammps.js

CI npm version

Lightweight typed JavaScript/TypeScript wrapper around LAMMPS. The package exports the compiled lammps.js module together with a modern interface (LAMMPSWeb) that exposes snapshots for particles, bonds and simulation box data.

Usage

import { LammpsClient } from "lammps.js/client";

const lammps = await LammpsClient.create();

lammps.start().runScript(`
  units lj
  atom_style atomic
  lattice fcc 0.8442
  region box block 0 3 0 3 0 3
  create_box 1 box
  create_atoms 1 box
  mass 1 1.0
  pair_style lj/cut 2.5
  pair_coeff 1 1 1.0 1.0 2.5
  run 1
`);

const particles = lammps.syncParticles({ copy: true });
console.log(`atoms: ${particles.count}`);

const wrapped = lammps.syncParticles({ wrapped: true, copy: true });
console.log(`wrapped positions length: ${wrapped.positions.length}`);

lammps.dispose();

Advance the solver (via advance(stepCount)) between snapshots to receive new frames.

Advance the solver (advance()) before sampling to obtain subsequent frames. The TypeScript definitions are shipped with the package under types/index.d.ts, so IDEs receive auto-complete everywhere.

High-level client

For a more ergonomic API, use the helpers in lammps.js/client:

import { LammpsClient } from "lammps.js/client";

const lammps = await LammpsClient.create();
await fetch("/in.lj")
  .then(res => res.text())
  .then(script => lammps.runInput("in.lj", script));

for (let frame = 0; frame < 10; frame += 1) {
  lammps.advance(1);
  const { positions, count } = lammps.syncParticles({ copy: true });
  console.log(`frame ${frame}: ${count} atoms`);
}

lammps.dispose();

Advance the solver (via advance(stepCount)) between snapshots to receive new frames.

Use syncParticles({ wrapped: true }) and syncBonds({ wrapped: true }) to access raw periodic coordinates while the default returns minimum-image data, ready for rendering.

Install via npm:

npm install lammps.js

Building the wasm bundle

npm run build:wasm

This calls cpp/build.py, which keeps the upstream LAMMPS checkout in cpp/lammps fresh and emits cpp/lammps.js (single-file ES module).

Test suite

The Vitest suite spins up a jsdom environment, instantiates the wasm module, loads a miniature Lennard-Jones sample and validates the public interface.

npm test

The build step fetches the LAMMPS sources on first run. Subsequent runs are incremental thanks to the cached checkout and Emscripten cache.

Examples

A ready-to-run Three.js demo lives in examples/threejs:

cd examples/threejs
npm install
npm run dev

It links against the local workspace copy of lammps.js and renders the Lennard-Jones sample (tests/fixtures/lj.mini.in).