The deadliest poison known to AI
Find a file
Gergely Nagy bac151cf38
Some checks failed
default / clippy (push) Has been cancelled
lint / linting (push) Has been cancelled
checkpoint_charlie: Ignore ConnectionReset errors
Connection resets are normal, haproxy can and should disconnect from
time to time after a timeout. There's no need to log these at the error
level, log them at debug level only - but keep logging any other error
at that level.

Fixes #55.
2025-09-16 16:14:19 +00:00
.cargo nix: Upgrade nixpkgs to nixos-25.05 2025-05-31 11:45:09 +02:00
.forgejo ci: Switch to nightly builds 2025-09-14 15:03:43 +02:00
data qmk/lua: use set_header to set set_header 2025-09-16 15:33:37 +02:00
LICENSES Initial import 2025-01-16 10:44:56 +01:00
nix Default configuration, handler, and template 2025-09-15 10:43:35 +02:00
src checkpoint_charlie: Ignore ConnectionReset errors 2025-09-16 16:14:19 +00:00
tests tests: Call the binary correctly for fennel 2025-09-14 15:13:18 +02:00
.envrc nix: Split devShells into two 2025-08-30 10:23:59 +02:00
.gitattributes Move the docs to a separate repo 2025-02-18 10:50:47 +01:00
.gitignore nix: Upgrade nixpkgs to nixos-25.05 2025-05-31 11:45:09 +02:00
Cargo.lock bullshit: Embed another directory 2025-09-15 10:41:55 +02:00
Cargo.toml bullshit: Embed another directory 2025-09-15 10:41:55 +02:00
CHANGELOG.md Merge branch 'iocaine-2.x' 2025-09-07 11:11:52 +02:00
flake.lock flake.lock: Update 2025-09-05 09:22:31 +02:00
flake.nix flake.lock: Update 2025-09-05 09:22:31 +02:00
HACKING.md Major README update 2025-06-15 11:53:05 +02:00
justfile Add a Justfile 2025-05-08 09:03:36 +02:00
README.md README.md: Change the CI badge to nightly 2025-09-14 15:17:35 +02:00
REUSE.toml Wrote a README for the default configuration 2025-09-15 14:39:20 +02:00

iocaine

Build status Container image Demo Documentation

The deadliest poison known to AI.

Iocaine is a defense mechanism against unwanted scrapers, sitting between upstream resources and the fronting reverse proxy. It is designed to significantly reduce the load caused by the relentless attack of the Crawlers (mostly originating from various AI companies) in a way that does not place undue burden on legit visitors. While iocaine does support presenting a proof-of-work challenge, that should be a last resort, and even if that path is taken, the challenge is inexpensive for the human visitor.

Originally, iocaine started as a garbage generator, a tarpit, a place where the reverse proxy routed unwanted visitors, so that they'd crawl an infinite maze of garbage. Since then, it grew into a more ambitious project, and includes a scripting engine that lets the iocaine-operator tell the software how to treat each incoming request. The idea remained similar, however: to waste crawler resources, while keeping our costs down.

Unlike some similar tools, iocaine does not try to make the bad bots go away, it welcomes them, into an infinite maze of garbage. It does so, because the author observed that if the bots keep being served plausibly legit looking content, they will behave slightly better: they will not try to disguise themselves as much, and they'll keep a steady, but not overwhelming crawling pace. Serving unwanted visitors junk also evoked warm, fuzzy feelings inside the author. He likes warm, fuzzy feelings. The garbage generator used in iocane has been tuned with this in mind, to make it cheap, pretty much on par with serving a static file.

The goal is to have a tool that costs next to nothing for the operator, reduces the load on upstream services, and protects them from the crawlers, while having no (or at worst, very little) effect on legit visitors, but wasting crawler resources at the same time.

For more information about what this is, how it works, and how to deploy it, have a look at the dedicated website. If you're interested in hacking on iocaine, look into HACKING.md to get started.

Lets make AI poisoning the norm. If we all do it, they won't have anything to crawl.