TL;DR. Self-hosted protection is having its moment: Cap has 8,013 GitHub stars after 21 months, ALTCHA’s npm packages are downloaded 1.49 million times a month, Anubis collected 23,427 stars in a year and a half. Every one of these tools runs on your server and keeps your users’ data at home. Every one of them also shares the same limit: a proof-of-work CAPTCHA proves that a browser spent some CPU, and nothing else. It cannot tell a new spammer from a new customer, and it does nothing against a person who types the spam by hand. Self-hosted anti-spam needs the one thing a single server cannot produce – a reputation database fed by many sites – and a way to keep it updated without sending request data anywhere. That is what CleanTalk Self-Hosted is built for.
Why self-hosted is growing
Three things happened at once. GDPR made every cloud call a data-processing question, and in Germany the Munich court’s Google Fonts decision (LG Munchen I, 20.01.2022, 3 O 17493/20) turned “we send the visitor’s IP to a US service” into a compensation claim. Google made reCAPTCHA a paid product for larger sites. And the AI-crawler wave of 2025-2026 pushed site owners to block bots at their own edge instead of trusting a vendor.
The result is visible in the numbers:
| Project | What it is | GitHub stars | Downloads |
| Anubis (https://github.com/TecharoHQ/anubis) | self-hosted proxy that stops AI crawlers with proof-of-work | 23,427 (created March 2025) | – |
| Cap (https://github.com/tiagozip/cap) | self-hosted CAPTCHA, proof-of-work | 8,013 (created January 2025) | npm: 225,134 / month |
| ALTCHA (https://github.com/altcha-org/altcha) | self-hosted CAPTCHA, proof-of-work | 2,828 | npm: 1,491,476 / month; Packagist: 335,847 / month |
| mCaptcha (https://github.com/mCaptcha/mCaptcha) | self-hosted CAPTCHA, proof-of-work | 2,491 | Docker Hub: 217,209 pulls |
| mosparo (https://github.com/mosparo/mosparo) | self-hosted form spam filter, rule-based | 309 | Docker Hub: 72,877 pulls |
For comparison, awesome-selfhosted (https://github.com/awesome-selfhosted/awesome-selfhosted), the catalog of software you can run yourself, has 326,830 stars – and lists exactly one spam filter for web forms. The demand is real, and the shelf is almost empty.
What a proof-of-work CAPTCHA actually checks
Cap, ALTCHA, mCaptcha and Friendly Captcha share one mechanism. The page gives the browser a small cryptographic puzzle; the browser solves it in the background; the solution is sent with the form. A visitor sees nothing, a script that does not run JavaScript fails. That is the whole check.
It is a good check against the dumbest bots, and it has real advantages: no third-party scripts, no tracking, no cookies, full data sovereignty. Cap describes itself as “zero telemetry, no third-party network”; ALTCHA as “no data leaving your control”. That is exactly the point – and exactly the limit. A system that knows nothing about the sender cannot judge the sender.
What it does not check:
- Who is sending. An email address that was used for spam on 400 other sites yesterday solves the puzzle just like a first-time customer.
- Where the request comes from. An IP address that is a known spam source passes if the browser does the work.
- What is being sent. The message text, the links in it, the pattern of the submission are not part of a proof-of-work check.
- Human spam. A person with a browser solves the puzzle by doing nothing. SEO pitches, link drops, fake listings and fake reviews are typed by people, and a CAPTCHA was never designed to stop them.
- Headless browsers. A bot that runs a real browser engine computes the proof-of-work like any visitor; the challenge costs it a few milliseconds of CPU.
mosparo takes a different route: it checks the submitted data, IP and User-Agent against rules on your server, without any cloud. It catches more than a puzzle does, but the rules are the ones you write or import, and nobody updates them for you.
What self-hosted anti-spam needs
Put the two halves together and the requirement is clear. On-prem spam protection needs:
- A reputation database. Email and IP reputation collected across many sites is the signal that separates a spammer from a stranger. No single site can build it, because a spammer’s second visit to your site is already too late – you needed to know about their first visit somewhere else.
- Updates that come in without data going out. The database ages by the hour. The instance has to receive signed, incremental updates on a schedule, through a proxy or an offline bundle – and never send request data back.
- Content and behavior analysis. Message text, links, timing, JavaScript signals, headers, submission rate – the layers that catch human spam and headless bots.
- A verdict with a reason. “Forbidden. Sender blacklisted” is actionable; “challenge failed” is not. Logs, allow and block lists and per-tenant keys belong on the same server.
- A familiar API. If the on-prem instance speaks the same protocol as the cloud, the existing SDKs and CMS plugins work by changing one URL.
This is the gap in the current market. Self-hosted CAPTCHAs have item 2 solved trivially – there is no data to update – and items 1, 3 and 4 missing by design. Enterprise bot-management services have items 1, 3 and 4 and are cloud-only: DataDome’s entry plan is $3,830 per month, and the deployment is SaaS. Friendly Captcha sells “dedicated data centers (e.g. EU only)” from 200 EUR per month and a “self-hosted endpoint option” only in its custom Enterprise plan. ALTCHA Sentinel, the self-hosted edition of ALTCHA, costs 99 to 799 EUR per month – for a proof-of-work server with a dashboard, not for data.
How CleanTalk Self-Hosted works
CleanTalk Self-Hosted is the CleanTalk cloud engine packaged to run inside your infrastructure.
- One Docker image – API, dashboard, database. It runs on a VPS, in Kubernetes or in a private cloud. For teams that prefer not to run anything, the same engine is available as a dedicated instance in an EU data center, used only by you.
- The reputation database inside the instance – 8,600,000+ spam IPs and emails, the same data that protects 200,000+ CleanTalk-powered websites, delivered in hashed form and licensed for use inside your instance.
- Signed daily updates – the instance pulls incremental updates of the database and detection logic. That is the only outbound traffic, and it can go through your proxy or arrive as an offline bundle for air-gapped systems.
- The same API as CleanTalk Cloud – the official SDKs for PHP, Python, Node.js, Go and .NET and the WordPress, Laravel, Drupal and Joomla integrations work with the on-prem endpoint by changing one URL.
- Verdicts in milliseconds – a local lookup plus analysis, no round trip to a vendor, no per-request fees, unlimited sites and requests per instance.
- Built for platforms – per-tenant keys and reporting, so one instance protects every site of a hosting provider, CDN or website builder.
!What a self-hosted CAPTCHA checks vs what CleanTalk Self-Hosted checks
Comparison: self-hosted options in 2026
| Cap / ALTCHA / mCaptcha | mosparo | CleanTalk Self-Hosted | |
| Runs on your servers | yes | yes | yes |
| Proof-of-work challenge | yes | no | optional |
| Rules on form data, IP, User-Agent | no | yes | yes |
| IP and email reputation database | no | no | 8,600,000+ records |
| Updates of data and logic | no | manual rule packs | automatic, signed, daily |
| Stops human (manual) spam | no | partly | yes |
| Dashboard, logs, allow and block lists | partly | yes | yes |
| Multi-tenant keys for platforms | partly | no | yes |
| Price | free | free | from $99 / month |
Based on public documentation of each project as of October 2026.
Who this is for
- Public sector and regulated industries in the EU. No third-party processor, no data residency question, an audit trail on your own servers.
- Hosting providers, CDNs and website builders. One instance for every tenant, with an internal API your customers never see. Cap’s production users – a CDN, a privacy product and a research institute – show where self-hosted protection lands first; the same teams are the ones that need the data layer.
- Communities and marketplaces with user-generated content. Registrations, posts, listings and reviews at scale, including the human spam that passes every puzzle.
If your store or blog runs on WordPress and sending a spam check to the cloud is fine for you, nothing changes: the CleanTalk Anti-Spam plugin remains the simpler option at $12 per site per year. Self-Hosted is for the teams that cannot make that call.
Early access
The pilot is open: a dedicated EU instance from $99 per month or a self-hosted instance from $149 per month, the first three months free for teams that join the pilot and share feedback. Tell us which option you need on the Self-Hosted Anti-Spam page (https://cleantalk.org/self-hosted-anti-spam) – that is how we decide what to build first.
FAQ
Is a self-hosted CAPTCHA useless, then?
No. It stops scripts that do not run JavaScript, with no tracking and no third-party scripts, for free. It is a good first layer. It is not a spam filter, because it never looks at the sender or the message.
Why can’t I build the reputation database myself?
Because reputation is cross-site by definition. You learn that an address is a spammer when it spams other sites; by the time it reaches you, the only useful knowledge is what happened elsewhere. That takes a network – CleanTalk’s is 200,000+ sites.
What leaves my network with CleanTalk Self-Hosted?
Only the update download: signed database and logic updates from CleanTalk. No request data, no user data, no telemetry.
Does it work with my existing integrations?
Yes. The API is compatible with CleanTalk Cloud, so the official SDKs and CMS plugins work with the on-prem endpoint by changing the URL.
How is the database protected?
It is delivered in a hashed form, licensed for use inside your instance for the subscription term, and cannot be extracted as a plain list.
Can I test it?
The early access pilot is the test: three months free, full functionality, a direct line to the engineers.