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/capacitor-bridge

v0.1.1

Published

Reeve.Mobile substrate — Capacitor wrapper bridge for cross-product mobile apps. Provides useCapacitor() hook, safe-area helpers, native-aware paywall gate, splash bridge, deep-link router, bug-report widget, and Apple compliance pack.

Readme

@meetreeve/capacitor-bridge

Reeve.Mobile substrate — the Capacitor wrapper bridge every Reeve consumer mobile app imports. One package, six entrypoints, zero per-app reinvention.

Tracked in DEV-1387 under the Reeve substrate roadmap DEV-1376.

What it gives you

| Entrypoint | What | |---|---| | @meetreeve/capacitor-bridge/core | Platform detection (isNativePlatform, isIOS, …), safe-area inset reader, splash-screen dismiss. Framework-agnostic. | | @meetreeve/capacitor-bridge/react | <CapacitorProvider>, useCapacitor(), useSafeArea(). | | @meetreeve/capacitor-bridge/paywall | Native-aware paywall gate. Auto-routes to RevenueCat on iOS/Android and Stripe on web. Prevents Apple-review rejection from in-app Stripe Checkout. | | @meetreeve/capacitor-bridge/deeplink | App-URL listener + handler chain for custom-scheme callbacks (Auth0) and universal links (email/iMessage/push). | | @meetreeve/capacitor-bridge/bugreport | TestFlight bug-report submitter — POSTs payload + screenshot + environment to a consumer-configured endpoint. | | @meetreeve/capacitor-bridge/compliance | Apple Privacy Manifest template + canonical Info.plist usage-description catalog (Node-only — used by the scaffold). |

Install

npm install @meetreeve/capacitor-bridge

(Private package — pulled from the org's npm registry. Consumer apps in the MindFortressInc org get it via the standard @meetreeve/ workspace path.)

Quick start (React)

import { CapacitorProvider, useCapacitor } from "@meetreeve/capacitor-bridge/react";

function App() {
  return (
    <CapacitorProvider>
      <YourApp />
    </CapacitorProvider>
  );
}

function YourApp() {
  const { platform, isIOS } = useCapacitor();
  // …
}

Quick start (paywall gate)

import {
  runPaywall,
  registerNativePaywall,
  registerWebPaywall,
  shouldShowWebPaywall,
} from "@meetreeve/capacitor-bridge/paywall";

// At app boot — wire your platform-specific checkouts
registerNativePaywall(async (product) => {
  // Reeve.Commerce DEV-1388 wires RevenueCat here
  return purchaseViaRevenueCat(product);
});

registerWebPaywall(async (product) => {
  // Existing Stripe Checkout redirect
  window.location.href = await getStripeCheckoutUrl(product.webPriceId!);
  return { status: "purchased", sourceChannel: "web_stripe" };
});

// In your paywall UI
if (shouldShowWebPaywall()) {
  // render the Stripe button
}
const result = await runPaywall({ productId: "pro-monthly", webPriceId: "price_xxx" });

Quick start (deep links)

import {
  registerDeepLinkHandler,
  startDeepLinkListener,
} from "@meetreeve/capacitor-bridge/deeplink";

registerDeepLinkHandler(async (link) => {
  if (link.scheme.endsWith(".ios") && link.path === "/callback") {
    await handleAuth0Callback(link.query);
    return true;
  }
  return false;
});

startDeepLinkListener({
  onUnhandled: (link) => router.push(link.path + (link.hash ? `#${link.hash}` : "")),
});

Quick start (bug report)

import { configureBugReport, submitBugReport } from "@meetreeve/capacitor-bridge/bugreport";

configureBugReport({
  endpoint: "https://api.meetfreya.com/me/bug-report",
  headers: async () => ({ Authorization: `Bearer ${await getToken()}` }),
  appVersion: "1.0.0",
  buildNumber: "42",
});

await submitBugReport({ message: "Push notification opened wrong project", userIdentifier: "user-42" });

Architecture notes

  • Zero hard dependencies. Peers React and @capacitor/core are optional — core/ works in any browser-like environment, react/ only loads if React is present, paywall/deeplink/bugreport similarly degrade.
  • SSR-safe. Every entrypoint guards on typeof window === "undefined" and returns sensible defaults (platform: "web", zero insets, no-op dismiss).
  • One-time install. <CapacitorProvider> installs the safe-area CSS vars + data-platform attribute on mount. Idempotent.

Roadmap

| Substrate PR | What | Where it lives | |---|---|---| | PR 1 (this) | core + react + paywall + deeplink + bugreport + compliance pack | This package | | PR 2 | create-reeve-mobile-app cookie-cutter | Sibling packages/create-reeve-mobile-app/ | | PR 3 | reeve-mobile-ci reusable GitHub workflow | .github/workflows/reusable-ios-testflight.yml | | PR 4 | Universal-links Vercel edge fn template | Bridge deeplink/ already covers the JS side; edge fn = separate folder | | PR 5 (this) | Bug-report widget + compliance pack consolidated here | This package |

PR 1 and PR 5 actually land together in this single package — separating them into multiple commits inside one PR.

Consumers

  • Freya iOS (DEV-1390) — first wedge
  • AgentPik mobile (planned, post-Freya validation)
  • Studio mobile (planned)
  • AskClara mobile (planned, requires HIPAA-mode defaults)
  • Reeve Platform v1 mobile (planned)