Edge

Shield

Widget Modes

All three modes run the same verification pipeline — the only difference is what the visitor sees. No mode ever shows a puzzle.

Managed

Recommended

Verification is invisible for real users. If the humanity score of a background attempt is low, the widget escalates: it shows a single "I am human" confirmation, and the click triggers a harder proof-of-work challenge. Most visitors never see it.

Best for: signup, login, and checkout forms — anywhere you want maximum protection with a human fallback.

Non-Interactive

Background verification with a small status badge ("Verifying… / Verified") so visitors can see protection is active. Never asks for input — traffic that fails simply doesn't receive a token.

Best for: contact forms and comment boxes where a visible trust signal is useful.

Invisible

No visible widget at all. Verification runs on page load, or on demand via the JS API (edgeShield.execute()). Because there is no visible element, there is no interactive escalation — low-scoring traffic fails silently.

Best for: seamless UX on login pages and SPAs where you handle low scores server-side.

Setting the Mode

The mode is configured per widget in the dashboard (Shield → widget → Settings) and takes effect on the next challenge issued — no redeploy needed. You can also override it per-placement with data-mode:

<!-- Set per-widget in the dashboard, or override per-placement -->
<div class="edge-shield" data-sitekey="es_..." data-mode="invisible"></div>

Data Attribute Reference

Attribute Default Description
data-sitekey required The widget's public sitekey
data-mode managed managed, non-interactive, or invisible
data-callback Global function name called with the token on success
data-error-callback Global function name called with an error string
data-expired-callback Called when a token expires (the widget auto-refreshes afterwards)
data-input-name edge-shield-response Name of the hidden form input the token is written to
data-compat Set to turnstile to also populate a cf-turnstile-response input

Next Steps