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

@miadi/wampum-narrative-engine

v0.1.1

Published

The belt as a narrative model: an authored W/P notation field, narrative anchors placed at (row, col) each holding several co-valid readings, a renewable commitment log, and an open registry of relational reading positions. A peer narrative engine — it ho

Readme

@miadi/wampum-narrative-engine

The belt as a narrative model: an authored W/P notation field, narrative anchors placed at (row, col) each holding several co-valid readings, a renewable commitment log, and an open registry of relational reading positions.

In the Miadi stack, this is one of two narrative models. A linear story model such as the Narrative Context Protocol (@miadi/ncp-story-studio) tells a story as a sequence of beats. A wampum belt holds a narrative as positions on a field, each read differently from different relational positions, bound by a commitment that has to be renewed. This package gives that structure to software without carrying any community's content.

npm install @miadi/wampum-narrative-engine

What this package is

A peer narrative engine, not a view of another one. It has no dependencies, and it imports no other narrative schema — deliberately. The moment this package knows what a Storyform is, the belt has been absorbed into the model it was meant to stand beside. Crossing between the two is the entire job of @miadi/ncp-wampum-bridge, which is the only package that knows both.

What it holds that a linear story model does not

| | | |---|---| | Position instead of order | An anchor sits at (row, col). anchorsInFieldOrder offers a reading order because a screen needs one — it is not the order, and a caller that treats it as a sequence has put the line back. | | Several readings, none promoted | NarrativeAnchor.readings maps a perspective id to what that position says. There is no canonical field, on purpose: adding one would collapse the plurality the type exists to hold. | | A bond that must be re-affirmed | CommitmentLog moves active → under_review → renewed_bond and settles back to active. renewed_bond is not terminal. A record that stays true only by being re-affirmed has no equivalent in a store where everything is true until edited. The status is moved by the people who hold the bond — this package computes no expiry and has no lapsed state. | | An open set of positions | createRegistry() seeds ELDER, HOST, GUEST, OBSERVER and accepts any id after that. A work with no standing to fill ELDER registers its own positions instead. |

A notation is authored, never derived

blankNotation(rows, columns) returns an unwoven field, and that is a real state rather than a placeholder — anchors can be placed and read on blank ground. Nothing in this package will invent a weave from a story, because no arrangement of events implies a pattern. isWoven() says whether anybody has woven one, so a consumer can say so rather than presenting blank ground as meaning.

The generation boundary

mayGenerateInto(perspective) returns false for the sacred register and for any position requiring consent. A caller that receives false records a refusal; it does not generate and filter afterwards. A machine reading rendered in an Elder's register would be mistaken for testimony, and that is the one failure this boundary exists to prevent.

Custodianship travels on the belt rather than beside it, is never derived and never defaulted. An absent record reads as absent, never as permission.

Cultural protocol

The seed belts of the tradition (Kaswentha, Hiawatha, Dish with One Spoon, Covenant Chain) are public, community-held treaty records. They are cited as public teachings and are not templates for fiction. This package ships the structure — a field, positions on it, readings, a renewable bond — and no community's content. Build the loom; let the keepers weave.

The research behind it, and the cultural protocol that governs its use, ship as @miadi/foundations-wampum-narrative-engine.

API

  • Types — Belt, Notation, BeadKind, NarrativeAnchor, CommitmentLog, CommitmentStatus, RelationalPerspective, PerspectiveRegister, BeltCategory, Custodianship
  • Notation — blankNotation, cellAt, setCell, notationRows, isWoven
  • Anchors — anchorAt, anchorById, readingsOf, anchorsInFieldOrder
  • Commitment — openCommitment, callUnderReview, polishTheChain, restToActive
  • Registry — SEED_PERSPECTIVES, createRegistry, mayGenerateInto
  • Validation — validateBelt (structure only: field size, anchors on the field, unique ids. Whether a belt is right is not decidable by a validator.)

MIT © Miadi