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

@rarimo/rarime-rn-sdk

v0.3.1

Published

Rarime SDK for integrating React Native applications with Rarimo protocols and services.

Readme

Rarime React Native SDK

React Native integration SDK for the Rarimo protocol, enabling seamless ZK identity verification and passport interaction on iOS and Android.

Powered by the Expo Modules.

Ask DeepWiki


✨ Features

  • Cross-Platform Support – Works natively on both iOS and Android via Expo Modules.
  • Zero-Knowledge Proofs – Efficient client-side generation of ZK proofs (Noir) for identity verification.
  • Passport Interaction – Tools for handling and verifying passport data securely.
  • FreedomTool Integration - Tools for allowing users to submit proposals using FreedomTool.

📦 Installation

Prerequisites

This library includes native code. You generally need to use a Development Build if you are using Expo.

Note: Native code is not used by Expo Web or by iOS/Android simulators that run JS-only. Native modules only apply on real Android and iOS devices. If you plan to test on web or JS-only simulators, native libs will be ignored.

1. Install the package

npm install @rarimo/rarime-rn-sdk

2. Install Polyfills

React Native does not include certain Node.js core modules by default. To ensure compatibility with the Rarime SDK, you need to install polyfills for these modules.

Install the required polyfill packages

npm install crypto-browserify readable-stream buffer react-native-get-random-values react-native-url-polyfill

Import polyfills

Create file polifills.ts and add the following code:

import "react-native-get-random-values";
import "react-native-url-polyfill/auto";
import { Buffer } from "buffer";

global.Buffer = Buffer;

Import this file at the entry point of your application (e.g. App.tsx or index.ts):

import "./polyfills";

Add polyfills to your metro.config.js

config.resolver.extraNodeModules = {
  crypto: require.resolve("crypto-browserify"),
  stream: require.resolve("readable-stream"),
  buffer: require.resolve("buffer"),
};

3. Configuration

For Managed Expo Projects

You need to add our SDK to the expo.plugins array in your app.json or app.config.js file:

{
  "expo": {
    "plugins": ["@rarimo/rarime-rn-sdk"]
  }
}

Note: This step is necessary because the Gradle relies on additional build-time configuration to properly resolve and integrate native Android dependencies.

No extra steps are usually required if you are using the latest Expo SDK. Simply rebuild your development client:

npx expo prebuild
npx expo run:ios
# or
npx expo run:android

For Bare React Native Projects

Ensure you have installed and configured the expo package.

iOS: Run pod install in the ios directory:

cd ios && pod install

🚀 Example Usage

Initialize the SDK

import * from '@rarimo/rarime-rn-sdk';

async () => {
    try {
        /** Generate private key for user */
        const userPrivateKey: string = RarimeUtils.generateBJJPrivateKey();

        /** Setup configuration */
        const rarimeConfiguration: RarimeConfiguration = {
            contractsConfiguration: {
                stateKeeperAddress:
                    '<STATE_KEEPER_CONTRACT_ADDRESS>',
                registerSimpleContractAddress:
                    '<REGISTER_CONTRACT_ADDRESS>',
                poseidonSmtAddress:
                    '<POSEIDON_SMT_ADDRESS>',
            },
            apiConfiguration: {
                jsonRpcEvmUrl: '<JSON_RPC_URL>',
                rarimeApiUrl: '<API_URL>',
            },
            userConfiguration: {
                userPrivateKey,
            },
        };

        /** Setup SDK */
        const rarime = new Rarime(rarimeConfiguration);

        /** Setup passport */
        const passport = new RarimePassport({
                dataGroup1: Uint8Array;
                sod: Uint8Array;
                dataGroup15? : Uint8Array;
                aaSignature? : Uint8Array;
                aaChallenge? : Uint8Array;
            })
        ;

    }
    catch (e) {
        console.error(e);
    }
}

Register identity with SDK

async () => {
  try {
    /**
     * Checks the passport registration status.
     *
     * Possible statuses:
     * - NOT_REGISTERED – the document is not registered.
     * - REGISTERED_WITH_THIS_PK – the document is registered with this user's private key.
     * - REGISTERED_WITH_OTHER_PK – the document is registered with a different user's private key.
     */
    const documentStatus: DocumentStatus = await rarime.getDocumentStatus(
      passport
    );

    /** Light registration
     * Returned hash of register transaction from blockchain
     *
     *  Performs a zero-knowledge proof generation.
     *
     * ⚠️ This is a computationally intensive cryptographic operation.
     * Expected execution time: up to ~5 seconds depending on hardware.
     * Memory usage may be significant (hundreds of MB or more).
     */
    const registerTxHash = await rarime.registerIdentity(passport);
  } catch (e) {
    console.error(e);
  }
};

Query Proof Generation Example

async () => {
  try {
    /**
     * ---------------------------------------------
     *  Query Proof Parameters
     * ---------------------------------------------
     * Replace placeholder values with real data.
     *
     * ⚠️ IMPORTANT:
     * - All values must be valid BigInt-castable strings.
     * - Supplying invalid values will cause proof generation to fail.
     */
    const queryProofParams: QueryProofParams = {
      eventId: "43580365239758335475",
      eventData:
        "270038666511201875208172000617689023489105079510191335498520083214634616239",
      selector: "0",

      // Timestamp boundaries (Unix time, BigInt format)
      timestampLowerbound: "0",
      timestampUpperbound: "0",

      // Identity count range
      identityCountLowerbound: "0",
      identityCountUpperbound: "0",

      // Birthdate range (BigInt-encoded date)
      birthDateLowerbound: "52983525027888",
      birthDateUpperbound: "52983525027888",

      // Expiration date range
      expirationDateLowerbound: "52983525027888",
      expirationDateUpperbound: "52983525027888",

      // Citizenship bitmask filter (0 = disabled)
      citizenshipMask: "0",
    };

    /**
     * ---------------------------------------------
     *  Generate Query Proof
     * ---------------------------------------------
     * Performs a zero-knowledge proof generation using the
     * provided query parameters and the user passport.
     *
     * ⏱ Execution time:
     *    ~1–5 seconds depending on device performance.
     *
     * 🧠 Resource usage:
     *    This operation is cryptographically heavy and may
     *    consume significant CPU and memory during execution.
     */
    const queryProof = await rarime.generateQueryProof(
      queryProofParams,
      passport
    );
  } catch (e) {
    console.error(e);
  }
};

FreedomTool integration

Setup FreedomTool integration

async () => {
  const freedomTool = new FreedomTool({
    contracts: {
      proposalStateAddress: "<PROPOSAL_STATE_CONTRACT_ADDRESS>",
    },
    api: {
      ipfsUrl: "<IPFS_URL>",
      votingRelayerUrl: "<VOTING_RELAYER_URL>",
      votingRpcUrl: "<VOTING_RPC_URL>",
    },
  });
};

Get proposal info example

async () => {
  try {
    //proposalId may be parse from QR-code uri
    const proposalInfo = await freedomtool.getProposalInfo(proposalId);
  } catch (e) {
    console.error(e);
  }
};

Verify that an identity is eligible to vote under this proposal

async () => {
  try {
    /**
     * Throws an error only when the user is not allowed to vote on this proposal.
     *
     * Checks that the proposal has started and not yet ended,
     * verifies that the user's identity is eligible,
     * and confirms passport verification.
     */
    await freedomtool.verify(proposalInfo, passport, rarime);
  } catch (e) {
    console.error(e);
  }
};

Check if the user has already voted

async () => {
  try {
    /**
     * Returns true only if the user has already voted.
     */
    const isVoted = await freedomtool.isAlreadyVoted(proposalInfo, rarime);
  } catch (e) {
    console.error(e);
  }
};

Submitting a vote

async () => {
  try {
    /**
     * Array of answer indices selected by the user for the proposal.
     *
     * Each number corresponds to the index of the chosen option
     * in the proposal's list of possible answers.
     */
    const answers: number[] = [0];

    /**
     * ---------------------------------------------
     *  Submitting a vote
     * ---------------------------------------------
     * Generates a zero-knowledge query proof for submitting a proposal.
     *
     * ⏱ Execution time:
     *    ~1–5 seconds depending on device performance.
     *
     * 🧠 Resource usage:
     *    Query-proof generation is cryptographically heavy
     *    and may require noticeable CPU and memory.
     *
     * 🔁 Returns:
     *    Transaction hash of the submitted vote.
     */
    const submitProposalTxHash = await freedomtool.submitProposal({
      answers,
      proposalInfo,
      rarime,
      passport,
    });
  } catch (e) {
    console.error(e);
  }
};

⚙️ Configuration & Constants

We support two chains:

  • MainNet — for releases and production use
  • TestNet — for development and testing

Note: You can also use your own addresses and resources.


API Addresses

| Name | MainNet Address | TestNet Address | | -------------------- | ----------------------------- | --------------------------------------- | | JSON_RPC_URL | https://l2.rarimo.com | https://rpc.qtestnet.org | | API_URL | https://api.app.rarime.com | https://api.orgs.app.stage.rarime.com | | IPFS_URL | https://ipfs.rarimo.com | https://ipfs.rarimo.com | | VOTING_RELAYER_URL | https://api.freedomtool.org | https://api.stage.freedomtool.org | | FREEDOMTOOL_URL | https://freedomtool.org | https://stage.voting.freedomtool.org/ | | VOTING_RPC_URL | https://l2.rarimo.com | https://rpc.qtestnet.org |


Contract Addresses

| Name | MainNet Address | TestNet Address | | --------------------------------- | -------------------------------------------- | -------------------------------------------- | | STATE_KEEPER_CONTRACT_ADDRESS | 0x61aa5b68D811884dA4FEC2De4a7AA0464df166E1 | 0x12883d5F530AF7EC2adD7cEC29Cf84215efCf4D8 | | REGISTER_CONTRACT_ADDRESS | 0x497D6957729d3a39D43843BD27E6cbD12310F273 | 0x1b6ae4b80F0f26DC53731D1d7aA31fc3996B513B | | POSEIDON_SMT_ADDRESS | 0x479F84502Db545FA8d2275372E0582425204A879 | 0xb8bAac4C443097d697F87CC35C5d6B06dDe64D60 | | PROPOSAL_STATE_CONTRACT_ADDRESS | 0x9C4b84a940C9D3140a1F40859b3d4367DC8d099a | 0x4C61d7454653720DAb9e26Ca25dc7B8a5cf7065b |


🤝 Contributing

Contributions are very welcome! Please follow the guidelines described in the contributing guide.

  1. Fork the repository

  2. Create your feature branch:

    git checkout -b feature/amazing-feature
  3. Commit your changes:

    git commit -m "Add some amazing feature"
  4. Push to the branch:

    git push origin feature/amazing-feature
  5. Open a Pull Request


📝 License

This project is licensed under the MIT License.

💬 Community

We encourage open collaboration — discussions, suggestions, and feedback are always welcome!
Join us in improving the React Native and JavaScript/TypeScript ecosystem around the Rarimo protocol.

Telegram: Join Rarimo Community