Skip to content
recurl_ $install

← back home · # compare

recurl vs curl-impersonate

Patched curl with browser TLS fingerprints

recurl uses curl-impersonate as its impersonation layer. The difference is operational: curl-impersonate is a fixed set of profile binaries that you invoke directly, with no detection layer and no fallback. recurl wraps it with automatic block detection, escalates to a headless-browser preflight when impersonation is not enough, and falls back to plain curl on success. Same TLS layer underneath; different ergonomics on top.

Feature recurl curl-impersonate Advantage
TLS fingerprint mimicry Yes — uses curl-impersonate internally Yes — this is the core feature Tie
Browser profiles chrome, firefox, safari, edge + version variants chrome, firefox, safari, edge + version variants Tie
Automatic block detection Yes — detects 403 / 429 / challenge and escalates No — you pick the profile, request fails or succeeds recurl
JS challenge handling Headless Chromium preflight + cookie replay Not available — TLS layer only recurl
Warm browser daemon recurld keeps Chromium hot across invocations N/A recurl
Behaviour on already-working sites Runs plain curl, no impersonation overhead Always uses the patched binary recurl
Invocation Single binary: recurl One binary per profile: curl_chrome, curl_ff, etc recurl
Platform coverage Linux, macOS, Windows (Windows skips to JS layer) Linux, macOS recurl
Debug output --recurl-debug surfaces escalation decisions Standard curl -v recurl
Licence MIT MIT Tie
Project maturity Newer, smaller surface area Established, widely used in scraping stacks curl-impersonate

Pick recurl when

  • You want automatic detection of blocked responses, not manual profile selection per host
  • You want a JS preflight fallback for sites where TLS impersonation alone is not enough
  • You want a warm Chromium daemon so JS preflight is fast across many requests
  • You want one binary name (recurl) in your scripts instead of a fleet of curl_chrome / curl_ff variants
  • You want plain curl behaviour on the happy path and impersonation only when needed

Pick curl-impersonate when

  • You always want the same fixed TLS profile applied to every request, no detection layer in between
  • You are integrating into a system that already speaks the curl_chrome / curl_ff binary convention
  • You explicitly do not want a JS preflight layer or any browser involvement
  • You want the minimal possible dependency surface — just the patched curl, nothing else

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.