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

@zvk/game-bridge

v0.1.1

Published

Typed snapshots, coordinate transforms, and optional React and Phaser adapters for browser-game UI bridges.

Downloads

287

Readme

@zvk/game-bridge

@zvk/game-bridge is a headless boundary between browser-game runtimes and DOM UI. It owns immutable channels, typed UI intents, exact affine projection, lifecycle diagnostics, and optional DOM, React, and structurally typed Phaser adapters. The game continues to own simulation, entity selection, camera policy, rendering, persistence, and action semantics.

bun add @zvk/game-bridge
# Add React and/or Phaser only when importing their adapter subpaths.

Local ZVK consumers may use file:/Users/brandon/Programming/zvk/packages/game-bridge plus a matching override. Release proof uses npm pack and installs that immutable tarball into an isolated consumer fixture.

Choose the owner subpath

| Import | Use it for | | --- | --- | | @zvk/game-bridge | Channels, independent state/frame lanes, intents, diagnostics | | @zvk/game-bridge/geometry | Branded affine transforms, visibility, inverse projection, placement | | @zvk/game-bridge/dom | Canvas/overlay measurement and observation | | @zvk/game-bridge/react | React 18.3/19 external-store bindings | | @zvk/game-bridge/phaser | Explicit-camera Phaser 3.90 capture and lifecycle | | @zvk/game-bridge/test-utils | Typed frames, anchors, fake Phaser surfaces, lifecycle assertions |

Two lanes

The lower-frequency state lane carries app-defined HUD/menu data. The high-frequency frame lane atomically carries one transform and its app-selected projected anchors. Publishing one lane never notifies subscribers to the other.

import { createGameBridge } from "@zvk/game-bridge";

const { bridge, producer } = createGameBridge({
  initialState: { score: 0 },
  serverState: { score: 0 },
  onIntent: ({ intent }) => runtime.dispatch(intent),
});

producer.state.publish({ score: 1 });
const stop = bridge.state.subscribe(() => render(bridge.state.getSnapshot()));
bridge.intents.dispatch({ type: "menu.close" });
stop();

For a world overlay, join a projected anchor ID from bridge.frame to semantic state from bridge.state, then map anchor.overlayPoint into an app component or @zvk/game-ui surface. The packages integrate through plain data and do not depend on each other.

Create scene connectors after the DOM and camera exist. Destroy connectors during scene shutdown, then destroy the whole bridge during application shutdown. Treat not-ready, disconnected, and destroyed frames as having no usable world anchors.

The root and geometry imports need no optional peers or browser globals. React uses a fixed server snapshot; DOM and Phaser work begins only when their factories are called. Package code returns discriminated failures and never logs implicitly.

Read the checked guides for installation and lifecycle, core contracts, geometry and inverse input, DOM measurement, React and SSR, Phaser lifecycle, test fixtures, and migration.

Maintainer verification

bun run --filter @zvk/game-bridge preflight
bun run verify:game-bridge:promotion

The promotion gate runs package preflight, npm readiness, and the tarball-installed web-game-template consumer canary. It records producer and consumer Git state plus tarball version/hash and command results.

Non-goals

This is not an engine, ECS, simulation store, renderer, UI kit, event bus, entity registry, persistence layer, or networking system. It publishes only app-selected plain-data anchors and app-defined intents.