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

@bendyline/molen-schema

v0.0.4

Published

Molen data formats: schemas, validator, and error formatter

Readme

@bendyline/molen-schema

The data formats every other Molen package reads and writes: schemas, a validator whose errors are meant to be fixable, and the component vocabulary. Depends on nothing but Zod.

Part of Molen, an AI-legible 3D experience engine: a deterministic headless kernel, a three.js client, and a dev loop an agent can drive end to end.

Install

npm i @bendyline/molen-schema

ESM only, Node >= 22.13. No DOM and no filesystem access, so it runs unchanged in a page, a Worker and Node.

Use

Every document carries a "format": "molen/<kind>@<n>" envelope. validate returns the typed document, or an error block with a JSON Pointer, what was expected, and an example fix:

import { validate } from '@bendyline/molen-schema';

const result = validate('scene', {
  format: 'molen/scene@3',
  name: 'arena',
  entities: [{ id: 'player', components: { transform: { pos: [0, 1] } } }],
});

if (result.ok) {
  console.log(`${result.value.entities.length} entities`, result.notices ?? []);
} else {
  console.error(result.formatted);
}
✖ scene "arena" failed validation (1 issue)

1. /entities/0/components/transform/pos
   Too small: expected array to have >=3 items
   expected: array of at least 3
   received: [0,1]
   hint:     e.g. "transform": {"pos":[0,1.5,-3],"rot":[0,0,0,1]}
   docs:     schemas/components.md

Notices are advisory and do not block: a misspelled component name is accepted as a custom component and reported with a did-you-mean.

What's in it

| Export | For | |---|---| | validate / validateByKind / detectKind | validating a document; validate is typed over the ten core kinds | | formatIssues / blockingIssues / noticeIssues | the error block above, and splitting errors from advisories | | listComponents / getComponent / registerComponent / createComponentRegistry | the component vocabulary validation checks against | | listSchemas / getSchema / registerSchema / registerLegacySchema | the format registry a capability package adds its own kinds to | | resolvePrefab / resolveEntityComponents / deepMergeJson / buildTypeIndex / resolveType | layering data: prefab extends, registry types, entity overrides | | SceneManifest, Keyframe, Delta, Command, ReplayFixture, ProjectManifest, AssetSidecar, MessageLink | the types, including the kernel/client message protocol | | @bendyline/molen-schema/schemas/* | the emitted JSON Schema files (scene.schema.json, …) for editors and other languages |

Core kinds: scene, prefab, command, keyframe, delta, replay, assert, project, types, asset. Capability packages register more (terrain, matgraph, figure, …).

Status

0.x, and the formats are beta. A format is versioned in its own envelope and bumped rather than migrated — molen/scene@3 is the current scene — though validate still accepts any registered older version, upgrades it in place, and returns a deprecation notice. Expect kinds and component fields to be added, and the package API to move with the engine's single version line.

Docs

MIT © Bendyline LLC