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

@klyo/react-native

v0.3.5

Published

automated in-app-review

Readme

Klyo React Native SDK

A React Native SDK for integrating Klyo's review collection and feedback system into your mobile applications. The primary focus is to help developers implement in-app review prompts that are strategically timed for maximum user engagement.

Key Features

  • Smart Review Prompts: Show review prompts only when users are most likely to respond positively
  • Automatic User Identification: Device-based user identification with no additional setup required
  • Review Tracking: Track when users submit or dismiss reviews
  • Multi-language Support: English and Arabic support with easy language switching
  • Efficient State Management: Automatically stops tracking events after a user has taken action

Installation

# Install the Klyo SDK
npm install @klyo/react-native

# Install required peer dependencies
npm install @react-native-async-storage/async-storage
npm install react-native-get-random-values
npm install react-native-in-app-review

# For iOS, run pod install
cd ios && pod install && cd ..

Quick Start

Here's the minimum you need to integrate Klyo into your React Native app:

import React from 'react';
import { KlyoProvider, KlyoReviewModal } from '@klyo/react-native';

const apiKey = 'YOUR_API_KEY_HERE';

function App() {
  return (
    <KlyoProvider apiKey={apiKey}>
      <YourApp />
      <KlyoReviewModal />
    </KlyoProvider>
  );
}

Usage with Hooks

The SDK provides hooks to easily check eligibility and show reviews:

import { useKlyoReview } from '@klyo/react-native';

function ReviewButton() {
  const { isEligible, isLoading, showReview, checkEligibility } =
    useKlyoReview();

  // Check eligibility when component mounts (also auto-checks by default)
  useEffect(() => {
    checkEligibility();
  }, []);

  if (!isEligible) return null;

  return (
    <Button title="Rate our app" onPress={showReview} disabled={isLoading} />
  );
}

User Identification

Klyo SDK automatically handles user identification with a device-specific unique identifier. You don't need to provide any user data.

The auto-generated device UID is:

  • Generated once per device
  • Stored in AsyncStorage
  • Persisted across app sessions
  • Used for all tracking and eligibility checks
  • Only cleared when the app is uninstalled or when manually reset

Event Lifecycle

The SDK follows this core principle: Once a user has taken an action (submitted or dismissed a review), the SDK stops initializing to prevent further tracking and prompting. This ensures users aren't repeatedly asked for reviews after they've already made a decision.

For developers who need to test the flow, the regenerateDeviceUID() method resets this state. This method works even when the SDK is not initialized, allowing you to reset user state and test review flows any time, regardless of initialization status.

Language Support

Klyo supports English and Arabic languages for its review prompts:

// Set language at provider level
<KlyoProvider
  apiKey="YOUR_API_KEY_HERE"
  language="ar" // Arabic language
>
  {/* ... */}
</KlyoProvider>

Supported languages:

  • English (en) - default
  • Arabic (ar)

Component Props

KlyoProvider Props

| Prop | Type | Required | Default | Description | | -------- | ------- | -------- | ------- | ----------------------------------------------- | | apiKey | string | Yes | - | Your Klyo API key | | debug | boolean | No | false | Enable debug mode | | language | string | No | 'en' | Language code for review content ('en' or 'ar') |

KlyoReviewModal Props

| Prop | Type | Required | Default | Description | | ---------------------------- | -------- | -------- | --------- | ----------------------------------- | | onSuccess | function | No | - | Callback when review is submitted | | onDismiss | function | No | - | Callback when review is dismissed | | successButtonBackgroundColor | string | No | '#4A80F0' | Background color for success button | | customStyles | object | No | - | Custom styling for modal components |

customStyles Object

| Property | Type | Description | | ----------------- | --------- | --------------------------- | | container | ViewStyle | Modal container style | | modalView | ViewStyle | Modal content view style | | title | TextStyle | Title text style | | description | TextStyle | Description text style | | buttonContainer | ViewStyle | Container for buttons style | | successButton | ViewStyle | Success button style | | successButtonText | TextStyle | Success button text style | | dismissButton | ViewStyle | Dismiss button style | | dismissButtonText | TextStyle | Dismiss button text style | | loadingIndicator | ViewStyle | Loading indicator style |

API Reference

Klyo Singleton

| Method | Parameters | Return | Description | | --------------------- | --------------------------------------------- | --------------- | --------------------------------------------------------------------------------------------------- | | init | apiKey: string, options?: { debug?: boolean } | Promise | Initializes the SDK (called automatically by KlyoProvider) | | setDebugMode | enabled: boolean | void | Enables/disables debug mode | | isDebugModeEnabled | - | boolean | Returns current debug mode status | | setLanguage | language: 'en' | 'ar' | void | Sets the language for review content | | getLanguage | - | 'en' | 'ar' | Gets the current language setting | | regenerateDeviceUID | - | Promise | Resets the device UID and user action status (for testing) - works even when SDK is not initialized | | isInitialized | - | boolean | Checks if the SDK has been initialized |

KlyoContext (useKlyo hook)

| Property | Type | Description | | ---------------- | ---------------------- | ------------------------------------------- | | isInitialized | boolean | Whether the SDK has been initialized | | isUserSet | boolean | Whether a user ID has been set | | userId | string | The current user ID (auto-generated) | | hasReviewed | boolean | Whether the user has already reviewed | | error | string | null | Any error encountered during initialization | | language | 'en' | 'ar' | The current language setting | | checkEligibility | () => Promise | Check if user is eligible for a review |

useKlyoReview Hook

| Property | Type | Description | | ---------------- | ---------------------- | ------------------------------------------------ | | isEligible | boolean | Whether the user is eligible to show a review | | isLoading | boolean | Whether an eligibility check is in progress | | error | string | null | Any error that occurred during eligibility check | | config | object | null | Review configuration from the server | | checkEligibility | () => Promise | Check if the user is eligible for a review | | showReview | () => Promise | Show the review dialog | | dismissReview | () => Promise | Dismiss the review without showing |

Example

Check out the example directory for a complete working example.

License

MIT