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

@its-not-rocket-science/ananke

v0.5.4

Published

Deterministic lockstep-friendly SI-units RPG/physics core (fixed-point TS)

Readme

Ananke

CI Determinism

Package: @its-not-rocket-science/ananke
Stable API contract: STABLE_API.md
Status: active engineering project; stable root API, exploratory submodules

Ananke is a deterministic simulation kernel for host applications.

It is designed for projects that need a world state to evolve reproducibly while leaving rendering, persistence, networking, content authoring, and deployment under the control of the host application.

Core contract

Given the same:

  • initial world state,
  • command stream,
  • tick count, and
  • engine version,

Ananke should produce the same outcome.

That makes it useful for replay, debugging, deterministic tests, lockstep-style simulation, audit trails, and host-controlled narrative or game systems.

Use Ananke when

  • you need a reproducible simulation loop;
  • you want host-owned rendering and persistence;
  • you need deterministic fixtures for tests or replays;
  • you want a stable root import surface for long-lived integrations;
  • you are comfortable treating advanced subpath modules as version-pinned or experimental.

Do not use Ananke if

  • you want a complete game engine;
  • you need a visual editor;
  • you want turnkey networking;
  • you need a no-code simulation builder;
  • you expect every exported internal module to be semver-stable.

10-minute success path

npm install
npm run build
npm run example:first-hour
npm run test:first-hour-smoke

Then follow the first-hour adopter path:

docs/first-hour-adopter-path.md

Minimal deterministic loop

import {
  createWorld,
  q,
  stepWorld,
  type CommandMap,
} from "@its-not-rocket-science/ananke";

const world = createWorld(1337, [
  {
    id: 1,
    teamId: 1,
    seed: 10,
    archetype: "KNIGHT_INFANTRY",
    weaponId: "wpn_longsword",
    armourId: "arm_mail",
    x_m: -1.2,
  },
  {
    id: 2,
    teamId: 2,
    seed: 11,
    archetype: "HUMAN_BASE",
    weaponId: "wpn_club",
    x_m: 1.2,
  },
]);

const commands: CommandMap = new Map([
  [1, [{ kind: "attackNearest", mode: "strike", intensity: q(1.0) }]],
  [2, [{ kind: "attackNearest", mode: "strike", intensity: q(1.0) }]],
]);

stepWorld(world, commands, { tractionCoeff: q(0.9) });

Stable API promise

For semver stability, import from the package root only:

import {
  createWorld,
  stepWorld,
  q,
  type CommandMap,
} from "@its-not-rocket-science/ananke";

Tier-1 root exports are documented in:

Subpath modules are shipped and supported, but are not part of the Tier-1 semver contract unless explicitly called out as stable.

What is stable today

Stable today means Tier-1 root exports from @its-not-rocket-science/ananke:

  • fixed-point primitives and helpers (q, SCALE, related conversion and maths utilities);
  • host-facing types (Entity, WorldState, Command, CommandMap, KernelContext);
  • deterministic world and scenario entry points (createWorld, loadScenario, validateScenario);
  • deterministic stepping (stepWorld);
  • replay helpers (ReplayRecorder, replayTo, serializeReplay, deserializeReplay);
  • bridge snapshot extraction (extractRigSnapshots, deriveAnimationHints).

If you need long-term compatibility, keep production integrations on this root Tier-1 surface.

What is shipped but not semver-stable

These surfaces are available, but outside the Tier-1 stability promise unless separately documented:

  • most subpath modules in package.json#exports, including ./combat, ./character, ./tier2, ./tier3, ./netcode, and ./host-loop;
  • emerging or advanced modules that may change shape between minor releases;
  • exploratory integration helpers and higher-order systems.

Treat these areas as adopt-with-version-pinning.

Useful next files

Boundaries note

First-hour checks verify setup and basic deterministic behaviour. They do not validate your production integration. Host applications should keep their own regression suite and pin versions where deterministic behaviour is part of their product contract.