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

@gurulu/react-native

v0.1.0

Published

Gurulu Analytics React Native bridge — wraps @gurulu/ios-sdk and @gurulu/android-sdk

Readme

@gurulu/react-native-sdk

React Native bridge for the Gurulu Analytics mobile SDKs. This package is a thin wrapper — all analytics logic (network ingest, offline queue, identity, consent) lives in the native SDKs:

Phase 15 B1 introduces this bridge. Real on-device testing is deferred to a machine with the full iOS + Android toolchain (Xcode / xcodebuild / pod install / Android SDK / Gradle / react-native init).

Installation

npm install @gurulu/react-native-sdk
# or
yarn add @gurulu/react-native-sdk

iOS

cd ios && pod install

The bundled GuruluReactNative.podspec depends on React-Core. You must also ensure the host app's Podfile can resolve GuruluSDK (the Phase 14 Swift Package) — either via pod 'GuruluSDK', :path => '../../ios-sdk' or by distributing the ios-sdk as a regular CocoaPod / SPM dependency.

Android

Autolinking picks up GuruluRNPackage. The module depends on the Phase 14 B2 :android-sdk Gradle module; make sure your root settings.gradle includes that project:

include ':android-sdk'
project(':android-sdk').projectDir = file('../../android-sdk')

Expo

This package ships native modules, so it cannot run inside Expo Go. Use an EAS development build:

eas build --profile development --platform ios

Usage

import GuruluRN from '@gurulu/react-native-sdk';

await GuruluRN.initialize({
  siteId: 'abc123',
  token: 'sdk-token',
  endpoint: 'https://ingest.gurulu.io/v1/ingest',
  flushIntervalSec: 30,
  batchSize: 50,
  debug: __DEV__,
});

GuruluRN.setConsent('accepted');
GuruluRN.identify('user-42', { plan: 'pro' });
GuruluRN.track('button_click', { cta: 'subscribe' });
GuruluRN.trackScreen('Home');

await GuruluRN.flush();

Screen tracking

The bridge exposes a convenience helper GuruluRN.trackScreen(name) which emits a $screen event. Wire it up to React Navigation via useFocusEffect:

import { useFocusEffect } from '@react-navigation/native';
import GuruluRN from '@gurulu/react-native-sdk';

export function HomeScreen() {
  useFocusEffect(
    React.useCallback(() => {
      GuruluRN.trackScreen('Home');
    }, []),
  );
  return <View />;
}

API

| Method | Description | | --- | --- | | initialize(config) | Configures the underlying native SDK. Idempotent. | | track(name, props?) | Enqueue a custom event. | | identify(userId, traits?) | Bind a user identity. | | setConsent('pending' \| 'accepted' \| 'rejected') | Update consent level. | | reset() | Clear identity + queued events (logout). | | flush() | Force immediate flush of queued events. | | trackScreen(name, props?) | Emit a $screen event. |

Status

| Layer | Status | | --- | --- | | TypeScript API surface | Shipped (Phase 15 B1) | | iOS Swift bridge | Shipped (not yet verified on a real device) | | Android Kotlin bridge | Shipped (not yet verified on a real device) | | Network ingest end-to-end | Pending Phase 14 on-device validation |

Phase 15 B3 will add mobile disk persistence and Phase 15 B4 adds a context-aware bootstrap.