← back home · # compare
recurl vs curl
The baseline HTTP client
recurl runs real curl on the happy path and only escalates when it sees a block. Same flags, same exit codes, strictly more capable. The fair comparison is "does recurl cost anything on the requests where curl already worked." The honest answer is "no, except a sub-millisecond process boundary."
| Feature | recurl | curl | Advantage |
|---|---|---|---|
| Flag compatibility | All standard curl flags passed through verbatim | Reference implementation | Tie |
| Behaviour on unprotected sites | Execs real curl, same speed | Original behaviour | Tie |
| Behaviour on TLS-fingerprinted sites | Auto-escalates to impersonation layer | Returns 403 / connection error | recurl |
| Behaviour on JS-challenged sites | Auto-escalates to headless Chromium preflight | Returns 403 with challenge HTML | recurl |
| Overhead on success | One process boundary; effectively a wrapper | None (it is curl) | curl |
| Diagnostic output | --recurl-debug shows which layer ran and why | -v for transport-level logs | recurl |
| Strict / passthrough mode | --recurl-strict disables fallback entirely | Default behaviour | Tie |
| Platform coverage | Linux, macOS, Windows (impersonation Linux/macOS only) | Everywhere | curl |
| Licence | MIT | curl licence (MIT-compatible) | Tie |
| Install footprint | Single binary + optional Chromium on first JS use | Single binary, usually preinstalled | curl |
Pick recurl when
- ▸You hit 403/429/captcha responses on sites you used to be able to scrape
- ▸You want one binary that handles both modern bot walls and plain HTTP
- ▸You want to keep your existing curl flags, scripts, and exit-code handling
- ▸You are willing to alias curl=recurl and let escalation happen automatically
Pick curl when
- ▸You only ever talk to your own internal services where bot walls do not exist
- ▸You are running in a minimal container and cannot afford the extra binary
- ▸You explicitly want plain-curl behaviour, including the failures, for diagnostic reasons
- ▸You are scripting against curl exit codes that specifically check for the original error path
Still deciding?
recurl is MIT-licensed and runs locally. Install it next to your existing toolchain, alias it for one project, and decide if it stays.