---
title: "Shield Widget Modes"
description: "Managed, non-interactive, and invisible — choose how visible verification is, and configure the widget with data attributes."
url: https://edge.network/docs/shield/widget-modes/
---

# Shield Widget Modes

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](https://edge.network/docs/shield/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

[JavaScript API Explicit rendering and SPA integration](https://edge.network/docs/shield/js-api) [Server-Side Validation The siteverify API and humanity score](https://edge.network/docs/shield/siteverify)
[Back to Docs](https://edge.network/docs) [Need help?](https://edge.network/support)
