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

@bext-stack/framework

v0.1.0

Published

PRISM — bext's zero-config JSX-to-string SSR engine. JSX compiles to h() string-builder calls (no React, no VDOM); components are (props) => string. Streaming, Suspense, async components, islands.

Readme

@bext-stack/framework

PRISM — bext's zero-config JSX-to-string SSR engine.

JSX compiles to h() string-builder calls (no React, no VDOM). Components are (props) => string. Async components return Promise<string> or AsyncIterable<string>. Suspense + streaming work out of the box.

// tsconfig.json
// { "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "@bext-stack/framework" } }

// page.tsx — sync, returns a string
export default function Home() {
  return <h1>Hello {props.name}</h1>;
}

// async page — returns Promise<string>
export default async function User({ id }: { id: string }) {
  const u = await fetch(`/api/u/${id}`).then((r) => r.json());
  return <p>{u.name}</p>;
}

// streaming page with Suspense
import { Suspense } from "@bext-stack/framework/streaming";

export default function Page() {
  return (
    <>
      <h1>Static shell ships first</h1>
      <Suspense fallback={<p>Loading…</p>}>
        <SlowPart />
      </Suspense>
    </>
  );
}

Entry points

| Subpath | Purpose | |---|---| | @bext-stack/framework/jsx-runtime | JSX automatic runtime — { jsx, jsxs, Fragment } | | @bext-stack/framework/streaming | Suspense, renderToStream, SUSPENSE_CLIENT_RUNTIME | | @bext-stack/framework/island | island(name, props, fallback) for client-hydrated components | | @bext-stack/framework/client | clientRuntime, clientRuntimeBody (SPA navigation, prefetch, view-transitions) | | @bext-stack/framework/serve | Standalone Bun server (alternative to bext-server's PRISM dispatcher) | | @bext-stack/framework/react | React SSR adapter (peer dep: react, react-dom) | | @bext-stack/framework/solid | Solid SSR adapter (peer dep: solid-js) | | @bext-stack/framework/preact | Preact SSR adapter (peer dep: preact, preact-render-to-string) | | @bext-stack/framework/next/* | Next.js compat shims (next/link, next/image, next/navigation, …) |

Source-form distribution

This package ships TypeScript source files (src/**/*.ts). The intended runtime is bext's PRISM dispatcher, which compiles .ts per request via tsc-rs. Vite, esbuild, Bun, and Deno (with npm: specifiers) all read the source directly. There is no dist/ build — the package has no build step.

For consumers that need pre-compiled JS + .d.ts, run tsc against src/ with your own settings.

Runtime contract

Every component returns a Renderable:

export type Renderable =
  | string
  | number
  | boolean
  | null
  | undefined
  | Promise<Renderable>
  | AsyncIterable<Renderable>
  | Renderable[];

The h() factory (in jsx.ts) returns a string when the entire subtree resolves synchronously, an AsyncIterable<string> as soon as anything async appears in the tree. Hosts iterate the result directly into the HTTP response body — no buffering for streaming use cases.

License

MIT