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

react-native-simple-biometrics

v3.1.0

Published

simple interface to verify user authenticity using on-device biometrics

Readme

React Native Simple Biometrics

npm

Overview

React Native Simple Biometrics is a straightforward and minimalistic React Native package designed to provide developers with an API for implementing user authentication using on-device biometrics. This library facilitates the quick verification of the app's user, ensuring that sensitive information is only accessible to authorized individuals, such as the phone owner or a trustee.

demo

Installation

# Using npm
$ npm install react-native-simple-biometrics

# Using Yarn
$ yarn add react-native-simple-biometrics

Important: Version 3+ of this library requires React Native's New Architecture (Fabric/TurboModules). If you're using React Native's Old Architecture, please use version 2 or below:

# For Old Architecture (React Native < 0.68 or without New Architecture enabled)
$ npm install react-native-simple-biometrics@^2.0.0

# or
$ yarn add react-native-simple-biometrics@^2.0.0

Minimum Requirements

  • iOS target: 10.0
  • Android minSdkVersion: 21

iOS Permission

To utilize the Face ID system on iOS devices, it is mandatory to include an entry in your iOS app's info.plist, explaining the valid reason for using biometrics:

<key>NSFaceIDUsageDescription</key>
<string>a valid reason to use biometrics</string>

When you call the authenticate function, iOS users will be automatically prompted for permission. For more granular control over when to request permissions, you can utilize the react-native-permissions package.

Usage

React Native Simple Biometrics offers two main methods:

  1. canAuthenticate(options?: Options): Checks whether the device supports biometric authentication. Returns true if the hardware is available or if permission for Face ID (iOS) was granted.

Parameters

  • options (optional): An object containing configuration options
    • allowDeviceCredentials (boolean, default: true): Whether to allow device credentials (passcode/password) as a fallback when biometric authentication is not available

Return Value

Returns a Promise that resolves to:

  • true if authentication is possible with the specified options
  • false if authentication is not possible
  1. requestBioAuth(...): Initiates the biometric authentication process, displaying a user-friendly prompt with the specified title and message. This function can be used for user authentication.

It can be called with a single object (recommended):

await RNBiometrics.requestBioAuth({
  promptTitle: 'prompt-title',
  promptMessage: 'prompt-message',
  cancelLabel: 'Cancel', // optional, Android only, default 'Cancel'
  allowDeviceCredentials: false, // optional, default true
});

or with positional arguments (deprecated):

await RNBiometrics.requestBioAuth('prompt-title', 'prompt-message', {
  cancelLabel: 'Cancel', // optional, Android only, default 'Cancel'
  allowDeviceCredentials: false, // optional, default true
});

Parameters

  • promptTitle (string): The title displayed in the authentication dialog Must be a non-empty string Throws an error if not provided or empty
  • promptMessage (string): The subtitle/reason for requesting authentication Must be a non-empty string Throws an error if not provided or empty Displays in the authentication dialog to explain why authentication is needed

Optional Parameters

  • allowDeviceCredentials (boolean, default: true): Whether to allow device credentials (passcode/password) as a fallback when biometric authentication is not available
  • cancelLabel (string, default: 'Cancel', Android only): Label for the cancel button on the authentication prompt

Return Value

Returns a Promise that:

  • Resolves to true when authentication is successful
  • Rejects with an error when authentication fails or is cancelled

Here's a code snippet demonstrating how to use these methods:

import RNBiometrics from 'react-native-simple-biometrics';

// Check if biometric authentication is available, will fallback to device passcode by default if not
const can = await RNBiometrics.canAuthenticate();

if (can) {
  try {
    await RNBiometrics.requestBioAuth('prompt-title', 'prompt-message');
    // Code to execute when authenticated
    // ...
  } catch (error) {
    // Code to handle authentication failure
    // ...
  }
}

Key Generation & Signatures

In addition to simple authentication, the library can generate a biometric-protected key pair and sign payloads with it. The private key is stored in the iOS Secure Enclave or Android Keystore and can only be used after the user passes biometric authentication.

| Method | Description | | --- | --- | | createKeys(options?) | Generates a new key pair. Rejects if a key with the given name already exists. | | biometricKeysExist(options?) | Checks whether a key pair exists. | | deleteKeys(options?) | Deletes a key pair. Resolves true if a key was deleted, false otherwise. | | createSignature(payload, options?) | Signs a UTF-8 string payload with the private key, prompting for biometric authentication. |

Algorithms and server verification

Both platforms return Base64-encoded DER SubjectPublicKeyInfo (SPKI) public keys and hash the UTF-8 payload with SHA-256. Both use P-256 keys and ECDSA signatures encoded as an ASN.1 DER sequence of r and s. Base64 values contain no line breaks. iOS keys are stored in Secure Enclave. Android hardware backing depends on the device.

createKeys(options?)

Returns a Promise<BiometricKey> that resolves to:

  • keyName (string): The identifier for this key pair.
  • publicKey (string): Base64-encoded public key (X.509/SPKI).
  • algorithm (string): The key algorithm: "EC" (P-256) on both platforms.

Parameters:

  • options (optional): An object containing configuration options
    • keyName (string, default: "default"): Identifier for the key pair. Use a distinct name to hold multiple keys for different purposes.

createSignature(payload, options?)

Returns a Promise<Signature> that resolves to:

  • keyName (string): The identifier for the key pair used to sign.
  • publicKey (string): Base64-encoded SPKI public key, included for convenience. For authentication, the server must verify against the public key stored during registration, not trust a key supplied with each request.
  • signature (string): Base64-encoded signature over the payload.

Required Parameters:

  • payload (string): The UTF-8 string to sign. The payload is hashed (SHA-256) internally.

Optional Parameters:

  • options (object, optional): Configuration options
    • keyName (string, default: "default"): Identifier for the key pair used to sign.
    • promptMessage (string, default: "Authenticate to sign"): Reason shown in the biometric prompt.
import RNBiometrics from 'react-native-simple-biometrics';

// Generate a biometric-protected key pair
const { publicKey } = await RNBiometrics.createKeys();

// Sign a payload (prompts for biometric authentication)
const { signature } = await RNBiometrics.createSignature('nonce-123', {
  promptMessage: 'Sign in to your account',
});

// Verify on your server using the public key and signature

// Clean up when no longer needed
await RNBiometrics.deleteKeys();

Contributing

Credits

React Native Simple Biometrics is a simplified version of react-native-biometrics.

Made with create-react-native-library