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

@datalayer/reactor

v1.0.0

Published

Extension reactor with framework-agnostic core and React bridge

Readme

Datalayer

Become a Sponsor

🔌 Reactor

Reactor provides two sibling packages in one repository, with no python/typescript subpackage folders:

  • datalayer_reactor (PyPI distribution, imported as reactor): FastAPI + pluggy plugin reactor for modular and SaaS-style extensibility.
  • @datalayer/reactor (TypeScript): Extension runtime with a framework-agnostic core and separate React integration.

Why Reactor

This project targets a full extension reactor, not only hook callbacks:

  • Platform architecture with lifecycle phases and dependency graph
  • Plugin marketplace metadata and discovery primitives
  • Third-party ecosystem support through explicit manifest contracts
  • Dynamic feature loading and runtime enable/disable
  • Modular app concerns: interdependencies, lifecycle management, compatibility checks
  • SaaS extensibility primitives: tenant-specific plugin activation, sandboxed execution, versioned compatibility

Repository Layout

  • src/: TypeScript package source for @datalayer/reactor
  • reactor/: Python package source
  • examples/frontend/: frontend-only React + Primer UI demo
  • examples/frontend-backend/: combined React + Python demo

TypeScript Package: @datalayer/reactor

Design

The TypeScript runtime implements:

  • defineExtension and configExtension
  • dependencies, peerDependencies, conflictsWith
  • ordered phases: init -> build -> register -> afterRegistration
  • runtime lifecycle control: start, stop, enable, disable
  • signal primitives for reactive extension outputs:
    • signal, computed, effect, batch, untracked
    • namedSignals, watchedSignal

Core vs React split

  • Core runtime exports from @datalayer/reactor
  • React bindings export from @datalayer/reactor/react

React bindings include:

  • useReactor: register the reactor in the zustand store and manage its lifecycle
  • ReactorSlot: render plugin-provided components by named slot
  • useReactorPlatform: reactor access for runtime toggles

Build

npm install
npm run build

Minimal TypeScript usage

import { buildReactorFromExtensions, defineExtension } from '@datalayer/reactor';

const DemoExtension = defineExtension({
	name: '@demo/core',
	build() {
		return { message: 'hello' };
	},
});

const reactor = buildReactorFromExtensions([DemoExtension]);
reactor.start();

Python Package: datalayer_reactor

Capabilities

  • Pluggy-powered plugin registration (register_plugin)
  • Compatibility and dependency checks via PluginManifest
  • Runtime enable/disable globally and by tenant
  • Marketplace publication/listing (PluginMarketplace)
  • Sandboxed execution option for plugin calls
  • FastAPI control plane with plugin/tenant endpoints

Install and run

python -m venv .venv
source .venv/bin/activate
pip install -e .
python -m reactor

API app endpoints

  • GET /plugins
  • POST /plugins/{plugin_name}/toggle
  • POST /tenants/plugins/{plugin_name}/toggle
  • GET /tenants/{tenant_id}/features
  • GET /tenants/{tenant_id}/routes
  • GET /marketplace

Minimal Python usage

from reactor import PluginManifest, PluginCompatibility, PluginPlatform

reactor = PluginPlatform()
reactor.register_plugin(
		PluginManifest(
				name="greeting-plugin",
				version="1.0.0",
				compatibility=PluginCompatibility(api_version="v1"),
		),
		plugin_impl=object(),
)