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

@meetreeve/billing-kit

v0.1.0

Published

Shared Reeve.Commerce pricing table + paywall/upgrade primitives — catalog-driven <PricingTable/> and <UpgradePaywall/>, plus an AutoCheckout post-login/return resume helper. Companion to reeve-services' commerce catalog SSOT (DEV-1785) and Entitlements.m

Readme

@meetreeve/billing-kit

Shared Reeve.Commerce pricing surfaces (DEV-1786): a catalog-driven <PricingTable />, a <UpgradePaywall /> that resolves the unlocking tier for a gated feature client-side, and an <AutoCheckout /> post-login/return resume helper. Every app currently hand-builds these two surfaces (tier cards, credit-pack cards, a paywall modal) from its own hardcoded plan constants — this package renders straight from the injected commerce catalog (GET /api/v2/commerce/catalog/{host_app}) instead.

Workspace-local (workspace:*) — not published to npm. See pnpm-workspace.yaml.

Design

  • Data is injected, not fetched. Every component takes a catalog prop. Callers own the getCatalog(hostApp) call (RSC or client) — this keeps the package portable to any consumer app and means a price/bullet edit in the reeve-services catalog SSOT changes the rendered page with zero FE deploy.
  • Checkout is injected, not hardcoded. onSelectPlan / onBuyPack / onUpgrade handlers are passed in — each app wires its own Stripe-checkout client (startStudioCheckout, startReeveCreditPurchase, ...). The package never imports an app-local API client.
  • Marketing copy stays app-side. PricingTable's presentation prop is a per-plan-id overlay (badge/tagline/className) — the plan's factual data (price, credits, feature bullets) always comes from the catalog.
  • UpgradePaywall never dead-ends. It resolves the lowest-tier plan whose feature_limits[featureKey] is non-zero (mirrors reeve-services' Entitlements.min_tier_for); if no tier unlocks the feature (or the user is already on the top tier), the CTA still fires onUpgrade with a concrete plan so the caller can route somewhere useful — never a disabled button.

Extending (DEV-1787 and beyond)

The barrel (src/index.ts) is flat and extension-friendly by design — this package has one React-only surface, unlike @meetreeve/auth's core/react/nextjs split. To add a component:

  1. Add src/<Component>.tsx (+ src/<Component>.test.tsx).
  2. Re-export it from src/index.ts.
  3. If it needs new shared types, add them to src/types.ts (catalog mirrors) or a new file — re-export from the barrel either way.

tsup.config.ts has a single index entry, so no build config changes are needed for a new component. vitest.config.ts picks up any src/**/*.test.{ts,tsx} automatically.