Zero friction. Invisible to users.

Invisible CAPTCHA for .NET

Protect your forms from bots without puzzles, third-party scripts, or GDPR headaches. HMAC-based integrity verification — all inside your own infrastructure.

dotnet add package CWaptcha
Three lines of server code. That's it.
~14s
Average time users spend solving a reCAPTCHA puzzle
29%
Of users abandon forms when a CAPTCHA challenge appears
0s
Time CWaptcha adds to your user's experience

How it works

Three steps. All server-side. Users never see or interact with anything.

01

Server mints a nonce

On page load your server generates a one-time nonce + field salt, stores them with a TTL, and returns a signed token to the browser.

02

Browser computes HMAC

On form submit, cwaptcha.js canonicalises the form fields and computes an HMAC-SHA256 in the browser using SubtleCrypto. No puzzle. No interaction.

03

Server validates

Your server recomputes the HMAC, verifies the token signature, checks the honeypot, and marks the nonce as used. Bad requests are rejected before your handler runs.

Why developers choose CWaptcha

🔒

Invisible to users

No puzzles, no "click all the traffic lights", no accessibility complaints. Conversion rates stay intact.

🇪🇺

GDPR-safe by design

No data leaves your infrastructure. No third-party cookies. No DPA with Google or Cloudflare required.

🔑

Cryptographically sound

HMAC-SHA256 integrity, constant-time comparison, one-time nonces, and honeypot — same threat model as paid alternatives.

🌐

No vendor dependency

Fully self-hosted. If Google's CAPTCHA goes down your forms keep working. No third-party SLA risk.

📦

Drop-in NuGet package

One package, two lines of registration. Works with Razor Pages, MVC, Umbraco Surface Controllers, and Minimal APIs.

🏗️

Multi-node ready

Built-in distributed nonce store via IDistributedCache. Works with Redis, SQL Server, or any provider.

Up and running in minutes

Three steps from zero to protected forms.

STEP 1 — INSTALL
dotnet add package CWaptcha
STEP 2 — REGISTER (Program.cs)
builder.Services.AddCWaptcha(builder.Configuration.GetSection("CWaptcha"));
// ...
app.UseCWaptcha();
STEP 3 — PROTECT YOUR FORM
<form method="post" data-cwaptcha>
    <input name="Name" required />
    <button type="submit">Send</button>
</form>
<script src="/cwaptcha/cwaptcha.js" data-honeypot="cw_hp_email"></script>

Built for the .NET ecosystem

CWaptcha targets the platforms where invisible, self-hosted CAPTCHA matters most.

Umbraco 13+ ASP.NET Core Razor Pages MVC Controllers Umbraco Surface Controllers Minimal APIs Multi-node / Load-balanced

Ready to protect your forms?

Answer four questions and get a tailored integration guide for your exact stack.

Start integration wizard →