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

@bahulam/workplane-ui

v0.1.0

Published

Persistent interactive workspaces for people and agents — headless document authority with a React reference shell

Readme

@bahulam/workplane-ui

Persistent interactive workspaces for people and agents.

A Workplane is a versioned, persistent interactive document of ordered scenes and addressable blocks. A user and an agent operate on the same document through the same validated command gateway — so a click and a model proposal traverse identical validation, authorization, and approval policy.

Headless TypeScript document authority with a React reference shell and replaceable renderer adapters. Bahulam is the first host, not a runtime dependency: no account, cloud gateway, hosted model, or network call is required.

Pre-alpha (milestone M1). The vertical slice below is implemented and tested. Feed and Stack presentations, media/job blocks, and the Bahulam plugin bridge are specified but not built.

Install

npm i @bahulam/workplane-ui

Zero runtime dependencies. react, react-dom, and echarts are optional peers — install only what the entry points you use require.

Entry points

| Import | Contents | Needs | |---|---|---| | @bahulam/workplane-ui | document model, invariant validator, pure reducer, command gateway, policy, session store, controller, query/data contracts | nothing | | @bahulam/workplane-ui/react | provider, hooks, unstyled asChild primitives, native block catalogue, Document presenter | react | | @bahulam/workplane-ui/echarts | BI chart adapter with normalized selection events | echarts, react | | @bahulam/workplane-ui/bahulam | Bahulam host adapter: plugin-state storage, command transport, tool-backed data provider, legacy widget import | nothing | | @bahulam/workplane-ui/testkit | fixtures and the gateway conformance suite, for adapter authors | nothing | | @bahulam/workplane-ui/styles.css | default theme as CSS custom properties | — |

The headless entry imports no React and no chart engine, so a server, a CLI, or a non-React host installs only what it needs. That boundary is enforced mechanically, not by convention.

Minimal use

import {
  createDocument, LocalAuthority, MemoryStorage, WorkplaneController,
} from "@bahulam/workplane-ui";

const document = createDocument({ id: "wp_demo", title: "My workspace" });

// Everything a user or agent may write is registered and typed. A path absent
// from this policy is rejected by the authority, not merely hidden in the UI.
const policy = {
  structuralCapability: "workplane.edit",
  writablePaths: [
    { path: "/filters/period", schema: { type: "string", enum: ["2026-07", "2026-08"] } },
  ],
} as const;

const authority = new LocalAuthority({ storage: new MemoryStorage(document), policy });

const controller = new WorkplaneController({
  gateway: authority,
  documentId: "wp_demo",
  actor: { id: "u1", type: "user", capabilities: ["workplane.edit"] },
  provider: myDataProvider,
});
await controller.load();
import { WorkplaneProvider, Presenter, createNativeRegistry, createPresenterRegistry }
  from "@bahulam/workplane-ui/react";
import "@bahulam/workplane-ui/styles.css";

<WorkplaneProvider controller={controller} renderers={createNativeRegistry()}>
  <Presenter controller={controller} registry={createPresenterRegistry()} />
</WorkplaneProvider>

Restyling without forking

Presenter is a styled default built from unstyled primitives. To own the markup, compose the primitives directly — every part takes asChild, merging its behaviour onto your element:

import { WorkplanePrimitive, ScenePrimitive, BlockPrimitive } from "@bahulam/workplane-ui/react";

<WorkplanePrimitive.Root>
  <WorkplanePrimitive.Scenes>
    <ScenePrimitive.Root asChild>
      <section className="your-card">
        <ScenePrimitive.Heading asChild><h2 className="your-h2" /></ScenePrimitive.Heading>
        <ScenePrimitive.Blocks>
          <BlockPrimitive.Root>
            <BlockPrimitive.Title />
            <BlockPrimitive.Content />
          </BlockPrimitive.Root>
        </ScenePrimitive.Blocks>
      </section>
    </ScenePrimitive.Root>
  </WorkplanePrimitive.Scenes>
</WorkplanePrimitive.Root>

No Bahulam navigation or branding appears in any of it. The theme is CSS custom properties — redefine tokens rather than overriding rules.

Architecture in one paragraph

The core defines state transitions. The host enforces trust and supplies execution through HostServices. Renderers display a bounded projection and emit normalized events. An agent proposes changes through the same command boundary as a user. All durable changes enter one command gateway, which authenticates the actor, validates the whole transaction, checks the expected revision, applies operations to a copy, validates the resulting invariants, persists atomically, and only then broadcasts a committed event.

Writing an adapter

@bahulam/workplane-ui/testkit exports runGatewayConformance, which any CommandGateway must pass — revision arithmetic, CONFLICT reporting, idempotent replay, IDEMPOTENCY_MISMATCH, transaction atomicity, unregistered-path refusal, agent/user policy parity, bounded event replay, provenance, and subscription lifecycle. If a transport can change the meaning of a command, it fails the suite.

Licence

Apache-2.0. Source, issues, and docs: https://github.com/BahulamAI/workplane-ui