summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Soarez <igor@soarez.org>2026-08-03 22:17:46 +0100
committerIgor Soarez <igor@soarez.org>2026-08-03 22:17:46 +0100
commit92bc4b3cba1beb7aa443c4dcbb1e741ece3a5deb (patch)
tree79f83d1c493c31d655ed1a082f15eed5b3951bab
parent7a8f261ec50b9c15bc37ba8ae1f0022c392111d3 (diff)
Record measured rate-limit behaviour per engine
Concrete numbers from development rather than a vague warning: Google tolerates a lot then blocks for ~90 minutes, Brave challenges after one or two queries and clears in ~15-20, and DuckDuckGo and Bing never challenged at all. That last fact is the useful one — it says which engine to reach for when several searches are needed in a row.
-rw-r--r--README.md12
-rw-r--r--src/engines.ts2
2 files changed, 9 insertions, 5 deletions
diff --git a/README.md b/README.md
index 684bd96..6dac8a7 100644
--- a/README.md
+++ b/README.md
@@ -121,10 +121,14 @@ The browser is shared and belongs to a person. Worth being aware of:
in the search engine's account history if that profile is signed in.
- Tabs open and close on someone's screen. `background: true` keeps them from
stealing focus, but they are visible.
-- Searching hard trips rate limiters for the whole host — a handful of queries in
- a few seconds is enough to earn a challenge that affects the human using that
- browser too. Measured on Google: roughly 30 queries in a few minutes cost about
- 90 minutes of blocking. Brave challenges considerably sooner than that.
+- Searching hard trips rate limiters for the whole host, and the challenge
+ affects the human using that browser too. Measured during development:
+ **Google** tolerated a lot, then roughly 30 queries in a few minutes cost about
+ 90 minutes of blocking. **Brave** is far stricter — it challenges after as few
+ as one or two queries and clears again in roughly 15–20 minutes. **DuckDuckGo**
+ and **Bing** never challenged once across the whole of development, which is
+ why DuckDuckGo is the one to reach for when you need to run several searches
+ in a row.
- **A decaying block does not look like a block.** Once the challenge page stops
being served, engines return an *empty results page* for a while instead —
indistinguishable from a query with no hits. It surfaces as `NoResultsError`,
diff --git a/src/engines.ts b/src/engines.ts
index a71b9c8..ef8baef 100644
--- a/src/engines.ts
+++ b/src/engines.ts
@@ -172,7 +172,7 @@ const BING: EngineDefinition = {
const BRAVE: EngineDefinition = {
id: "brave",
label: "Brave Search",
- note: "independent index and unwrapped links; challenges quickly under repeated queries",
+ note: "independent index, direct links; challenges after 1-2 queries, clears in ~15-20 min",
// Left empty deliberately — see the note in README. Brave's filter UI is
// client-rendered and the `tf=` values could not be confirmed against a page
// that was not simultaneously serving a bot check, so no window is claimed