JSPM

react-multi-captcha

0.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 50
  • Score
    100M100P100Q58036F
  • License MIT

React component supporting Google reCAPTCHA, hCaptcha, and Cloudflare Turnstile

Package Exports

  • react-multi-captcha

Readme

react-multi-captcha

A lightweight React component supporting multiple captcha providers: Google reCAPTCHA, hCaptcha, and Cloudflare Turnstile.

Features

  • Support for Google reCAPTCHA v2, hCaptcha, and Cloudflare Turnstile
  • TypeScript support with full type definitions
  • Ref API for programmatic control (reset, execute, getResponse)
  • Automatic script loading with deduplication
  • Zero runtime dependencies
  • Works with React 18 and React 19

Installation

npm install react-multi-captcha
# or
yarn add react-multi-captcha

Usage

Basic Usage

import { Captcha } from "react-multi-captcha";

function LoginForm() {
  const handleVerify = (token: string) => {
    console.log("Captcha verified:", token);
  };

  return (
    <Captcha
      provider="google"
      siteKey="your-site-key"
      onVerify={handleVerify}
    />
  );
}

With Ref for Programmatic Control

import { useRef } from "react";
import { Captcha, CaptchaRef } from "react-multi-captcha";

function Form() {
  const captchaRef = useRef<CaptchaRef>(null);

  const handleSubmit = async () => {
    // Get current response
    const token = captchaRef.current?.getResponse();

    if (!token) {
      // Execute invisible captcha
      const newToken = await captchaRef.current?.execute();
    }

    // Submit form...
  };

  const handleReset = () => {
    captchaRef.current?.reset();
  };

  return (
    <form onSubmit={handleSubmit}>
      <Captcha
        ref={captchaRef}
        provider="hcaptcha"
        siteKey="your-site-key"
        onVerify={(token) => console.log(token)}
      />
      <button type="button" onClick={handleReset}>
        Reset Captcha
      </button>
      <button type="submit">Submit</button>
    </form>
  );
}

With All Options

import { Captcha } from "react-multi-captcha";

function Form() {
  return (
    <Captcha
      provider="cloudflare"
      siteKey="your-site-key"
      onVerify={(token) => console.log("Verified:", token)}
      onError={(error) => console.error("Error:", error)}
      onExpire={() => console.log("Token expired")}
      onLoad={() => console.log("Captcha loaded")}
      theme="dark"
      size="normal"
      language="pt-BR"
      tabIndex={0}
      className="my-captcha"
      style={{ marginTop: "1rem" }}
    />
  );
}

Props

Prop Type Required Default Description
provider "google" | "hcaptcha" | "cloudflare" Yes - Captcha provider to use
siteKey string Yes - Site key from the captcha provider
onVerify (token: string) => void Yes - Callback when verification succeeds
onError (error: Error) => void No - Callback when an error occurs
onExpire () => void No - Callback when the token expires
onLoad () => void No - Callback when the widget loads
theme "light" | "dark" | "auto" No "light" Widget theme
size "normal" | "compact" | "invisible" No "normal" Widget size
language string No - Language code (e.g., "en", "pt-BR")
tabIndex number No - Tab index for accessibility
className string No - Additional CSS class names
style CSSProperties No - Inline styles for the container

Ref Methods

Method Type Description
reset () => void Reset the captcha widget
execute () => Promise<string> Execute invisible captcha and get token
getResponse () => string | null Get the current response token

Provider-Specific Notes

Google reCAPTCHA

hCaptcha

Cloudflare Turnstile

License

MIT