Embed the widget
Learn how to add the Turnstile widget to your webpage using implicit or explicit rendering methods.
Before you begin, you must have:
- A Cloudflare account
- A Turnstile widget with a sitekey
- Access to edit your website's HTML
- Basic knowledge of HTML and JavaScript
- Page load: The Turnstile script loads and scans for elements or waits for programmatic calls.
- Widget rendering: Widgets are created and begin running challenges.
- Token generation: When a challenge is completed, a token is generated.
- Form integration: The token is made available via callbacks or hidden form fields.
- Server validation: Your server receives the token and validates it using the Siteverify API.
Implicit rendering automatically scans your HTML for elements with the cf-turnstile
class and renders widgets when the page loads.
Cloudflare recommends using implicit rendering on the following scenarios:
- You have simple implementations and want a quick integration.
- You have static websites with straightforward forms.
- You want widgets to appear immediately on pageload.
- You do not need programmatic control of the widget.
Add the Turnstile JavaScript API to your HTML.
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
Add widget containers where you want the challenges to appear on your website.
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
Customize your widgets using data attributes.
<div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>" data-theme="light" data-size="normal" data-callback="onSuccess"></div>
Basic login form
<!DOCTYPE html><html><head> <title>Login Form</title> <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script></head><body> <form action="/login" method="POST"> <input type="text" name="username" placeholder="Username" required /> <input type="password" name="password" placeholder="Password" required />
<!-- Turnstile widget with basic configuration --> <div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div> <button type="submit">Log in</button> </form>
</body></html>