---
description: The new Capacitor Biometrics plugin allows you to request biometric authentication, such as using face recognition or fingerprint recognition, on the device.
title: Capacitor Biometrics Plugin: Face & Fingerprint - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/announcing-the-capacitor-biometrics-plugin.png
---

<!doctype html> 

[Skip to content ](#capacitor-biometrics-plugin-face-fingerprint) 

[🖥️ Introducing the **Capacitor Electron Platform** — build desktop apps for macOS, Windows, and Linux. Free & open source. ](/blog/announcing-the-capacitor-electron-platform/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ FAQ ](#faq)
* [ Conclusion ](#conclusion)

* Related links

# Capacitor Biometrics Plugin: Face & Fingerprint[¶](#capacitor-biometrics-plugin-face-fingerprint "Permanent link")

Adding Face ID or fingerprint login to a Capacitor app? The [Capacitor Biometrics plugin](/docs/sdks/capacitor/biometrics/) lets you request **biometric authentication** (Face ID, fingerprint) and device credentials (PIN, pattern, password) on Android and iOS through a single API. It's available to all Capawesome [Insiders](/docs/insiders/).

Let's take a quick look at the [API](/docs/sdks/capacitor/biometrics/#api) and how to use the plugin in your Capacitor app.

## Bonus: Video Tutorial and Demo App[¶](#bonus-video-tutorial-and-demo-app "Permanent link")

We created a **step-by-step video tutorial** that walks through installing the plugin, configuring iOS Face ID permissions, organizing your biometrics logic in a small helper module, triggering authentication from the app UI, and handling success and error states.

* **[Capacitor Biometrics Demo App](https://github.com/capawesome-team/capacitor-biometrics-demo)** — A minimal, framework-agnostic demo (vanilla JavaScript and Capacitor) with a complete biometric authentication flow using Face ID or fingerprint.

## Installation[¶](#installation "Permanent link")

To install the Capacitor Biometrics plugin, please refer to the [Installation](/docs/sdks/capacitor/biometrics/#installation) section in the plugin documentation.

## Usage[¶](#usage "Permanent link")

Let's take a look at the basic usage of the plugin. You can find the complete API reference in the [API](/docs/sdks/capacitor/biometrics/#api) section of the documentation. The plugin supports both **biometric authentication** and **device credential authentication**. Biometric authentication uses the device's biometric capabilities, such as fingerprint or face recognition, while device credential authentication uses the device's lock screen PIN, pattern, or password.

### Biometric Authentication[¶](#biometric-authentication "Permanent link")

The most important method of the plugin is [authenticate()](/docs/sdks/capacitor/biometrics/#authenticate), which allows you to request biometric authentication from the user. You can customize the authentication prompt with various options, such as the title, subtitle, and button text:

`[](#%5F%5Fcodelineno-0-1)import { Biometrics, ErrorCode } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)
[](#%5F%5Fcodelineno-0-4)const authenticate = async () => {
[](#%5F%5Fcodelineno-0-5)  try {
[](#%5F%5Fcodelineno-0-6)    await Biometrics.authenticate({
[](#%5F%5Fcodelineno-0-7)      title: 'Authentication Required',
[](#%5F%5Fcodelineno-0-8)      subtitle: 'Please authenticate to continue',
[](#%5F%5Fcodelineno-0-9)      cancelButtonText: 'Cancel',
[](#%5F%5Fcodelineno-0-10)      iosFallbackButtonText: 'Use Passcode',
[](#%5F%5Fcodelineno-0-11)    });
[](#%5F%5Fcodelineno-0-12)  } catch (error) {
[](#%5F%5Fcodelineno-0-13)    if (error.code === ErrorCode.USER_CANCELED) {
[](#%5F%5Fcodelineno-0-14)      console.log('User canceled the authentication.');
[](#%5F%5Fcodelineno-0-15)    } else if (error.code === ErrorCode.NOT_ENROLLED) {
[](#%5F%5Fcodelineno-0-16)      console.log('No biometric authentication enrolled.');
[](#%5F%5Fcodelineno-0-17)    } else if (error.code === ErrorCode.NOT_AVAILABLE) {
[](#%5F%5Fcodelineno-0-18)      console.log('Biometric authentication not available.');
[](#%5F%5Fcodelineno-0-19)    } else {
[](#%5F%5Fcodelineno-0-20)      console.log('Another error occurred:', error);
[](#%5F%5Fcodelineno-0-21)    }
[](#%5F%5Fcodelineno-0-22)  }
[](#%5F%5Fcodelineno-0-23)};
`

The method returns a promise that resolves when the user successfully authenticates or rejects with an error if the user cancels the authentication or if there is an error during the authentication process. You can handle the error using the `catch` block, where you can check the error code to determine the reason for the failure. The error codes are defined in the `ErrorCode` enum.

In most cases, you will also want to use the [isEnrolled()](/docs/sdks/capacitor/biometrics/#isenrolled) method to check whether the device supports biometric authentication at all and whether the user has set it up:

`[](#%5F%5Fcodelineno-1-1)import { Biometrics } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-1-2)
[](#%5F%5Fcodelineno-1-3)const isEnrolled = async () => {
[](#%5F%5Fcodelineno-1-4)  const result = await Biometrics.isEnrolled();
[](#%5F%5Fcodelineno-1-5)  if (result.isEnrolled) {
[](#%5F%5Fcodelineno-1-6)    console.log('Biometric authentication is enrolled.');
[](#%5F%5Fcodelineno-1-7)  } else {
[](#%5F%5Fcodelineno-1-8)    console.log('No biometric authentication enrolled.');
[](#%5F%5Fcodelineno-1-9)  }
[](#%5F%5Fcodelineno-1-10)};
`

It's recommended to call this method before calling [authenticate()](/docs/sdks/capacitor/biometrics/#authenticate) to ensure that the user has set up biometric authentication on their device.

### Device Credential Authentication[¶](#device-credential-authentication "Permanent link")

In addition to biometric authentication, the plugin also supports device credential authentication using the [authenticate()](/docs/sdks/capacitor/biometrics/#authenticate) method. For this, you need to set the `allowDeviceCredential` option to `true` when calling the method:

`[](#%5F%5Fcodelineno-2-1)import { Biometrics } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-2-2)
[](#%5F%5Fcodelineno-2-3)const authenticate = async () => {
[](#%5F%5Fcodelineno-2-4)    await Biometrics.authenticate({
[](#%5F%5Fcodelineno-2-5)      allowDeviceCredential: true,
[](#%5F%5Fcodelineno-2-6)    });
[](#%5F%5Fcodelineno-2-7)};
`

This will show the device's lock screen PIN, pattern, or password prompt if biometric authentication is not available or not enrolled. You can also use the [hasDeviceCredential()](/docs/sdks/capacitor/biometrics/#hasdevicecredential) method to check whether the device supports device credential authentication:

`[](#%5F%5Fcodelineno-3-1)import { Biometrics } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-3-2)
[](#%5F%5Fcodelineno-3-3)const hasDeviceCredential = async () => {
[](#%5F%5Fcodelineno-3-4)  const { hasDeviceCredential } = await Biometrics.hasDeviceCredential();
[](#%5F%5Fcodelineno-3-5)  return hasDeviceCredential;
[](#%5F%5Fcodelineno-3-6)};
`

## FAQ[¶](#faq "Permanent link")

### Which platforms does the Capacitor Biometrics plugin support?[¶](#which-platforms-does-the-capacitor-biometrics-plugin-support "Permanent link")

The plugin supports Android and iOS through a single API for both biometric and device-credential authentication.

### How do I check whether biometrics are set up before prompting?[¶](#how-do-i-check-whether-biometrics-are-set-up-before-prompting "Permanent link")

Call `isEnrolled()` first. It tells you whether the device supports biometric authentication and whether the user has enrolled it, so you can decide whether to show the prompt or fall back to another method.

### Can users authenticate with a PIN or passcode instead of biometrics?[¶](#can-users-authenticate-with-a-pin-or-passcode-instead-of-biometrics "Permanent link")

Yes. Pass `allowDeviceCredential: true` to `authenticate()` to allow the device's lock-screen PIN, pattern, or password, and use `hasDeviceCredential()` to check whether the device supports it.

### How do I handle the user canceling the prompt?[¶](#how-do-i-handle-the-user-canceling-the-prompt "Permanent link")

`authenticate()` rejects with a typed `ErrorCode` — such as `USER_CANCELED`, `NOT_ENROLLED`, or `NOT_AVAILABLE` — so you can branch on the exact reason in your `catch` block.

## Conclusion[¶](#conclusion "Permanent link")

The [Capacitor Biometrics plugin](/docs/sdks/capacitor/biometrics/) gives you Face ID, fingerprint, and device-credential authentication behind one API on Android and iOS. Check the [API Reference](/docs/sdks/capacitor/biometrics/#api) for the full surface area.

**Related reading:**

* [Exploring the Capacitor Biometrics API](/blog/exploring-the-capacitor-biometrics-api/)
* [How to Securely Store Credentials with Capacitor](/blog/how-to-securely-store-credentials-with-capacitor/)
* [Alternative to the Ionic Identity Vault plugin](/blog/alternative-to-ionic-identity-vault-plugin/)

**Missing a feature?** [Create a feature request](https://github.com/capawesome-team/capacitor-plugins/issues/new/choose) in our [GitHub repository](https://github.com/capawesome-team/capacitor-plugins).

Join the Capawesome [Discord](https://discord.gg/VCXxSVjefW) server for questions and subscribe to the Capawesome [newsletter](https://capawesome.io/newsletter/) to stay updated.

July 16, 2026 

Back to top

```json
{
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Capacitor Biometrics Plugin: Face \u0026 Fingerprint",
      "description": "The new Capacitor Biometrics plugin allows you to request biometric authentication, such as using face recognition or fingerprint recognition, on the device.",
      "image": "https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png",
      "datePublished": "2025-05-01T00:00:00+00:00",
      "dateModified": "2026-07-10T00:00:00+00:00",
      "author": [
        {
          "@type": "Person",
          "name": "Robin Genz",
          "url": "https://github.com/robingenz"
        }
      ],
      "publisher": {
        "@type": "Organization",
        "name": "Capawesome",
        "url": "https://capawesome.io",
        "logo": {
          "@type": "ImageObject",
          "url": "https://capawesome.io/assets/images/logo.svg"
        }
      },
      "articleSection": "Announcements",
      "keywords": ["Announcements", "Capacitor", "SDKs"],
      "isPartOf": {
        "@type": "Blog",
        "@id": "https://capawesome.io/blog/#blog"
      },
      "mainEntityOfPage": "https://capawesome.io/blog/announcing-the-capacitor-biometrics-plugin/",
      "url": "https://capawesome.io/blog/announcing-the-capacitor-biometrics-plugin/"
    }
{
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://capawesome.io/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Blog",
          "item": "https://capawesome.io/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Capacitor Biometrics Plugin: Face \u0026 Fingerprint",
          "item": "https://capawesome.io/blog/announcing-the-capacitor-biometrics-plugin/"
        }
      ]
    }
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Which platforms does the Capacitor Biometrics plugin support?", "acceptedAnswer": {"@type": "Answer", "text": "The plugin supports Android and iOS through a single API for both biometric and device-credential authentication."}}, {"@type": "Question", "name": "How do I check whether biometrics are set up before prompting?", "acceptedAnswer": {"@type": "Answer", "text": "Call isEnrolled() first. It tells you whether the device supports biometric authentication and whether the user has enrolled it, so you can decide whether to show the prompt or fall back to another method."}}, {"@type": "Question", "name": "Can users authenticate with a PIN or passcode instead of biometrics?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. Pass allowDeviceCredential: true to authenticate() to allow the device's lock-screen PIN, pattern, or password, and use hasDeviceCredential() to check whether the device supports it."}}, {"@type": "Question", "name": "How do I handle the user canceling the prompt?", "acceptedAnswer": {"@type": "Answer", "text": "authenticate() rejects with a typed ErrorCode — such as USER_CANCELED, NOT_ENROLLED, or NOT_AVAILABLE — so you can branch on the exact reason in your catch block."}}], "url": "https://capawesome.io/blog/announcing-the-capacitor-biometrics-plugin/"}
```
