Changes since vv1.7.5
- fix: concurrency/memory/panic audit hardening (v2.52.7) (#401)
- chore(release): bump workspace to v2.52.6
- browser: per-crawl control map for optional chrome enhancements (#400)
- chore(release): bump workspace to v2.52.5
- browser: genericize internal gateway topology/metrics in doc comments
- browser: harden in-request gateway re-acquire (jitter, opt-out, timeouts)
- security: fix cargo-audit failures (quick-xml DoS + lopdf)
- chore(deps): bump actions/checkout from 4 to 7 (#399)
- security: bump quinn-proto to 0.11.15 (RUSTSEC-2026-0185)
- browser: connection reliability and failover improvements
- chore(release): v2.52.4 — UTM-tag spider.cloud README links
- chore(release): v2.52.3 — markdown scrape default, api cloud mode, branded login page
- feat(cli): markdown scrape by default + branded sign-in page
- chore(release): bump workspace to v2.52.2
- feat(cli): browser OAuth login + MCP OAuth client example
- chore(release): bump workspace to v2.52.1
- fix(website): bound sitemap crawl task spawning with semaphore (#397)
- feat(chrome_intercept): with_remote_local_policy (spider 2.52.0) (#396)
- Fix 500ms timeout for proxy error statuses 598/599 (#395)
- chore(release): bump workspace to v2.51.208
- fix(website): crawl_raw uses raw sitemap chain on chrome builds (#393)
- feat: add on_link_blocked_callback for robots.txt blocked URLs (#394)
- perf(page,website): drop redundant heap allocs on link-validation paths (v2.51.207)
- fix(chrome): close leaked tabs in smart-upgrade + spawn-pages paths (v2.51.206)
- fix(agent,mcp): bound page tabs, MCP sessions, and agent KV stores (v2.51.205)
- docs: tighten README and rework intro
- feat(agent,scripting): client reuse + usage tracking (v2.51.204)
- perf(agent,scripting): per-worker interpreter cache + permit timeout (v2.51.203)
- chore(release): v2.51.202 — patch bump
- chore(release): v2.51.201 — formalize AdaptiveSemaphore safety contract
- feat(website): AdaptiveSemaphore + with_adaptive_concurrency hook for runtime concurrency
- feat(agent): pure-Rust embedded Python + JS scripting (v2.51.200)
- feat(website): RemoteFetcher hook for delegated per-URL fetch (v2.51.198)
- chore(release): sync internal cross-crate deps to v2.51.197
- chore(release): v2.51.197 — chrome wait_for cap removal in non-success path
- fix(chrome): honour caller request_timeout in non-run_events wait branch
- chore(release): v2.51.196 — per-website decentralized worker URL overrides
- chore(release): sync internal cross-crate deps to v2.51.195
- chore(release): v2.51.195 — wreq network_interface plumbing
- feat(wreq): wire network_interface through wreq configure_base_client
- chore(release): sync internal cross-crate deps to v2.51.194
- chore(release): v2.51.194 — wreq emulation header survival fix
- fix(wreq): skip default_headers(empty) so emulation headers survive
- chore(release): sync internal cross-crate deps to v2.51.193
- chore(release): v2.51.193 — chrome_store_page tab keep-alive
- fix(website): keep chrome tab alive for chrome_store_page subscribers
- chore(examples): track chrome_proxy_dns_shortcircuit source
- chore(release): v2.51.192 — chrome hedge stack-overflow fix
- fix(page): heap-pin chrome DNS hedge future to stop crawl stack overflow
- chore(release): update Cargo.lock for v2.51.191
- chore(release): v2.51.191 — SSRF redirect guard + fmt
- fix(redirect): block SSRF redirect targets in all follow policies
- feat(page): expand IGNORE_EXTENSIONS + spool-safe chrome tunnel DNS confirm — v2.51.190
- perf(page): cross-feature NXDOMAIN cache + DNS-probe & CDP-subscribe skip — v2.51.189
- chore(examples): unregister chrome_proxy_dns_shortcircuit (untracked source)
- test(example): chrome_nxdomain_test with CHROME_WS_URL plumbing
- chore(release): sync internal cross-crate deps to v2.51.188
- feat(chrome): CDP loadingFailed hedge trigger + v2.51.188
- chore(release): sync internal cross-crate deps to v2.51.187
- feat(chrome): DNS hedge alongside chrome navigation + v2.51.187
- chore(release): sync internal cross-crate deps to v2.51.186
- chore(release): cargo fmt + sync sister crates to v2.51.186
- feat(chrome): two-signal NXDOMAIN cache + v2.51.186 (supersedes v2.51.185 pre-flight)
- feat(chrome): opt-in pre-flight local DNS shortcircuit + v2.51.185
- feat(solvers): detect embedded Cloudflare Turnstile widgets + v2.51.184
- docs(readme): rewrite for clarity, lead with streaming + benchmarks
- chore(release): sync internal cross-crate deps to v2.51.183
- release(spider): v2.51.183 — chain-walk classifier for cache-wrapped errors
- chore(release): sync internal cross-crate deps to v2.51.182
- release(spider): v2.51.182 + regression test for cache-gate fix
- fix(client): gate http-cache-reqwest middleware on configuration.cache
- chore(release): sync internal cross-crate deps to v2.51.181
- perf(page,utils): swap tokio yield_now for consume_budget in CPU-bound chunk loops + v2.51.181
- chore(release): sync internal cross-crate deps to v2.51.180
- fix(website): smart-mode chrome fallback for transport-level HTTP failures + v2.51.180
- chore(release): sync internal cross-crate deps to v2.51.179
- chore: silence pre-existing clippy dead-code warnings + v2.51.179
- chore(release): bump remaining workspace crates to v2.51.178
- chore(release): sync internal cross-crate deps to v2.51.178
- fix(page): wire two-signal NXDOMAIN upgrade into Page::new_page_streaming + v2.51.178
- fix(page): don't cache TimedOut + bump confirm_tunnel timeouts to 1500ms + v2.51.176
- feat(page): chrome two-signal NXDOMAIN upgrade for empty-200 → 504 reclass + v2.51.175
- feat(utils): wire two-signal NXDOMAIN upgrade into all fetch_page_html error paths + v2.51.174
- chore(release): sync internal cross-crate deps to v2.51.173
- feat(page): SOCKS proxy CONNECT failure detection + v2.51.173
- chore(page): fix clippy::doc_lazy_continuation in two-signal docstring
- chore(examples): add dns_nxdomain_test + chrome_remote_logrocket repros
- test(page): gate non-cache helper tests off cache_request feature
- chore(release): sync internal cross-crate deps to v2.51.172
- feat(page): two-signal upgrade for cache_request 526 + v2.51.172
- chore(release): sync internal cross-crate deps to v2.51.171
- perf(page): swap HostDnsCache RwLock for DashMap (no user-facing locks) + v2.51.171
- chore(release): sync internal cross-crate deps to v2.51.170
- perf(page): bounded process-wide host DNS cache for tunnel-confirmation lookups + v2.51.170
- chore(release): sync internal cross-crate deps to v2.51.169
- feat(page): chrome path two-signal proxy tunnel classification + v2.51.169
- chore(release): sync internal cross-crate deps to v2.51.168
- feat(page): two-signal proxy tunnel classification via local DNS confirmation + v2.51.168
- chore(release): sync internal cross-crate deps to v2.51.167
- revert(page): tunnel/proxy CONNECT failures stay retryable + v2.51.167
- chore(release): sync internal cross-crate deps to v2.51.166
- fix(page): chrome ERR_TUNNEL_CONNECTION_FAILED / ERR_PROXY_CONNECTION_FAILED → 526 + v2.51.166
- chore(release): sync internal cross-crate deps to v2.51.165
- fix(page): classify proxy CONNECT tunnel failures as 526 (non-retryable) + v2.51.165
- chore(release): sync internal cross-crate deps to v2.51.164
- chore(release): bump workspace to v2.51.164
- fix(config): http first-byte watchdog fires for single-proxy callers
- chore(release): sync internal cross-crate deps to v2.51.163
- fix(parallel_backends): short-circuit grace-period on permanent target failures + v2.51.163
- chore(release): sync internal cross-crate deps to v2.51.162
- fix(page): walk source chain in is_dns_error to catch macOS GAI NXDOMAIN + v2.51.162
- chore(release): sync internal cross-crate deps to v2.51.161
- fix(chrome): preserve HTTP final_redirect_destination across smart upgrade + v2.51.161
- chore(release): sync internal cross-crate deps to v2.51.160
- fix(website): apply redirect-aware selectors before smart establish link extraction + v2.51.160
- chore(release): sync internal cross-crate deps to v2.51.159
- fix(page): classify cache-wrapped transport errors as 526 + reorder DNS check + v2.51.159
- chore(release): sync internal cross-crate deps to v2.51.158
- fix(website): gate first-party allow builders on chrome feature + v2.51.158
- feat(intercept): expose chromey 2.49 allow_first_party_* flags via Website builder
- style: clippy fixes (manual_pattern_char_comparison, question_mark)
- chore(ci): bump softprops/action-gh-release to v3
- chore(release): sync internal cross-crate deps to v2.51.157
- chore(release): bump workspace to v2.51.157
- style: cargo fmt on new proxy_strategy + utils + website hunks
- feat(proxy_strategy): trait + Website hook + lazy secondary client
- feat(configuration): ProxyKind enum + proxies_by_kind sidecar
- feat(utils): media_asset classifier + LazyArc primitive
- chore(utils): solver-gate diagnostic logging in fetch_page_html_chrome_base
- chore(release): sync internal cross-crate deps to v2.51.156
- fix(chrome,validation): smart-mouse jitter loop + PerimeterX title parity
- feat(chrome): route el.click() through smart-mouse path — v2.51.156
- fix(chrome): route point-based clicks/drags through smart-mouse paths
- chore(release): sync internal cross-crate deps to v2.51.155
- fix(utils): handle_base must not byte-slice on UTF-8 boundaries — v2.51.155
- ci(bench): install spider_worker before decentralized bench
- fix(ci): bump hickory 0.26.0->0.26.1, ignore unfixable 0.25.x advisories, fix worker
- chore(release): sync internal cross-crate deps to v2.51.154
- fix(chrome): re-honor quiet_ms in wait-for-DOM v2 to handle bursty SPAs + v2.51.154
- chore(release): sync internal cross-crate deps to v2.51.153
- fix(utils): never cache failed responses + v2.51.153
- chore(release): sync internal cross-crate deps to v2.51.152
- fix(http): balance vitals counter on first-byte timeout early-return + v2.51.152
- chore(release): sync internal cross-crate deps to v2.51.151
- feat(http): wire first-byte watchdog into Page::new_page_streaming + crawl_smart auto-arm + v2.51.151
- style: cargo fmt + targeted clippy fixes (drop redundant &'static, single-line log)
- chore(release): sync internal cross-crate deps to v2.51.150
- feat(http): auto-arm first-byte watchdog under balance + 2 HTTP proxies + v2.51.150
- chore(release): sync internal cross-crate deps to v2.51.149
- feat(http): first-byte watchdog foundation + v2.51.149
- chore(release): sync internal cross-crate deps to v2.51.148
- chore(release): bump workspace to v2.51.148
- fix(chrome,hedge): track hedge's own connected_url + browser_dead
- chore(release): sync internal cross-crate deps to v2.51.147
- chore(release): bump workspace to v2.51.147
- test(chrome): cooldown deadline math + last-write-wins on mark_url_bad
- chore(release): sync internal cross-crate deps to v2.51.146
- feat(chrome): first-byte watchdog jitter + measurement test + v2.51.146
- chore(release): sync internal cross-crate deps to v2.51.145
- feat(chrome): mark-bad endpoint rotation + auto-populated chrome_endpoint_url + v2.51.145
- feat(chrome): first-byte watchdog + browser_dead signal for backend rotation
- perf(chrome): lazy-cache multi-endpoint failover across setup_browser_configuration
- chore(release): sync internal cross-crate deps to v2.51.144
- fix(detect): trim leading whitespace before binary/asset sniffing + v2.51.144
- chore(release): sync internal cross-crate deps to v2.51.143
- chore(release): lockfile dep refresh + v2.51.143
- chore(release): commit + push internal dep sync before publishing
- chore(release): sync internal cross-crate deps to v2.51.142
- chore(release): cargo fmt + lockfile refresh + v2.51.142
- chore(release): sync internal cross-crate deps to v2.51.141
- fix(chrome): honor request_timeout as a hard wall-clock cap + v2.51.141
- feat(chrome_remote_cache): main-doc-only dump knob + v2.51.140
- chore(release): sync internal cross-crate deps to v2.51.139
- fix(utils): reclassify PerimeterX block-page signals + v2.51.139
- chore(release): v2.51.138 — sync workspace versions for wait_for_idle_dom signal-stack
- perf(chrome): signal-stack wait_for_idle_dom — RAF-cadence, no quiet timer
- perf(page): metadata-first spool short-circuit + helpers + v2.51.137
- fix(page): reclassify empty 200 responses to 504 + v2.51.136
- chore(release): sync cross-crate deps to v2.51.135
- fix(chrome): strip JSON quotes from CDP-captured response headers + v2.51.135
- chore(release): sync cross-crate deps to v2.51.134
- perf(chrome): skip streaming extraction on assets + v2.51.134
- chore(release): sync cross-crate deps to v2.51.133
- fix(smart): preserve legacy link-set semantics on chrome upgrade + v2.51.133
- chore(release): sync cross-crate deps to v2.51.132
- perf(smart): stream link extraction during chrome upgrade + v2.51.132
- chore(release): sync cross-crate deps to v2.51.131
- perf(chrome): fold link extraction into chunk pump (single-pass) + v2.51.131
- perf(chrome): skip redundant fill-fetch when HTML extraction already ran + v2.51.130
- perf(utils,page): pre-compute is_valid_utf8 during streaming + v2.51.129
- fix(retry): drop h2 INTERNAL_ERROR from retryable reasons + v2.51.128
- perf(chrome): switch SSL/cert detector trio to single-pass Aho-Corasick + v2.51.127
- fix(retry): widen permanent-failure classification for HTTP/2 + 5xx + Chrome URL family + v2.51.126
- fix(retry): classify SSL handshake failures as 526 across HTTP + Chrome + v2.51.125
- chore(release): sync cross-crate deps to v2.51.124
- chore(release): bump workspace to v2.51.124
- chore(release): sync cross-crate deps to v2.51.123
- fix(chrome): single-URL with_chrome_connections takes default path + v2.51.123
- chore(release): sync cross-crate deps to v2.51.122
- chore(release): bump workspace to v2.51.122
- feat(page): classify address-unreachable + connection-refused as permanent
- perf(chrome): batch Fetch.disable cleanup + LLM JS wrapper robustness + v2.51.121
- feat(remote_cache): runtime config for skip_browser HTTP dumps
- chore(release): bump workspace to v2.51.119
- perf(parallel_backends): skip HTML-shape probes on assets in html_quality_score
- test(smart): live smoke test covering v2.51.117 source_str→target_url refactor
- chore(release): bump workspace to v2.51.117
- perf(utils): drop redundant HTML UTF-8 decode in fetch_page_html_chrome_base
- fix(website): emit synthetic Page to subscribers on chrome tab-creation timeout; bump to v2.51.116
- chore(release): bump workspace to v2.51.115
- fix(chrome_remote_cache): bypass proxies on remote cache HTTP client
- feat(chrome_remote_cache): read-only mode + v2.51.114
- chore(release): bump workspace to v2.51.113
- chore(release): bump workspace to v2.51.112
- perf(uring_fs): round-robin worker pool for parallel ring submission + v2.51.111
- chore(release): bump workspace to v2.51.110
- chore(release): bump workspace to v2.51.109
- chore(release): bump workspace to v2.51.108
- fix(website): use page.size() for initial_html_length on balanced spools + v2.51.107
- fix(website): retry links on semaphore close + spool-aware JS challenge detect + v2.51.106
- perf(chrome): lock-free OnceLock get/set init for tab-closer + v2.51.105
- feat(chrome,hedge,parallel_backends): concurrent tab-closer + explicit context dispose + v2.51.104
- fix(parallel_backends,chrome): close CDP tabs + background tab-closer watcher + v2.51.103
- chore(tests): move logrocket network probe out of tree
- chore(release): sync internal deps to v2.51.102
- feat(tests): live network map + markdown integrity check for logrocket + v2.51.102
- chore(release): sync internal deps to v2.51.101
- feat(website): expose with_max_main_frame_navigations on Website + v2.51.101
- chore(release): sync internal deps to v2.51.100
- feat(chrome): navigation-loop guard for JS / meta-refresh loops + v2.51.100
- chore(release): sync internal deps to v2.51.99
- feat(chrome): enforce redirect_limit on chromey path (opt-in) + v2.51.99
- chore(release): v2.51.98 — bump spider_network_blocker 0.0.81 → 0.0.82
- chore(release): v2.51.97 — bump async-openai 0.33→0.35, tiktoken-rs 0.9→0.11
- chore(release): v2.51.96
- chore(release): v2.51.95
- fix(page): webdriver+chrome+basic build under Page Drop impl
- chore(release): v2.51.94
- chore(release): sync internal deps to v2.51.93
- chore(release): v2.51.93
- fix: classify permanent DNS failures as 525 across http + chrome
- chore(release): v2.51.92
- chore(templates): add apache forbidden updated template
- fix(website): sitemaps push now compiles under default features
- perf,fix: eliminate wasteful clones and fix 5 test failures
- perf(website): consume CaseInsensitiveString via into_string()
- perf(utils,website,chrome): drop redundant to_string() and clones
- chore: bump workspace to 2.51.86 after cargo update
- perf(page,utils): eliminate wasteful clones in metadata and cache paths
- perf(page): borrow external_domains_caseless in link-stream rewriters
- chore: sync spider_agent internal deps to 2.51.83
- fix(chrome): update remaining Page::new call sites missed in 2.51.82
- chore: sync internal spider_agent deps to 2.51.82
- perf(chrome): bundle Chrome fetch params into borrowed struct for inlining
- fix(balance,chrome): cap failure-fallback wall time to request_timeout
- fix(crawl): missing .await on channel_send_page lost pages to subscribers
- feat(balance): per-Website lazy spool tmpdir with drop cleanup
- feat(balance,chrome): wire direct-to-disk spool into fetch_page_html_chrome_base
- perf(balance): DoS-cap the streaming spool writer + audit with_capacity sites
- feat(balance): signature-equivalent spool infrastructure; defer fetch wire
- feat(balance,chrome): stream-to-disk infrastructure for chrome spooling
- feat(chrome,balance): adaptive chrome HTML streaming via chromey 2.46.40
- perf(balance): streaming spool writer with inline vitals + full disk streaming
- chore: bump all crates to v2.51.72
- fix(page): drop unwrap in balance bytes tracking, bump crates to v2.51.71
- chore: bump sibling crates to v2.51.70 to match spider release
- feat(retry): add per-attempt hedge override on RetryDirective, fix E0716 in retry loop, bump v2.51.70
- chore: sync internal crate dependency versions to 2.51.69
- perf: pre-allocate Vec/HashMap/HashSet with known capacity, bump all crates to v2.51.69
- feat(retry): add configurable RetryStrategy trait for dynamic per-attempt profile switching, bump all crates to v2.51.68
- feat(page): add Page::size() for zero-cost content byte length, bump all crates to v2.51.67
- chore: sync internal crate dependency versions to 2.51.66
- fix(page): refuse to spool Chrome empty-HTML shells, bump all crates to v2.51.66
- chore: sync internal crate dependency versions to 2.51.65
- fix(warc): emit HTTP response headers so WARC files replay in replayweb.page (#384), bump all crates to v2.51.65
- feat(chrome): restore Chrome hedge path (HedgeBrowser + race logic), bump all crates to v2.51.64
- chore: bump all crates to v2.51.63
- feat(chrome): add disable_javascript config to suppress JS execution via CDP, bump all crates to v2.51.62
- chore: bump all crates to v2.51.61
- chore: cargo fmt, cargo update, bump all crates to v2.51.60
- test(chrome): add concurrency e2e tests for Chrome crawling
- fix(chrome): send shutdown signal immediately after page close, fix e2e test URL
- fix(chrome): prevent deadlock in goto_with_html_once when chrome_intercept enabled
- chore: bump all crates to v2.51.59
- chore(audit): suppress rustls-webpki and rand advisories
- chore: bump all crates to v2.51.58, spider_remote_cache to v0.3
- fix(cache): eagerly init worker, remove redundant set_client + v2.51.56
- fix(cache): fix chrome_remote_cache compilation + v2.51.56
- fix(cache): fix chrome_remote_cache compilation — cfg-gate tracing, bump chromey
- perf(cache): use spider_remote_cache for batched concurrent uploads + v2.51.55
- feat(chrome): WaitForLoad/WaitForNetworkIdle/WaitForNetworkAlmostIdle use CDP events + v2.51.54
- feat(chrome): add WaitForLoad, WaitForNetworkIdle, WaitForNetworkAlmostIdle actions + v2.51.53
- bump all crates to v2.51.52
- perf(chrome): concurrent page_wait — two-phase network-then-DOM + v2.51.51
- fix(balance): eliminate byte-counter leak causing Chrome crawl deadlock + v2.51.50
- feat(spider): add wait_guard feature — adaptive wait-for timeout for chronic bad domains + v2.51.49
- chromey v2.46.21, bump all crates to v2.51.48
- bump all crates to v2.51.47
- bump all crates to v2.51.46
- fix(chrome): add backoff to single-endpoint retry loop, cap unbounded network waits + v2.51.45
- bump all crates to v2.51.44
- perf(content): SIMD-accelerate estimate_text_length, estimate_tag_bytes, estimate_base64_bytes + v2.51.43
- chromey v2.46.13 -> v2.46.15, bump all crates to v2.51.42
- bump all crates to v2.51.41
- chromey v2.46.12 -> v2.46.13
- fix(hedge+chrome): remove chrome hedge path, fix backend semaphore deadlock, skip warmup hedges + v2.51.40
- perf(clean_html): zero-cost catch_unwind via AssertUnwindSafe, drop html clone + v2.51.39
- fix(stability): catch lol_html rewrite_str UTF-8 panic in clean_html_* + v2.51.38
- fix(balance): close byte-tracking memory leak in spool budget counter + v2.51.37
- perf(balance): zero-disk-IO link extraction for spooled pages, spool-aware binary detection + v2.51.36
- perf(simd): trie-dispatch content type classifier, phf hop-by-hop header filter + v2.51.35
- perf(simd): zero-alloc asset extension check, memchr robotparser, branch-free networking_capable + v2.51.34
- fix(concurrency): eliminate blocking paths — Notify-based ChannelGuard, TabCloseGuard timeout, eager abort_all + v2.51.33
- chore: auto-sync internal dep versions in release.sh
- chore: fix all internal dep versions, bump to v2.51.32
- chore: fix spider_agent dep versions, bump to v2.51.31
- fix(chrome): close leaked tabs preventing hedge deadlocks, remove forced retry + v2.51.30
- chore: regenerate Cargo.lock for v2.51.29
- refactor(parallel_backends): remove LightPanda references, rename to Cdp + v2.51.29
- chore: regenerate Cargo.lock for v2.51.28
- fix(parallel_backends): eliminate redundant grace period + double stat recording + v2.51.28
- chore: regenerate Cargo.lock for v2.51.27
- fix(parallel_backends): restore RNG primary/backend launch swap (0-1ms) + v2.51.27
- chore: regenerate Cargo.lock for v2.51.26
- perf(parallel_backends): true primary-vs-backend racing + remove primary jitter + v2.51.26
- chore: regenerate Cargo.lock for v2.51.25
- perf(uring_fs): unified read_file_chunked with auto uring/tokio fallback + v2.51.25
- chore: regenerate Cargo.lock for v2.51.24
- fix(balance): uring_fs fallback to tokio::fs on read failure + v2.51.24
- chore: regenerate Cargo.lock for v2.51.23
- fix(sync): prevent subscription_guard deadlock when receivers dropped + v2.51.23
- chore: regenerate Cargo.lock for v2.51.22
- fix(perf): restore uring_fs fast path for spool reads + parallel DNS pre-resolve + v2.51.22
- chore: regenerate Cargo.lock for v2.51.21
- perf(balance): true streaming disk I/O for lol_html link extraction + clippy fixes + v2.51.21
- chore: regenerate Cargo.lock for v2.51.20
- fix(sync): eliminate ChannelGuard livelock on repeated lock() calls + v2.51.20
- chore: regenerate Cargo.lock for v2.51.19
- fix(balance): eliminate sync blocking disk I/O from async link extraction + v2.51.19
- chore: cargo fmt, clippy fixes, bump all crates to v2.51.18
- chore: cargo fmt, clippy fixes, bump all crates to v2.51.18
- perf: eliminate UTF-8 round-trips in Chrome content injection pipeline
- perf(simd): SIMD UTF-8 validation, zero-copy link streaming, and byte-level optimizations
- chore: regenerate Cargo.lock for v2.51.17
- test(e2e): Chrome hedge parallel_backends E2E tests + v2.51.17
- test(e2e): add Chrome + hedge + parallel_backends E2E tests
- chore: regenerate Cargo.lock for v2.51.16
- fix(hedge+parallel_backends): collect backend results in hedge Chrome path + atomic EMA updates + v2.51.16
- perf(balance): pressure-aware spool + lock-free vitals for scaling + v2.51.15
- fix(parallel_backends): add backend_timeout_ms to test constructors
- fix(parallel_backends): hard outer timeout prevents stalled backends from blocking Chrome + v2.51.12
- feat(chrome): multi-endpoint connection failover + v2.51.11
- perf(hedge): zero-latency signal-based Chrome hedge escalation + v2.51.10
- feat(hedge): Chrome hedge via new WS connection on stall + OOM-safe pre-alloc caps + v2.51.9
- perf(async): eliminate all spawn_blocking from spool I/O + async DNS via hickory-resolver + v2.51.8
- perf(balance): tokio mpsc cleanup — zero-CPU idle, instant wake + v2.51.7
- perf(balance): raise per-page spool threshold to 3 MiB, memory-first design + v2.51.6
- perf(balance): batch-drain cleanup task, reduce idle polling latency + v2.51.5
- fix(balance): remove thread::sleep from flush_cleanup, use yield_now + deadline + v2.51.4
- perf(balance): tokio-native spool cleanup task + v2.51.3
- perf(balance): dedicated cleanup thread for spool file deletion + v2.51.2
- fix(balance): binary_file flag in transformations, clippy fixes + v2.51.1
- feat(page): add binary_file flag for disk-safe binary detection + v2.51.0
- fix(balance): make shed_page_html fully async + v2.50.9
- refactor(balance): transform_content_send uses byte pipeline by default, clean up dead code + v2.50.8
- feat(balance): public async content API — get_html_async, stream_html_bytes_async + v2.50.7
- perf(balance): fully async spool I/O, simplified decision logic + v2.50.6
- perf(balance): async disk I/O for crawl paths, eliminate runtime blocking + v2.50.5
- perf(balance): Arc-shared spool files, cached decisions, EMA adaptive thresholds + v2.50.4
- test(balance): add subscription e2e test for disk streaming + v2.50.3
- fix(balance): gate spool code behind not(decentralized) + v2.50.2
- chore(balance): add unconditional is_html_on_disk() API + v2.50.1
- feat(balance): disk-backed HTML spool for memory-balanced crawling + v2.50.0
- perf(parallel_backends): drop backend JoinSet immediately after race to free losing pages + v2.49.1
- feat(adblock): add adblock_easylist feature, bump all crates to 2.49.0
- perf(spider): automatic proxy-host DNS caching with adaptive refresh
- perf: skip HTML link extraction for single-page crawls + v2.48.52
- chore: remove lightpanda feature flag from parallel_backends + v2.48.51
- fix: filter honeypot links (aria-hidden) in all CSS selectors + v2.48.50
- perf: zero-alloc SIMD case-folding hash via case_insensitive_string 0.2.11 + v2.48.48
- perf: single-pass domain extraction, faster parent_host_match + v2.48.47
- perf: zero-copy HTML in all link extraction paths + right-sized buffers + v2.48.46
- perf: zero-copy XML stripping, right-sized response buffers + v2.48.45
- perf: eliminate String allocation per link in push_link hot path + v2.48.44
- fix: memory safeguards — bounded extra_links, eliminate page clones in channel sends + v2.48.43
- fix: add memory pressure safeguards to parallel_backends + v2.48.42
- fix: DNS errors (525) no longer trigger should_retry in get_error_status_base + v2.48.41
- fix: move crawl delay to only apply before HTTP requests, not every loop iteration (#383) + v2.48.40
- chore: bump v2.48.39, downgrade CDP timeout log to debug
- fix: remove stray cache_namespace arg from run_remote_multimodal_extraction call + v2.48.38
- fix: add missing cache_namespace param in smart feature call sites + v2.48.37
- feat: configurable cache namespace for partitioning cache keys + v2.48.36
- fix: add missing content_map field to decentralized Page struct + v2.48.35
- feat: multi return_format support for spider cloud + v2.48.34
- feat: SpiderCloudReturnFormat enum for type-safe return_format + v2.48.33
- docs: improve README examples with limit param and structured output + v2.48.32
- feat: add page.get_content() + spider_cloud_markdown example + v2.48.32
- fix: remove Option from subscribe, match dep versions, fix all-features compile + v2.48.31
- fix: remove Option from subscribe, always compile + v2.48.30
- docs: add CLAUDE.md development guide with Spider Cloud configs, examples, and testing
- fix: enable doc_cfg for docs.rs builds, clean up README + v2.48.29
- simplify README, placeholder API key safeguard + v2.48.25
- fix: ungate
use url::Urlfor decentralized feature + v2.48.24 - perf: pre-compile lol_html CSS selectors via OnceLock + v2.48.23
- perf: zero-alloc per-link From<&str>, cache drain mem::take + v2.48.22
- perf: arena/buffer reuse — zero-alloc CaseInsensitiveString, EMA HashSets, XML buf pool + v2.48.21
- perf: add mimalloc allocator option, allocator benchmarks, README guidance
- perf: sync CPU/memory state in get_semaphore, pre-allocate link HashSets + v2.48.20
- perf: fix last fake-async rewriter in utils/mod.rs, add cooperative yield + v2.48.19
- perf: eliminate per-link clone in insert_link — accept &ref, clone only on insert + v2.48.18
- perf: eliminate fake-async in crawl loops, sitemap parsing, CSS selectors + v2.48.17
- perf: lock-free cache, sync memory state, cooperative rewriter yields + v2.48.16
- fix: smart mode upgrade heuristics — weighted scoring, tracker filtering, anti-bot scan + v2.48.15
- feat: CLI authenticate command for Spider Cloud API key + v2.48.14
- fix: docs.rs build failure — explicit feature list + v2.48.12
- fix: docs.rs build failure — replace all-features with explicit feature list
- fix: retry logic hardening — proxy-aware 401, full jitter backoff, stale page breaks + v2.48.11
- test: comprehensive error handling and retry logic validation
- fix: MCP scrape use with_limit(1) to prevent crawling (#380) + v2.48.10
- fix: parallel backends CDP/WebDriver run without lightpanda/servo features + v2.48.9
- fix: page.html private field + unused_mut warning + v2.48.8 release
- fix: suppress dead_code warnings in spider_mcp state
- chore: update Cargo.lock for v2.48.7
- chore: bump all crates to v2.48.7
- feat: per-backend proxy support for parallel backends
- feat: parallel backends memory optimizations + v2.48.6 release
- fix: release.sh cd always returns to root on publish failure
- feat: spider_mcp Spider Cloud support via SPIDER_API_KEY
- chore: align internal dep versions for v2.48.5 release
- fix: run remote cache before parallel backends in Chrome path
- docs: add spider_mcp to README
- chore: update Cargo.lock for v2.48.4
- feat: add spider_mcp crate — MCP server for Spider web crawler
- chore: update Cargo.lock for v2.48.3
- fix: parallel backends probe-on-first-request + connect timeout
- fix: restore full setup_chrome_events for LightPanda
- feat: full Chrome config parity for LightPanda backend
- chore: update Cargo.lock for v2.48.2
- chore: clippy fixes + bump crates to v2.48.2
- perf: pass full handler config to LightPanda via connect_with_config
- chore: update Cargo.lock for v2.48.1
- chore: bump crates to v2.48.1
- feat: randomise launch order between primary and backends
- feat: add parallel crawl backends — race LightPanda/Servo alongside primary (v2.48.0)
- style: fix formatting in website.rs cfg attribute
- feat(cli): add --return-format flag for content transformation (v2.47.93)
- fix: gate unused variables behind cache feature cfg
- chore: update Cargo.lock for v2.47.92
- feat(cli): add --warc flag for WARC output (v2.47.92)
- style: fix formatting in warc_chrome example
- docs(examples): add WARC output examples for HTTP and Chrome modes
- chore: bump all crates to v2.47.91
- feat(crawl): add lock-free WARC 1.1 output for web archiving (v2.47.91)
- feat(crawl): add auto-throttle and ETag conditional caching (v2.47.90)
- fix(crawl): fix compile error in crawl_concurrent_raw - clone antibot patterns before spawn
- feat(crawl): user-configurable antibot detection patterns via CustomAntibotPatterns
- feat(crawl): expand antibot detection — 7 new providers, server header scanning, 16 new patterns
- fix(crawl): restore 6 antibot body patterns accidentally dropped in v2.47.85
- perf(crawl): optimize antibot detection — use LeftmostFirst + find() instead of iterator
- chore: bump all crates to v2.47.84
- fix(crawl): expand anti-bot detection patterns for Cloudflare, Akamai, PerimeterX, DDoS-Guard
- chore: bump all crates to v2.47.83
- fix: resolve cargo fmt and clippy errors across workspace
- fix(crawl): retry antibot 403s instead of treating as hard blocks
- chore: bump all crates to v2.47.81
- fix(spider): reclassify Chrome error pages as 599, trigger retry
- fix(crawl): detect Chrome error pages (ERR_TUNNEL_CONNECTION_FAILED etc.) as invalid content, bump v2.47.80
- fix(audit): ignore RUSTSEC-2026-0049 rustls-webpki CRL advisory
- fix(crawl): add subscription_guard to all single-page fast paths, bump v2.47.79
- chore(deps): bump all crates to v2.47.78
- style: cargo fmt spider_worker
- fix(deps): upgrade warp 0.3→0.4 to resolve RUSTSEC-2026-0049
- style: cargo fmt
- perf(cache): optimize SmartCache, SelectorCache, and cache read/write paths, bump v2.47.77
- chore(deps): bump chromey v2.42.5, update lockfile, bump v2.47.76
- style: cargo fmt
- docs(spider): add doc(cfg) feature badges for traits, enable docs.rs all-features, bump v2.47.75
- fix(chrome): skip redirect-caused net::ERR_ABORTED instead of aborting navigation
- feat(spider): add PageData, Crawler trait abstractions, bump v2.47.73
- perf(dns_cache): zero-alloc cache hits via Arc<[SocketAddr]> + index iterator, bump v2.47.72
- perf(spider): skip robots.txt for single-page, enable TCP keepalive always, wire DNS cache into reqwest resolver, bump v2.47.71
- chore(deps): bump strum 0.28, phf 0.13, gemini-rust 1.7, chromey 2, llm_models_spider 0.1, bump v2.47.70
- perf(cache): batch LRU eviction to reduce write-lock hold time, fix aws-lc-sys audit, bump v2.47.69
- fix(spider): add decentralized stubs for set_url_parsed_direct and links_full, bump v2.47.68
- perf(spider): remove unnecessary Box allocations and redundant string conversions, bump v2.47.67
- feat(cache): dump chrome responses to remote cache server
- fix(spider): fall back to HTTP crawl when Chrome is unavailable (#373), bump v2.47.65
- feat(spider): proxy support for LLM HTTP requests (#378), bump v2.47.64
- test(spider): timing tests for cache_mem + chrome_remote_cache skip_browser, bump v2.47.63
- perf(spider): cache_mem auto skip_browser for chrome_remote_cache too, bump v2.47.62
- perf(spider): cache_mem auto-enables skip_browser for Chrome mode, bump v2.47.61
- fix(spider): deterministic CDP event listener shutdown via watch channel, bump v2.47.60
- feat(spider): Chrome mode remote_addr from CDP Network.responseReceived, bump v2.47.59
- fix(spider): add 3s timeout to remote cache fallback in chrome_remote_cache-only path, bump v2.47.58
- fix(spider): remote cache fallback for Chrome mode when cache_mem enabled, bump v2.47.57
- perf(spider): trie Box keys + manual byte-walk + memchr dot scan, bump v2.47.55
- perf(spider): SIMD-accelerated byte scanning via memchr, u64 word comparisons, unrolled FNV hash, bump v2.47.54
- perf(spider): bloom filter bitmask addressing + inline early-exit, interner zero-clone extend, bump v2.47.53
- perf(spider): eliminate hot-path allocations — push_link, attr removal, normalize_html, bump v2.47.52
- perf(spider): NUMA thread pinning + zerocopy wire parsing, bump v2.47.51
- perf(spider): bytes::Bytes zero-copy page passing, mmap+hugepages bloom filter dedup, bump v2.47.50
- perf(spider): data structure optimizations — O(1) frontier pop, zero-alloc header matching, eliminate HashSet clones, bump v2.47.49
- feat(spider_agent): complete RemoteMultimodalConfigs builder pattern (#376), bump v2.47.48
- feat(spider_cli): add --chrome-connection-url, --cookie, --stealth CLI flags, bump v2.47.47
- perf(spider): Chrome request reliability — min 2 retries, backoff, fresh tabs, browser health signal, bump v2.47.46
- fix(spider): Chrome status code defaults to 599 instead of 200 on no response, bump v2.47.45
- feat(spider): Spider Browser Cloud integration via wss://browser.spider.cloud, bump v2.47.44
- fix(spider): fix clippy redundant_guards warning in get_html_cow, bump v2.47.43
- perf(spider): memory optimizations — Cow HTML, bounded caches, tuned buffers, bump v2.47.43
- perf(spider): eliminate redundant allocations in crawl hot paths, bump v2.47.42
- feat(spider): adaptive hedge tracking for HTTP paths, bump v2.47.41
- feat(spider): variance-aware adaptive hedge delay with auto-tuning signals, bump v2.47.40
- fix(spider): fix Chrome hedge never firing on slow sites, use raw EMA for adaptive delay, bump v2.47.39
- fix(spider): add backoff for 599/598 proxy errors in get_timeout(), bump v2.47.38
- feat(spider): add Chrome hedged requests with adaptive delay tracking, bump v2.47.37
- fix: configurable automation timeout, uring_fs test deadlock, unused import (#374), bump v2.47.36
- fix: clippy unnecessary casts and hex literal grouping in splice, bump v2.47.35
- chore: bump v2.47.34
- feat(spider): add tcp_fastopen, splice, io_uring send/recv, bump v2.47.33
- revert(spider): remove needs_retry() from initial_html_length check, bump v2.47.32
- fix(spider): set initial_html_length to 0 when page needs retry, bump v2.47.31
- fix(spider): set initial_html_length to 0 for empty pages, bump v2.47.30
- fix: retry on empty content (200 + no body) and truncated responses
- fix: remove useless Into::into after double-box removal (clippy)
- feat: enable dns_cache, rate_limit, request_coalesce in __basic defaults
- feat: 10 performance & reliability enhancements, bump to v2.47.28
- fix: ensure 599/598 errors always set should_retry for website-level retry logic
- fix: inline let binding to satisfy clippy let_and_return lint
- fix: remove retry suppression for request errors, add status-based retry classification
- feat: async file I/O for TempStorage + ExperienceMemory, bump to v2.47.25
- chore: bump all crates to v2.47.24
- style: cargo fmt
- fix: remove unnecessary i32 cast on libc::EINPROGRESS
- feat: io_uring TCP connect + lightweight background runtime, bump to v2.47.23
- fix: replace tokio-uring with raw io-uring crate + kernel probe, bump to v2.47.22
- fix: eliminate panic sites and unsafe indexing, bump to v2.47.21
- fix: detect and flag truncated responses from upstream Content-Length mismatch
- chore: bump all crates to 2.47.18
- fix: enforce hard wall-clock timeout on all crawl entry points
- feat: Auto API mode — api.openai.com uses Responses API, others use Completions, bump to v2.47.17
- feat: OpenAI Responses API support (opt-in), bump to v2.47.16
- feat: expose underlying HTTP client and configurable timeout on agent, bump to v2.47.15
- fix: auto-append /chat/completions for OpenAI-compatible URLs, add proxy support to agent, bump to v2.47.14
- fix: DNS resolve errors (525) skip all retry loops, bump to v2.47.13
- chore(crawler): add v2.47.12
- fix: 599 status with real content no longer misclassified as ConnectError, bump to v2.47.11
- fix: include webdriver feature Box<[u8]> conversion, bump to v2.47.10
- perf: reduce Page html from Box<Vec> to Box<[u8]>, bump to v2.47.9
- perf: unbox redirect_limit/cookie_str/request_timeout, remove charset alloc, bump to v2.47.8
- perf: Arc for external_domains_caseless, skip charset lowercase alloc, bump to v2.47.7
- perf: eliminate wasteful allocations on hot paths, bump to v2.47.6
- fix: lazy anti-bot body check in smart mode, exhaustive pattern tests, bump to v2.47.5
- feat: detect Alibaba TMD anti-bot, force Chrome upgrade in smart mode, bump to v2.47.4
- fix: validate 598/599 as genuine errors before ConnectError, bump to v2.47.3
- fix: 598/599 status codes return ConnectError, bump all crates to v2.47.2
- feat(chrome): add network idle timeout to prevent tarpit during CDP navigation
- feat: add per-chunk idle timeout to prevent tarpit/slow-drip antibot attacks
- chore: bump spider_agent to v2.46.3 (v2.46.2 already published)
- chore: bump all crates to v2.46.2
- feat(agent): retry on different model for 502/503/429/5xx errors
- feat(agent): add Anthropic Messages API thinking/extended thinking support
- style: fix rustfmt formatting in reqwest 0.13 upgrade
- feat: upgrade to reqwest 0.13 ecosystem
- feat(agent): eliminate panics, silent failures, and unbounded growth
- feat(agent): action handler hardening — duration caps, JS escape, timeout guards
- feat(agent): eval timeouts, spawn concurrency limiter, PageWaitStrategy, panic hardening
- feat(agent): action feedback, partial result preservation, and JS error capture
- style: fix rustfmt formatting in smart_vs_chrome tests
- chore(release): 2.45.25
- fix: use final redirect URL as base for relative link resolution (#364)
- chore: ignore transitive audit advisories with no direct fix
- chore: ignore RUSTSEC-2025-0134 (rustls-pemfile via warp)
- chore: ignore RUSTSEC-2026-0002 (lru 0.13.0 via wreq)
- docs: backfill CHANGELOG v2.45.1-v2.45.22 and add .editorconfig
- chore: remove cargo dependabot, keep github-actions only
- chore: fix clippy warnings and formatting across workspace
- chore(deps): bump flexbuffers 2->25, async-openai 0.32->0.33, clap 4.5.59->4.5.60, actions
- docs: rewrite README, add issue/PR templates, security policy, CI improvements
- docs: add Contributor Covenant v2.1 Code of Conduct
- docs: rewrite CONTRIBUTING.md and add zero-config quick start to README
- fix(cache): proper HTTP staleness for Chrome-cached pages
- fix(cache): Period policy bypasses HTTP is_stale for Chrome-rendered pages
- chore: bump all workspace crates to v2.45.22
- fix(cache): enable cache_chrome_hybrid_mem feature for Chrome cache writes
- chore: bump all crates to 2.45.21, chromey 2.38.4
- chore(agent): fix model router import
- docs(spider_agent): add SKILLS.md for engine skill integration reference
- chore(chrome): 2.45.19 root sandbox default launch
- fix: add no_sandbox() to headless BrowserConfig (#354)
- test: comprehensive crawler-test.com integration suite (302 tests, 408 URLs)
- feat: per-round model pool routing for cost-optimized automation + bump 2.45.18
- perf: skip model scoring for pools ≤ 2 models + bump 2.45.17
- test: comprehensive multi-LLM router reliability tests + bump 2.45.16
- release(cli): 2.45.15 wait_for
- feat(cli): add wait-for capabilities to spider_cli (#352)
- fix: Chrome mode honors wait_for config for networkIdle before HTML extraction
- fix: smart mode lifecycle waiting — match Chrome coverage without re-fetch
- fix: auto-retry www. URLs on SSL protocol errors — strip www prefix
- fix: reject empty HTML from all cache and seeded resource paths
- fix: invalidate empty HTML shell responses on cache read path
- feat: deferred Chrome — cache-only crawl phase before browser launch
- feat: cache-first fast path — skip browser/HTTP when cache has data
- fix: add Website::with_hedge() forwarding method + bump to v2.45.7
- feat: add work-stealing (hedged requests) for slow crawl requests
- fix: skip HTML-specific heuristics in cache empty check for non-HTML content
- chore: bump all workspace crates to v2.45.4
- fix: skip caching empty/near-empty HTML responses
- chore: bump all workspace crates to v2.45.3
- chore: bump spider to v2.45.3
- fix(uring_fs): fix compile errors when io_uring feature is enabled
- perf(io_uring): add StreamingWriter for streaming file I/O, bump v2.45.2
- feat(io_uring): expand io_uring integration for file I/O, bump v2.45.1
- refactor(agent): extract types and HTML cleaning into spider_agent_types and spider_agent_html crates
- chore(deps): major version bumps, bump v2.45.0
- chore: bump v2.44.42
- perf(website): use take() instead of clone() for subdomain base URL
- fix(website): add tests for subdomain relative URL resolution, bump v2.44.41
- fix(website): use page's own URL for relative link resolution on subdomains
- chore: clarify network event collection comment (#350)
- feat(agent): integrate llm_models_spider v0.1.9 with smart model selection
- docs: add missing feature flags, Spider Cloud example, and integration docs
- refactor(agent): move all skill content to spider_skills crate
- feat(agent): add L15-L48 skills, NEST/CIRCLE engine loops, haiku benchmark
- fix: add should_use_chrome_ai to stub RemoteMultimodalConfigs
- feat(agent): add L8-L14 skills, WAM engine loop, and Chrome AI improvements
- chore(agent): add improved steps
- test(website): fix rotation cases
- feat(agent): optimize text-only rounds and bump workspace crates
- chore: fix lint warnings and feature-combo build regressions
- fix: improve agent concurrency and ensure all-feature builds
- feat(cache): optimize automation caching and bump crates to 2.44.33
- Add crawl_smart cache parity test and bump crates to 2.44.32
- Improve cache skip-browser flows and add remote cache e2e example
- feat: add spider cloud end-to-end examples and bump crates to 2.44.30
- Update Cargo.lock for 2.44.29
- Improve remote multimodal automation reliability and release 2.44.29
- Expose optional automation reasoning in metadata and bump 2.44.28
- release: bump workspace crates to 2.44.27
- feat(spider_cli): add runtime http/headless mode controls and release 2.44.26
- chore(client): add fallback agent declaring
- docs: update dual-model example with per-endpoint URL and API key configuration
- feat: dual-model routing examples and comprehensive tests
- feat: extraction-only mode optimization for single-round data extraction
- docs: add Spider Cloud reliability integration section to README
- fix: feature flag compilation issues across multiple feature combos
- test(ignore): add test_crawl_subdomains to ignore
- fix: feature flag compilation issues across wreq, agent_full, and cache combos
- chore: bump to v2.44.20 for release
- fix: broken chrome feature — missing
relevantfield and cfg gate on detect_cf_turnstyle - chore: bump to v2.44.19 for release
- feat: integrate spider_skills crate for skill types and web challenge definitions
- feat(agent): add URL-level relevance pre-filter for crawling, bump to v2.44.18
- perf: fast-path trie protocol detection, remove redundant char boundary check
- perf: optimize trie, robot parser, and URL preparation hot paths, bump to v2.44.17
- feat(agent): add relevance gate for remote multimodal crawling
- perf: optimize core pipeline hot paths, add benchmarks, bump to v2.44.15
- chore: bump versions to 2.44.14
- fix(agent): use CDP mouse methods for all click actions to maintain position tracking
- docs: simplify root README intro
- docs: add spider_cloud to root README, improve API response handling
- chore: bump versions to 2.44.13
- feat(spider): add spider_cloud integration and S3 skills loading
- chore: bump versions to 2.44.12
- feat(spider_agent): add dual-model routing and long-term experience memory
- fix(spider): fix broken glob feature compilation and logic errors
- chore: bump versions to 2.44.10
- feat(spider_agent): improve skill triggers and board reading for web challenges
- feat(spider_agent): improve skill strategies for real browser interaction
- feat: sync skill content with improved efficiency directives
- chore: bump versions to 2.44.9
- feat(spider_agent): add Claude-optimized automation features
- chore: bump versions to 2.44.8
- feat(spider_agent): add concurrent page spawning with OpenPage action
- fix(spider_agent): update system_prompt_compiled test for locked prompt
- chore: bump versions to 2.44.7
- feat(spider_agent): integrate llm_models_spider for auto-updated vision detection
- feat(spider_agent): add inline vision model detection
- chore: bump versions to 2.44.6
- feat(spider): enable HTTP extraction without agent_chrome feature
- feat(agent): enhance CAPTCHA handling and lock system prompt
- feat(agent): improve web automation for CAPTCHAs and visual challenges
- docs(readme): add spider_agent section and link
- chore(examples): add remote_multimodal_multi example
- feat(agent): consolidate automation into spider_agent with seamless feature integration
- chore(example): add extraction example multi
- chore(website): fix scrape subscription hang
- chore(examples): add remote_multimodal
- chore: bump all crates to v2.44.3 for version parity
- fix(spider): keep spider_agent optional, add agent_webdriver feature
- feat(spider): make spider_agent a required dependency
- feat: granular usage tracking in AutomationUsage
- chore(spider): bump to v2.43.23, update spider_agent to 0.6
- feat(spider_agent): add usage limits, custom tools, and granular tracking
- feat(automation): add api_calls tracking and HTTP extraction support
- chore(spider): bump to v2.43.21, update spider_agent to 0.5
- feat(spider_agent): add complete WebAutomation parity and PromptUrlGate
- docs: expand v2 changelog with comprehensive feature documentation
- docs: update changelog for v2.43.20 and spider_agent releases
- chore(spider): update spider_agent dependency to 0.4
- feat(spider_agent): add performance optimizations for automation
- feat(spider_agent): add comprehensive automation module
- chore(spider_agent): bump version to 0.2.0
- feat(spider_agent): enhance memory with URL/action/extraction history
- feat(spider_agent): add webdriver support via thirtyfour
- feat(spider_agent): add chrome browser and temp storage support
- feat(spider_agent): add usage tracking and multimodal example
- fix(spider): fix doctest and update chromey for adblock compatibility
- feat(spider_agent): add standalone multimodal agent crate
- fix(search): use reqwest::Client directly for cache feature compatibility
- chore(docs): fix rustdoc broken intra-doc links
- feat(search): add search_and_extract and research methods
- feat(search): add web search integration with multiple providers
- perf(automation): byte-size-based smart cleaning for best performance
- feat(cache): add skip browser mode + smart HTML cleaning
- fix(automation): correct lol_html API usage and add intelligent screenshot detection
- feat(automation): add Phase 3 agentic features - autonomous agent, action chaining, error recovery
- feat(automation): add Phase 2 agentic features - selector cache, structured outputs, map API
- feat(automation): add simplified agentic APIs - act(), observe(), extract()
- feat(automation): add agentic memory for multi-round automation
- feat(automation): add prompt-based website configuration
- perf(website): remove unnecessary clones and allocations
- test(automation): add tests for JSON extraction from thinking models
- fix(automation): improve JSON extraction with proper brace matching
- feat(automation): add llm_json for robust JSON parsing from LLM outputs
- feat(automation): add HTTP extraction support without chrome feature
- fix(automation): improve best_effort_parse_json_object parsing
- fix: extract JSON from LLM responses with reasoning text
- feat(automation): add ExtractionSchema for structured extraction output
- fix(page): add remote_multimodal fields to decentralized Page struct
- feat(automation): add token usage tracking and extraction support for RemoteMultimodalEngine
- chore: update to spider_fingerprint 2.38.0 from crates.io
- feat(webdriver): integrate spider_fingerprint stealth spoofs
- docs: refresh README with streaming, Chrome, and WebDriver examples
- feat(webdriver): add automation script support
- chore(spider): bump version to 2.41.0
- feat(spider): add WebDriver support via thirtyfour crate
- test(page): add feature flag test coverage
- fix(website): gate seeded page link extraction for decentralized feature
- chore(spider): bump version to 2.40.4
- fix(website): extract links and metadata from seeded pages
- fix(page): fix metadata extraction in streaming functions
- fix(page): add metadata extraction for HTTP requests
- feat(chrome): add remote multi_modal web automation
- chore(page): add missing gemini
- chore(page): add forbidden validation retry
- chore(page): add set_duration_elasped
- chore(solvers): add lemin
- chore(website): add warm model
- feat(solver): add built in gemini nano support
- chore(mod): add gemini solve
- chore(smart): add handles
- chore(smart): add imperva handle
- chore(smart): add sessionStorage detection
- release(minor): 2.39.0
- Add
with_on_should_crawl_callback_closure(#346) - chore(website): add modify http client builder
- chore(website): add with_referrer builder
- chore(chrome): add extra cleanup caps
- chore(mod): fix request error compile
- chore(website): add hint setters
- Fix breakage on openai example (#345)
- chore(chrome): add header cleanup
- chore(smart): add cypher mismatch check retry
- chore(cookies): add cookie jar re-use
- chore(chrome): fix bytes calculation smart rendering
- chore(website): add extra_information flag
- feat(gemini): add Gemini AI support for dynamic browser scripting (#344)
- chore(website): add extra info storing
- feat(website): add cmd crawling
- fix(chrome): add automatic chrome executable detection (#343)
- chore(network): add blacklist patterns
- chore(page): fix smart rendering
- chore(website): add pub buildable crawler
- chore(website): add copy crawl status
- chore(smart): add xml request detection
- chore(chrome): add whitelist patterns
- chore(chrome): add click automations
- chore(page): add empty trim check
- chore(validation): add to list
- chore(page): add false validation
- chore(page): add template false 403
- chore(website): add initial bytes tracking
- chore(page): add empty html
- chore(chrome): add emulation check
- chore(chrome): add cache cfg
- chore(smart): add react app ssr check
- chore(smart): fix empty page assign
- chore(page): add common type list ignore
- chore(smart): add hydration list
- chore(smart): add pierced nodes selecting frames
- chore(page): add gateway timeout
- chore(timeout): add gateway delay
- chore(page): add page empty fix
- chore(smart): add nuxt detection
- chore(smart): fix redirect assign
- chore(smart): fix page rendering on re-render
- chore(smart): revert watch methods
- chore(chrome): fix rewrite content base tag
- chore(smart): fix script tag removal
- chore(smart): fix redirect page content
- chore(configuration): fix with_wait_for_idle_network0 and with_wait_for_almost_idle_network0 builder
- chore(cache): add waf url check
- chore(real_browser): fix cf detection
- chore(page): fix http network error status code
- chore(chrome): add initial document status code fix
- chore(chrome): fix compile remote cache
- Fix "real_browser" disabled (#336)
- chore(cache): fix cache_options disk flag [#334]
- feat(chrome): add remote cache support
- chore(website): add connect error status
- chore(crate): add chrome_serde_stacker flag
- chore(website): fix chrome initial crawl status
- feat(chrome): add idle_network0 almost_idle_network0 wait for
- perf(chrome): add command send only closing chrome
- chore(chrome): add default ua & ref launch chrome headers
- chore(chrome,cache): add time check retrieval
- chore(website): add dynamic link find
- chore(website): add timeout builder methods
- chore(chrome): remove extra client header
- chore(chrome): fix cache compile
- chore(chrome): fix cache options compile
- chore(chrome): add shared hybrid cache retrieval
- chore(cli): add proxy_url [#330]
- chore(chrome): fix handler config [#329]
- chore(chrome): add event data handling internally
- chore(chrome): add wire bytes blocking
- chore(cli): fix download unicode handling [#325]
- chore(chrome): add stop_loading byte limit
- chore(chrome): fix compile [#328]
- chore(parser): add base tag respecting [#323]
- spider_cli: fix duplicated argument -r (#324)
- chore(chrome): fix max page bytes cancelling
- chore(page): fix invalid dns retry handling
- chore(chrome): add type automation
- chore(website): add get_extra_links
- feat(disk): add shared_state multi profiling
- chore(chrome): add click point
- chore(chrome): fix guard lock [#315]
- chore(chrome): fix clickable selector default
- chore(page): fix title metadata extracting
- chore(tracker): add event metadata
- chore(utils): fix duration elasped handling http [#306]
- chore(chrome): fix compile auto geolocation [#311]
- chore(website): fix platform interface binding [#309]
- chore(time): fix page duration tracking [#304]
- chore(utils): fix protocol handling invalid utf8
- chore(crate): fix compile spider_fingerprint
- chore(builder): add interface and local_address binding
- chore(cli): add status_code and remote_addr flags [#303]
- chore(cli): add time feature flag [#302]
- chore(real_browser): add simple click protected
- chore(sitemap): add xml check pre-parse
- chore(crate): bump quick-xml@0.38
- chore(cli): add return_headers [#301]
- chore(cli): add full-resources arg
- chore(utils): remove unused BufMut
- chore(utils): fix fetch advance out of bounds panic
- chore(utils): fix bufmut capacity panic
- chore(website): add csp enable/disable builder
- chore(chrome): add cdp handling cf
- feat(chrome): add auto_geo detection
- chore(emulation): add cdp set hardware_concurrency
- chore(emulation): add back userAgentData emulation
- chore(docs): fix spider_utils documentation crate
- chore(crate): cleanup crate purpose
- chore(chrome): add click_and_drag
- chore(docs): update relevant info
- chore(chrome): add full user_agent_metadata handling
- chore(chrome): add drag, double_click, and click_modifiers
- chore(chrome): fix firewall flags compile
- chore(chrome): re-export firewall-rustls
- chore(chrome): re-export firewall
- chore(fingerprint): add to gpu list
- chore(chrome): add navigator.platform emulating
- feat(chrome): add max_page_bytes control
- chore(chrome): add default flag serde0 pdl
- chore(chrome): add backwards compat scroll_by
- chore(chrome): fix delta for mousewheel
- chore(chrome): add to blocklist
- chore(chrome): add to blocklist
- chore(spider_chrome): add set_extra_headers and screencast
- chore(spider_chrome): add page set headers
- chore(spider_chrome): add rust-tls flag
- chore(fingerprint): fix firefox spoof
- chore(fingerprint): allow reference viewport
- chore(chrome): add scroll method
- chore(fingerprint): fix referer defaulting
- chore(fingerprint): fix empty agent handling
- chore(fingerprint): fix referrer header
- chore(fingerprint): add header detail control
- chore(fingerprint): add public title_case_header
- feat(fingerprint): add emulate_headers
- chore(fingerprint): remove openssl build defaults
- chore(fingerprint): add optional serde compile
- chore(fingerprint): add __pwInitScripts optional spoof
- feat(fingerprint): add centralized emulate
- chore(fingerprint): fix hardwareConcurrency name
- chore(fingerprint): fix hardwareConcurrency worker handling
- chore(fingerprint): add ua_full_version automation
- chore(fingerprint): fix chrome spoof
- chore(docs): fix chromiumoxide fork intro docs
- chore(fingerprint): add navigator.hardwareConcurrency spoof
- chore(examples): fix anti_bot with_user_agent
- chore(fingerprint): fix device_pixel_ratio mac defaults
- chore(fingerprint): fix hide chrome
- chore(fingerprint): prep fingerprint canvas noise
- chore(fingerprint): add profiles start
- chore(fingerprint): add env section
- chore(fingerprint): fix userAgentData getHighEntropyValues
- chore(chrome): add to block list
- chore(fingerprint): fix webgl worker spoof gpu
- chore(chrome): default enable service_workers
- chore(fingerprint): fix navigator.userAgentData prototype
- chore(fingerprint): fix plugins spoof toJSON
- chore(fingerprint): revert plugins
- chore(fingerprint): fix plugins spoof
- chore(fingerprint): add touchscreen spoof
- chore(chrome): add to block list
- chore(fingerprint): fix screen spoof color_depth
- chore(spoof): add plugins JSON.stringify fix
- chore(fingerprint): add spoof media labels
- chore(chrome): add thread rng re-use
- chore(chrome): add to block list
- chore(chrome): add to block list
- chore(docs): fix spoof_ref rustdoc
- chore(fingerprint): add re-export spider_fingerprint
- chore(fingerprint): add spider_fingerprint workspace
- chore(chrome): add permissions and notifications spoof
- chore(spoof): fix rust doc spoof_referrer_google
- chore(chrome): add spoof media codecs
- chore(chrome): add spoof screen
- chore(real_browser): add header merging
- chore(chrome): add to block list
- chore(crate): add __basic flag no tls [#297
- chore(crate): add http2 feature flag reqwest [#297]
- chrome_remote.rs: Add note about headless-browser (#296)
- chore(docs): add chrome-headless-shell recommendation
- chore(chrome): bump cdp revision 1457408
- chore(chrome): update browser,js pdl files
- chore(page): fix returning content on errors
- chore(chrome): remove unused cfg-if
- chore(chrome): add to block list
- chore(website): add initial_waf_detected and initial_page_retried
- chore(website): add set_status
- chore(chrome): add to block list
- chore(crate): bump sonic-rs@0.5
- chore(crate): bump lock backtrace@0.3.75
- chore(chrome): add browser dispose on end
- chore(chrome): add mobile chrome headers
- chore(chrome): fix concurrent context creation
- chore(chrome): fix create new context
- chore(chrome): add frame_id navigate params
- chore(page): remove unused og meta
- chore(page): add compact_str metadata
- chore(serde): add back serde serialize AIResults
- feat(page): add metadata extracting
- chore(chrome): fix cfg chrome_args
- chore(sitemap): add auto sitemap include whitelist
- chore(real_browser): add rng init re-use
- chore(http): add default error status
- chore(chrome): add to block list
- chore(chrome): add with_stealth_advanced stealth control
- chore(chrome): add webdriver real spoof
- chore(chrome): add gpu requestAdapter spoof
- chore(chrome): split mac and linux gpu spoof
- chore(chrome): add real native userAgentData spoof
- release(minor): 2.36.114 serde configuration defaults
- Add serde(default) for Configuration. (#290)
- chore(chrome): fix plugins script
- chore(crawler): add apache,openresty 403 detection
- chore(examples): add default fingerprint disable full pass anti-bot
- chore(chrome): fix stealth fingering mixing
- chore(chrome): fix wait_for_dom
- chore(chrome): add spoof fingerprint gpu with_fingerprint_advanced
- chore(openai): box gpt configs
- chore(openai): fix run openai call
- chore(chrome): fix sitemap crawling xml files
- chore(chrome): prep gpu fingerprint disable
- chore(chrome): add plugins spoof entry
- chore(chrome): fix missing bitness
- chore(website): add requires_javascript detection
- chore(disk): add optional sqlite builder method
- chore(chrome): add to block list
- chore(stealth): fix userAgentData setting
- chore(crawler): add headers clear method
- chore(chrome): fix turnstile detection
- chore(chrome): fix pdfViewerEnabled stealth
- chore(adblock): fix adblock compile [#288]
- chore(chrome): fix fingerprint script
- chore(chrome): fix header casing
- chore(chrome): fix stealth mode initial webdriver set
- chore(chrome): add spoof navigator userAgent high entro
- chore(website): add with_dismiss_dialogs builder method
- chore(page): fix duration elasped default compile
- chore(chrome): disable runtime default
- chore(chrome): fix viewport handling
- chore(sitemap): fix budget tracking
- chore(page): add 404 status parsing
- chore(spoof): fix trailing slash ref
- chore(client): fix aggresive keep-alive
- chore(website): add get_initial_anti_bot_tech
- feat(antibot): add anti-bot detection
- chore(chrome): add anti-bot detection
- chore(xml,page): fix xml parsing html
- chore(chrome): add unique isolated world generation
- chore(chrome,sitemap): fix xml parsing sitemap
- chore(sitemap): fix crawling sitemap return html response
- chore(cookies): fix duplicate cookie provider setup
- chore(headers): add viewport width
- chore(real_browser): add header preserving
- chore(website): fix client host header
- chore(decentralized): fix compile set_url_parsed_direct_empty
- chore(chrome,sitemap): add chrome rendering sitemap
- chore(page): fix error status code handling
- chore(website): fix xml parsing links [#284]
- release: 2.36.61
- fix: errors with page.authenticate (#286)
- chore(chrome): fix sitemap xml parsing content
- chore(chrome): revert enable stealth with agent
- chore(chrome): fix custom event paused event listener
- chore(chrome): fix cache disable duplicate
- chore(real_browser): fix arch and model headers
- chore(website): fix http dup ua
- chore(headers): fix header casing http
- chore(chrome): fix unknown status code security tracking
- chore(chrome): fix gpu spoof
- chore(chrome): fix spoof webdriver linux
- chore(chrome): fix spoof runtime
- chore(real_browser): add sec bitness,form,scheme default headers
- chore(chrome): fix invalid redirects
- chore(real_browser): add missing Priority header
- chore(chrome): add rtf file handling
- chore(real_browser): add linux fp target
- chore(real_browser): fix linux default headers
- chore(chrome): fix default accept lang
- chore(chrome,headers): fix compile store headers
- chore(chrome): add missing linux headers
- chore(chrome): fix default fp overwrites
- chore(chrome): fix wait for dom exit
- chore(chrome): fix compile fp
- chore(chrome): add platform fp handling
- chore(chrome): fix casing headers raw real_browser
- chore(chrome): add to block list
- chore(chrome): add dynamic header preserve order
- chore(chrome): fix hybrid cache storing valid headers
- chore(page): fix invalid page handling content bytes
- chore(page): fix document status code handling
- chore(real_browser): add accept-encoding client-hint
- chore(client): revert ref redirect
- chore(real_browser): fix referer header order
- chore(real_browser): fix ref header order
- chore(website): add firewall bypass
- chore(real_browser): fix chrome Sec-Ch-Ua-Platform case
- chore(chrome): fix timeout subtracting
- chore(chrome): fix request_timeout default
- chore(transformations): add <document check
- chore(real_browser): add accept-language header
- chore(real_browser,chrome): add missing chrome headers
- chore(chrome): add real browser loading
- chore(chrome): add request timeout bytes ignore
- chore(crate): fix default features
- chore(decentralized): fix compile event map
- chore(chrome): add unknown status code mask
- chore(chrome): fix wait_for_dom updating
- chore(chrome): fix events 599
- chore(chrome): fix sonic-rs utf8 parse
- chore(chrome): fix generic unknown status firewall handling
- chore(chrome): add buffer timeout cancelled request
- chore(chrome): fix content hang
- feat(client): add rquest [#280]
- chore(chrome): fix queue [#282]
- release: 2.34.5
- feat(chrome): add support for wss connection (#279)
- chore(chrome): add page content asset fallback
- chore(chrome): add exact media extraction [#278]
- chore(chrome): add masked bytes env
- feat(chrome): add req/resp tracker [#254]
- chore(chrome): fix asset downloading [#278]
- chore(utils): fix DocumentSelectors serde compile error
- feat(chrome): add xhr block custom list
- chore(lib): re-export spider_firewall
- chore(chrome): add to block list
- feat(website): add crawl_timeout and with_crawl_timeout builder method
- chore(website): add robots parser reference method
- chore(chrome): add 598 chrome error
- feat(chrome): add ValidateChain web automation
- chore(chrome): fix automation scripts wait_for selector
- chore(chrome): add to block list
- chore(crate): revert fork reqwest-middleware
- chore(examples): cleanup mut evalulate
- chore(chrome): add to block list [#276]
- chore(cache): fix http-cache compile
- feat(nix): add default.nix spider,spider_cli [#266]
- chore(crate): bump async-openai@0.28
- feat(chrome): add asset handling pages [#275]
- chore(lib): remove jemalloc from lib
- chore(chrome): add ws dispose
- feat(chrome): add fetch_chrome_persisted reuse browser
- feat(website): add light website.fetch_chrome
- chore(control): remove clone on reader
- feat(builder): add with_no_control_thread
- chore(website): add setup website norobots
- feat(send): add crawl raw send
- feat(website): add chrome crawl_chrome_send thread safe
- chore(chrome): add to block list
- chore(decentralized): fix compile bytes
- chore(utils): add serde serialize DocumentSelectors
- perf(page,chrome): add direct bytes handling
- chore(chrome): fix wait_for events sequence
- chore(chrome): add navigation network cancel
- chore(chrome): fix chrome headed proxy [#272]
- chore(budget): fix shutdown
- chore(chrome): fix launch timeout
- chore(crawl): add shutdown set join_task clear
- chore(chrome): add initial page retry
- perf(conf): remove box indirection proxies, whitelist, and blacklist
- chore(chrome): fix initial page status code set
- chore(chrome): add infinite loop document reload protection
- chore(chrome): add to block list
- chore(chrome): add localhost proxy bypass
- chore(chrome): fix firewall compile
- chore(chrome): revert dispose quite context
- chore(chrome): revert dispose drop
- chore(chrome): fix ws handler disconnect dispose
- chore(chrome): add handler drop on dispose
- chore(sub): fix guard handling
- chore(chrome): add handler abort
- chore(chrome): fix default sender dispose context message
- chore(chrome): fix closing handler drop
- chore(chrome): add handler close ws errors
- chore(chrome): add web socket error closing
- chore(chrome): add about:blank proxy_bypass
- chore(chrome): remove loopback local
- feat(chrome): add bad website block chrome networking
- chore(chrome): add html error extracting
- chore(smart): fix retry client errors
- perf(smart): add base tag rewrite
- perf(bytes): remove BytesMut
- chore(chrome): add dispose_on_detach closing
- chore(smart): fix missing bytes transferred
- feature(smart): add lazy load chrome
- chore(website): add reset_status
- chore(utils): re-export is_bad_website_url
- chore(firewall): add automated list
- chore(chrome): add to block list
- chore(chrome): bump connection retries
- chore(examples): add subscribe_multiple
- chore(website): fix page empty status
- chore(chrome): add close browser cleanup
- chore(website): add new_page direct drop
- chore(docs): cleanup firewall readme
- feat(firewall): add start of spider_firewall
- chore(website): add same tasks joining
- chore(chrome): add to block list
- chore(website): fix scrape hang [#268]
- chore(glob): fix compile [#267]
- chore(chrome): add optional cache disable
- chore(chrome): add service worker default disable
- chore(chrome): add preset init commands
- chore(smart): add initial http fallback
- chore(chrome): add connection retry ws
- release(minor): add cli arg help v2.27.54
- chore(cli): trigger help page on missing arguments (#265)
- chore(chrome): add to block list
- chore(chrome): add info log errors
- chore(chrome): add WEBSOCKET_DEFAULTS env variable
- chore(website): add direct proxy control
- chore(crawler): add force proxy special protocol
- chore(proxies): add sock:// ignore http
- chore(chrome): add to block list
- chore(website): fix disk compile feature
- chore(transform): fix default features [#264]
- chore(website): fix queue ignore [#256]
- chore(chrome): add wait_for check
- chore(website): add set_url_only
- chore(chrome): add get_cookies browser context id
- chore(chrome): revert content handling
- chore(chrome): fix outer_html target
- chore(request): bump max_duration 5 mins
- chore(chrome): fix duration overflow
- chore(chrome): add cdp DOM.getOuterHTML
- chore(chrome): fix duration page handling timeout
- docs: fix unclear documentation around scraping (#262)
- chore(chrome): fix wait_for delay ordering
- chore(chrome): add to default allowed scripts
- chore(page): fix full_resources DOM watch compile [#260]
- chore(page): fix full_resources smart compile [#260]
- chore(abs): clear query pairs [#257]
- chore(chrome): fix rand@0.9 compile
- chore(crate): update rand@0.9
- chore(chrome): handle socks protocol default
- chore(page): return error for status
- chore(crate): update cron@0.15
- chore(page): cleanup unknown status code usage
- chore(chrome): add optional simd flag
- chore(chrome): enable tcp keep alive ws connection client
- chore(website): fix insert signature compile
- chore(page): add port validation links
- chore(chrome): update tokio-tungstenite@0.26
- perf(chrome): add simd json entry
- chore(chrome): add binary message handling
- chore(website): add normalize builder method
- chore(transformations): update fast_html2md@0.0.44
- chore(serde): fix configuration compile cron
- chore(page): fix empty base link joining
- chore(utils): add back trim on abs path convert
- chore(website): fix relative path merge building
- chore(website): add normalize handling chrome
- chore(website): fix subscribe guard handling queues
- chore(utils): add normalizing start
- chore(config): set default depth 25
- chore(page): remove extra clone external domains
- feat(page): add relative directory url handling
- chore(page): add status code from error
- ci(bench): fix local server install
- chore(worker): fix background runtime start
- chore(website): fix invalid protocol repair default https
- perf(website): add direct page selectors
- chore(website): add fast hostname with_external_domains
- perf(chrome): add direct about:blank check
- chore(website): fix dequeue validation [#251]
- chore(website): fix dequeue budget tracking
- chore(utils): remove extra check get_path_from_url
- chore(website): fix depth validation
- chore(page): remove duplicate asset check links validation
- chore(website): fix initial q drain [#250]
- chore(utils): fix meta content css select
- chore(utils): add meta css extracting content
- chore(utils): fix meta parsing css extraction
- chore(ignore): add xml and yaml ignore
- chore(sitemap): add chrome sitemap auto-correct
- chore(cache_chrome_hybrid): fix compile flag [#245]
- chore(sitemap): add auto find sitemap url path
- chore(chrome): add to block list
- chore(tests): fix transformations build parse
- perf(cli): add page links direct return
- chore(page): remove duplicate abs
- feat(page): add optional page base passing
- chore(page): fix parsing url detection
- perf(page): remove parsing url directly
- chore(docs): fix spider cargo docs
- chore(page): fix build reqwest error_for_status cache flag
- chore(page): fix feat decentralize compile error status
- chore(page): add new_page_streaming error
- feat(page): add page_error_status_details [#244]
- chore(connect): fix compile missing libc
- chore(license): bump 2025
- feat(cargo): add basic feature flag
- chore(chrome): fix compile fs flag
- chore(page): fix crawling initial redirect
- chore(decentralized): fix page blocked_crawl
- chore(fs): remove tentril crate
- chore(disk): fix cfg aho_corasick
- feat(page): add blocked_crawl [#242]
- feat(website): add on_should_crawl_callback [#241]
- chore(fs): fix feature flag compile fs
- chore(statics): remove scoped concurrent access lazy_statics
- chore(disk): add optional SQLite init query
- perf(smart): add oneshot rewrite handling
- chore(page): prep outputsink
- feat(io_uring): add uring for connect_phase linux
- perf(runtime): add dedicated thread for request connect
- perf(page): add max limit streaming chunk size
- chore(website): add connect layer concurrency limit
- chore(page): add goaway retry
- perf(page): add dynamic rewriter chunk size
- chore(crate): remove htm5ever crate
- chore(docs): fix crate features disk and balance
- chore(test): fix crawl subscription
- chore(static): fix concurrency access lazy_static
- chore(smart): fix re-rendering wait_for
- chore(disk): fix encoding url SQLite
- feat(disk): add hybrid disk storing links
- chore(abs): fix handling protocol
- chore(chrome): add to block list
- chore(website): fix http crawl
- chore(chrome): add to block list
- chore(abs): add safety check joining
- chore(abs): fix abs handling domain
- chore(page): fix block asset handling
- chore(chrome): add to block list
- chore(chrome): ignore block_js on top pages
- chore(chrome): fix adblock compile
- chore(chrome): fix allowed critical rendering script interception
- chore(chrome): fix cdp serde support test
- chore(chrome): fix frame inline navigation
- chore(chrome): add to block list
- chore(chrome): add build generate blocking
- chore(chrome): add to block list
- chore(docs): fix budget feature flag [#236]
- chore(chrome): add to block list
- chore(chrome): add to block list
- chore(chrome): add to block list
- chore(chrome): add to block list
- chore(crate): bump ego-tree@0.10
- chore(chrome): add reusable remote connect client
- chore(chrome): add tokio-tungstenite
- chore(balance): add simple rebalance
- feat(page): add remote_addr feature flag [#226]
- chore(chrome): add to block list
- chore(chrome): add to block list
- chore(crawler): add to block list
- feat(balance): add global semaphore balancing
- chore(chrome): add ad and analytics block list
- chore(chrome): add ad and analytics block list
- chore(crawler): add blocklist items
- chore(crawler): add blocklist items
- chore(chrome): fix xhr interception
- chore(chrome): fix bytes timeout
- chore(chrome): add block list items
- chore(chrome): add block list items
- chore(chrome): add linkd custom blocker
- chore(chrome): revert adblock-rs default
- chore(chrome): add adblock items
- chore(chrome): default adblock engine
- chore(chrome): fix other and manifest ignore
- perf(chrome): add hydration ignore and custom website interception layer
- chore(smart): add meteor.js detection
- chore(chrome): add ads and tracking ignore list
- feat(chrome): add page bytes collecting
- perf(chrome): add xhr interception
- chore(crawler): add full analytics ignore
- chore(page): ignore js void
- chore(chrome): add analytics ignore scripts
- chore(transform): fix streaming repeated text
- feat(transform): add send text transform streaming
- feat(transform): add transform_content_send async streaming
- chore(interning): add optional string-interning
- chore(page): fix url encode handling mismatch
- chore(website): fix crawl establish domain removal [#233]
- chore(page): fix page link return full urls
- chore(clippy): fix lint
- chore(clippy): fix website display
- chore(website): add url log info
- chore(website): fix throttling request
- chore(page): add content-type encoding respect streaming rewriter
- chore(website): fix delay handling [#232]
- chore(examples): fix default entry
- chore(crawler): add default js enable intercept
- chore(website): fix limit budget breaking
- chore(crawler): fix backoff thread infinite loop
- chore(tracing): fix tracing ignore
- chore(backoff): add backoff max timeout
- chore(chrome): add join wait
- chore(chrome): add max wait for
- chore(website): add semaphore cancel release
- chore(chrome): add init state handling poll
- chore(abs): fix page paths infinite handling
- chore(tokio): remove parking_lot
- chore(chrome): revert page valid url parsing
- chore(chrome): add invalid network status code handling
- chore(redirect): add final url handling errors
- chore(logs): fix fetch error message
- chore(tracing): skip attempt navigation
- chore(chrome): fix browser close on initial erorr
- chore(abs): add ignore protocol list
- chore(abs): remove extra asset handling
- perf(abs): remove extra clone on abs handling
- chore(website): fix abs char boundary handling
- perf(website): add conditional url parsing budget check
- chore(website): fix protocol merging resources
- chore(website): fix budget immediate break
- chore(crawler): fix absolute url handling
- chore(website): fix shutdown break loop
- chore(tracing): add shutdown tracing
- chore(tracing): fix establish link call
- chore(tracing): add skip params
- chore(tracing): add fetch tracing
- chore(chrome): fix intercept passing ignore
- chore(examples): add chrome remote connection
- chore(tracing): add main entry trace
- chore(transform): fix text transform ignore elements
- chore(cache): fix build default cache backend
- chore(transform): fix text ignore handler
- chore(chrome): fix request interception auth enabling
- chore(chrome): fix connection loop hanging
- chore(tracing): add named tasks
- chore(website): remove extra chrome crawl method
- chore(chrome): fix semaphore drop on error
- chore(trace): add tracing tasks/sets
- chore(crate): add tokio tracing flag
- chore(transform): fix text transform ignore
- chore(page): fix full_resources [#230]
- chore(website): fix streaming hang
- chore(crawler): add rewriter text extracting
- chore(cache): fix http mem cache backend
- chore(semaphore): fix semaphore handling tasks
- chore(chrome): add proxy-authorization cdp errors
- chore(chrome): remove set_headers extra clone
- chore(chrome): add loopback only localhost
- chore(chrome): add localhost loopback remote connection
- perf(transform): add rewriter markdown handling
- chore(chrome): prep capturing anchor event listeners no hrefs
- chore(page): add safe char handling extensions
- perf(page): collect bytes without sink
- perf(page): add stream full resources
- perf(smart): add atomic re-render handling
- perf(page): add streaming chunks rewrite
- chore(chrome): add only success check handling
- chore(page): add box html bytes
- perf(page): pin html pre-parsing
- feat(config): add concurrency limits builder method
- perf(smart): add ahocorasick js handling search
- perf(smart): fix js need determination
- feat(page): add nextjs build ssg path handling
- chore(chrome): add page url final redirect handling
- perf(chrome): add skip other resources
- chore(website: add full resources only_html check
- chore(config): add only_html builder config
- chore(config): add only_html configuration
- chore(chrome): add reqeust timeout
- chore(chrome): add serde device type
- chore(chrome): add dismiss_dialogs config
- chore(chrome): add alert polyfill
- feat(real_browser): add randomize viewport
- chore(website): add missing with_wait_for_idle_dom builder
- feat(chrome): add web automation wait for dom
- chore(page): fix page absolute join
- chore(website): add increased timeout error handling
- chore(crawl): fix joinset blocking task
- chore(transformations): fix filter markdown/commonmark
- chore(openai): add json_structure handling js browser events
- chore(smart): fix establishing whitelist/blacklist
- chore(budget): fix whitelist/blacklist budgeting
- chore(transform): add dynamic rewriting html
- chore(transforms): add optional ignore tags
- chore(smart): add layui.js and jquery detection
- chore(fs,chrome): fix compile viewport handling
- chore(openai): fix response_format types
- chore(transformations): add filter_svg
- chore(encoding): fix auto encoding detection
- chore(page): add network error status code defaulting
- chore(website): add initial status code handling
- chore(smart): fix smart page links handling
- chore(page): fix link handling protocols
- chore(utils): fix try exact match
- chore(chrome): add automation all routes handling
- chore(crawler): fix tld and subdomain handling
- chore(chrome): fix window navigator stealth handling
- chore(transform): revert default output transformed encoding
- chore(encoding): add html lang auto parsing
- chore(transformations): add html file extensions list
- chore(transformations): add root selector across formats
- chore(page): add waf_check exposure
- chore(transformations): add filter svg markdown
- chore(links): fix default robots handling check
- chore(encoding): fix regex build auto_encoder
- chore(transformations): fix script encoding
- chore(transformations): add html_to_xml format
- chore(utils): fix serde serializing selectors
- chore(config): cleanup unused interception configs
- feat(utils): add xpath support
- chore(chrome): add bezier mouse movements
- chore(config): add serializable crawl configuration
- chore(page): add empty page validation
- chore(backoff): add gateway backoff retrying
- chore(status): add rate limit and server status tracking
- chore(page): add full handling status codes retrying
- chore(page): fix indexing convert abs
- chore(chrome): fix smart mode wait for page
- chore(page): fix retry handling
- chore(chrome): add smart mode wait for navigation
- chore(chrome): add return headers and cookies
- chore(encoding): fix smart mode loss encoding
- chore(page): fix url join empty slash
- chore(chrome): patch logs stealth mode
- chore(chrome): add waf mouse movement
- chore(chrome): add spoofed plugins
- chore(smart): add smart mode chrome retry
- chore(chrome): add extra http headers
- chore(chrome): fix request interception remote sockets
- feat(website): add retry and rate limiting handling
- chore(chrome): add cookie setting browser
- chore(chrome): fix concurrent websocket page connecting
- chore(chrome): fix proxy handling websockets
- chore(website): add semaphore negating
- release(minor): 2.6.19
- chore(website): add drain_links
- chore(crate): fix all feature flag compiling
- chore(page): add initial start domain tracking
- chore(crate): fix hickory typo
- chore(crate): default tls reqwest_native_tls_native_roots
- chore(config): add preserve host header configuration
- chore(links): add default type
- chore(spider): revert parent host change
- chore(page): fix link parsing redirected domains
- feat(transformations): add spider_transformation crate
- perf(cpu): add bucket backend string interning
- perf(mem): add buffer backend string interning
- perf(website): add string interning links visited
- chore(chrome): add public interception
- chore(smart_mode): revert set_content
- chore(docs): update intro title about
- chore(utils): add trie match all base path
- chore(examples): add css scraping example
- perf(chrome): add major screenshot performance custom command
- chore(chrome): fix chrome interception setup
- perf(chrome): add concurrent request interception
- chore(chrome): fix navigation setup sub pages
- chore(chrome): add chrome response headers
- chore(chrome): fix frame establishing
- chore(encoding): add html parse auto encoding
- chore(sitemap,chrome): fix compile intercept
- chore(chrome): remove intercept tasks on complete
- release(minor): 2.2.13
- Fix infinite loop (#213)
- chore(chrome): fix limit 1 handler hang
- chore(chrome): fix handler hang
- chore(chrome): add valid page check
- chore(chrome): fix screenshot timeout
- chore(chrome): add lazy chrome env connection url
- chore(deps): update auto_encoder@0.1.4 binary file check fix
- chore(deps): add chromiumoxide@0.7.0 and auto_encoder
- chore(page): revert page links mut
- perf(page): add pre-condition asset check parsing
- feat(encoding): add auto detect encoding [#207]
- chore(config): fix crawl budget manual set
- chore(config): fix budget reset on crawl end
- chore(chrome): fix remote connect dispose
- chore(chrome): fix remove connect channel send handler break
- feat(page): add return page links configuration
- chore(chrome): fix handler shutdown on ws unexpected
- chore(decentralized): fix smart mode compile
- perf(chrome): remove extra browser clone
- chore(chrome): fix chrome new page hang
- chore(scrape): add sitemap and smart [#206]
- chore(chrome): fix chrome handler break page hangs
- chore(cookies): fix missing cookies flag
- chore(crate): fix zstd wasm build
- chore(page): add http cookies map return
- chore(deps): re-export encoding_rs
- Update README.md (#203)
- chore(utils): release@0.2.0
- chore(scrape): fix visited_links storing
- chore(page): add get_chrome_page chrome page ref
- chore(v2): fix scrape API
- chore(minor): remove accidental typing parent_host
- chore(deps): update quick-xml@0.36.0
- chore(crate): add wasm entry target
- feat(chrome): add trie for execution_maps and web_automation_maps
- feat(chrome): add web automation scripts
- feat(adblock): add network adblocking
- chore(website): add website build error
- chore(fs,chrome): fix chrome fs storing [#198]
- chore(chrome): fix fingerprint and initial eval scripting
- perf(smart): add js assets phf set
- Fixing clap issues #195 (#196)
- chore(openai): fix max_tokens calc
- chore(chrome): add request allow channel cancelled send
- chore(page): add take parsed url
- chore(utils): add clean text element extracting content
- feat(spider_utils): add util crate for css scraping
- chore(regex): fix extra ref compact string
- chore(deps): update compact_str@0.8.0
- perf(cli): add crawl performant crawl streaming
- chore(cli): add sync flag crawl handling
- perf(cli): add subscription streaming scraping and storing
- perf(robots): add fast top pass robots check
- chore(chrome): fix wait_for_selector and wait_for_event
- feat(chrome): add exact page execution_scripts support
- chore(serde): add wait_for page_navigations defaults
- chore(chrome): add serde wait_for
- chore(robots): fix robots text path matching root
- chore(docs): add discord chat badge
- chore(bench): add debian wget install check [#191]
- chore(utils): add max bytes limiting env
- chore(robots): fix robot disallow respect
- chore(cli): add headless and smartmode install examples
- chore(website): fix sitemap regex compile
- chore(minor): fix license path
- chore(deps): update regex@1.10.5
- feat(whitelist): add whitelist only paths
- chore(budget): fix budget overflow
- feat(sem): add shared queue strategy
- chore(chrome): fix non chrome agents spoofing
- chore(website): fix type blacklist
- chore(page): add invalid url handling
- chore(cli): fix params builder optional handling
- chore(chrome): fix missing fingerprint initial establish
- perf(crawl): add limit detection crawling
- chore(chrome_intercept): fix intercept spawn handling
- perf(website): fix semaphore distribution
- chore(website): fix chrome stealth handling agent
- chore(website): add safe semaphore handling
- chore(website): fix crawl status persisting
- release: 1.95.27
- chore(robots): add max delay respect
- chore(website): fix crawl limit immediate exit
- chore(cli): fix limit respecting
- chore(crate): unpin smallvec
- chore(robots): fix respect robots [#184]
- chore(website): add dynamic sempahore multiplier
- chore(deps): bump chromiumoxide@0.6.0
- feat(reqwest): add zstd support
- chore(cli): fix serde_json pin
- chore(openai): fix gpt_config default serde deserialization
- chore(examples): fix subscribe stdout end sequence
- chore(page): add set_url page
- chore(openai): add tracking, ads, and meta default clean
- chore(openai): remove hidden content from request
- chore(openai): compress base prompt
- chore(chrome): remove unnecessary page activation
- chore(openai): add link and iframe to clean removal
- chore(openai): add default clean on resource
- chore(openai): fix smart mode passing target url
- chore(openai): revert prompt spaces
- feat(openai): add error tracking request
- chore(openai): fix spaces base prompt
- chore(html5ever): add comment endline tokenizer parse fix
- feat(real_browser): add http simulation headers
- feat(cache): add chrome caching between http
- chore(cache): add chrome hybrid caching
- feat(subscriptions): add semapre capacity matching
- chore(guard): add subscription auto drop cancel
- chore(openai): add fallback full context reduction
- feat(cache): add top level cache manager
- chore(chrome): fix blocked content waf detection
- chore(chrome): add interception handling waf detection
- chore(website): add missing smart mode init status handling
- chore(website): fix blocked status code reset
- chore(chrome): add proper status code detection
- feat(chrome): add dynamic chrome connections
- feat(spoof): add referrer spoofing
- feat(ua_generator): add verified real user-agents ua_generator@0.4.1
- chore(real_browser): add single call to handle iframe
- chore(chrome): fix intercept hang
- chore(chrome): fix domain host validation interception
- chore(real_browser): fix frame click action
- chore(real_browser): add duration timeout wait iframe
- chore(real_browser): add explicit form iframe checking protected bypass
- chore(docs): fix benchmarks target url
- chore(website): fix url getter function name
- chore(crate): unpin reqwest 0.12.4 - 0.12
- chore(examples): update default domain spider.cloud
- chore(docs): fix repo badges
- chore(openai): add messages trim_start
- chore(worker): fix headers flag compile
- chore(docs): update cloud hosted link - spider.cloud
- chore(chrome): fix proxy server headless connecting
- feat(openai): add screenshot js execution after effects
- feat(openai): add response caching
- docs: fix broken glob url link (#179)
- chore(openai): add detailed gpt results output
- chore(parser): update fast_html5ever@0.26.4 crate compile
- chore(docs): add subscribe_guard feat flag req note
- chore(docs): add examples cargo doc
- chore(openai): add custom api key config
- chore(docs): add subscribe example
- chore(docs): fix chrome missing link wait_for_delay
- chore(website): add url consistency
- chore(openai): fix prompt deserialization
- chore(configs): add prompt deserialization
- chore(configs): add option openai configs simple serde
- chore(openai): add path matching prompt determination
- chore(config): cleanup zero cost sub features
- chore(crate): remove hard pins on common crates
- Fix typo in README file (#176)
- chore(website): fix sitemap chrome build
- chore(crate): remove serde pin
- chore(openai): fix compile chrome
- feat(rss): add rss support
- feat(fingerprint): add fingerprint id configuration
- chore(page): return all page content regardless of status
- chore(openai): fix svg removal
- feat(openai): add extra data gpt curating
- chore(openai): add credits used response
- feat(openai): add multi driven prompts
- feat(real_browser): add real browser feature flag for chrome
- chore(crate): default enable http cookies
- chore(page): add cold fusion file detection
- chore(openai): add html_rewriting for max_tokens
- chore(links): allow extra links assigning all states
- chore(screenshots): fix screenshot format casing
- chore(examples): fix chrome_scheenshot_with_config intro
- chore(openai): add serde gpt configs
- chore(docs): update clarity on openai flag env key
- chore(docs): add OpenAI section
- chore(openai): add explicit model checking
- chore(openai): add GPTConfigs new shortcut
- Openai/chrome driver (#174)
- chore(tokio): enable io-std feature
- chore(chrome): fix semaphore limiting scrape
- chore(docs): remove discount hosted
- chore(deps): update reqwest@0.11.26
- feat(chrome): add evaluate on new document script handling
- bench(deps): update criterion@0.5.1
- chore(guard): add sub guard full crawls
- chore(examples): fix queue gathering alt pages
- feat(q): add mid crawl queue
- chore(website): add set extra links extended crawls
- chore(website): add set_url re-usablity
- chore(smart): fix smart mode http defaults
- feat(chrome): add auth challenge response
- chore(sitemap): fix chrome sitemap handling
- perf(chrome): add direct page navigation
- bench(docs): fix page count
- feat(chrome): add chrome_headless_new flag
- chore(chrome): fix page concurrency
- chore(page): fix network wait_for_event
- chore(chrome): add pathbuf outdir
- chore(chrome): fix page chrome close
- chore(chrome): add conditional chrome close flag chrome_store_page
- chore(chrome): fix wait_for_idle_network break
- chore(chrome): fix intercept early exit
- chore(chrome): fix page hang
- chore(clippy): fix join_handle warnings
- feat(chrome): add wait_for configuration delay, selector, and idle network
- chore(chrome): add prep for custom wait_for_events
- chore(chrome): fix final_url page when wait_for_network_idle
- chore(chrome): fix page url determination
- bench(perf): add local dev server for testing (#167)
- chore(chrome): fix wait_for_network page extracting
- chore(chrome): fix bytes handling
- chore(website): remove extra conditional builder methods
- chore(website): add direct assign http client method
- chore(docs): add spider hosted coupon code
- chore(docs): fix warnings across feature flags
- chore(deps): update tokio@1.36.0
- release(minor): add response headers feature
- Felix engl/main (#164)
- chore(cli): add accept_invalid_certs arg
- chore(page): fix subdomain detection
- feat(config): add with_danger_accept_invalid_certs builder method
- chore(website): add url empty whitespace handling
- chore(cli): fix full resource include external domains
- feat(cli): add crawl page limit
- chore(page): fix external domains include
- chore(page): add shtml resource allow list
- perf(semaphore): fix dynamic sem limit scaling
- perf(runtime): remove yielding switching
- feat(chrome): add new waitforidlenetwork timeout control
- chore(sitemap): fix gathering all links
- feat(chrome): add wait_for_network_idle
- chore(lib): fix clippy suggestions
- chore(examples): add subscribe_download example
- chore(examples): fix download file path
- chore(sitemap): fix extracting multiple sitemap urls
- chore(website): fix un-controlled shutdown
- chore(website): fix http scrape persist links between crawls
- chore(website): re-use crawl handle check
- chore(docs): add subscribe_guard example
- chore(chrome): fix chrome initial scrape page set
- chore(chrome): fix chrome glob compile
- chore(scrape): fix store initial page
- perf(scrape): add shared arc
- chore(website): add error log scrape
- chore(sync): add subscription guard
- chore(chrome): add screenshot default compilation
- chore(sync): add unsubscribe channels
- chore(chrome): fix chrome screenshot storing
- chore(chrome): return bytes screenshot helper
- feat(chrome): add viewport configuration
- chore(docs): cleanup website & config
- feat(config): add full_resources manual set
- chore(config): fix cache compile chrome
- perf(page): fix inline hot link extracting
- chore(chrome): fix cache enabling/disabling
- test(cache): fix enable cache
- chore(config): fix limit configuration builder
- chore(config): add simple crawl limit builder method
- feat(chrome): add override locale emulation
- feat(chrome): add timezone override config
- chore(chrome): fix request interception execute self hosted scripts
- chore(examples): add glob example
- feat(config): add re-usable configuration building
- perf(cron): add async_job@0.1.4 lock fix
- chore(deps): update async_job@0.1.3 panic removal
- chore(sitemap): add persistable chain crawls
- feat(sitemap): add crawl_sitemap
- perf(encoding): add html size buffer allocation streaming
- feat(encoding): add dynamic streaming encoding html
- chore(configuration): add full builder confs
- chore(sitemap): fix scrape raw handling
- chore(website): add full builder defaults
- perf(budget): remove extra string allocation validation
- perf(robots): remove extra mem allocation link validation
- perf(control): add rwlock crawl control
- chore(stealth): add default method
- feat(redirects): add redirect limit expose with server respects
- chore(control): add crawl_id for explicit website control
- feat(depth): add crawl depth level control
- chore(chrome_intercept): fix intercept redirect initial domain
- feat(cache): add caching backend feat flag (#156)
- chore(chrome_intercept): fix host match blocking assets
- chore(redirects): fix subdomain checking domain
- feat(chrome_intercept): add chrome_intercept request interception flag
- feat(redirect): add transparent top redirect handling
- chore(decentralize): fix glob build
- perf(scrape): remove extra clone page broadcast
- feat(chrome_store_page): add feat flag chrome_store_page and screenshot helper
- chore(smart): fix nextjs static app detection
- perf(smart): add re-render html dispose
- chore(website): add smart mode method default
- perf(smart): prevent static app re-rendering
- Smart mode (#154)
- chore(website): add with_cookies builder method
- chore(website): add auto handle transport
- chore(bench): fix criterion table count
- chore(website): revert raw method flags
- chore(control): fix control task abort after crawl
- feat(chrome): add chrome_screenshot feature flag
- chore(website): add website.stop handling shutdown
- chore(crate): re-export async_job
- chore(website): add re-crawling clearing
- chore(cron): move cron feature to async_job crate
- chore(exports): add smallvec re-export
- chore(website): add chrome flag over raw HTTP methods
- chore(website): add enum string crawlstatus crontype
- chore(docs): fix fs feature default
- chore(docs): add node.js port docs
- chore(website): add crawl invalid state
- feat(client): add experimental http3 support
- chore(cron): add ref runner stop
- chore(feat): add public features
- chore(napi): add rust_tls flag
- feat(napi): add napi support
- chore(cron): remove default feature
- feat(cron): add cron feature flag (#153)
- feat(cookies): add cookie jar optional feature
- chore(website): remove public expose setup
- chore(chrome): fix raw page build
- chore(deps): bump tokio@1.34.0
- chore(ahash): bump ahash@0.8.6 AES ARM instructions fix
- chore(website): add crawl_concurrent_raw method (#152)
- chore(chrome): add main chromiumoxide crate
- release(minor): 1.49.5
- Return status code on error (#151)
- test(website): fix invalid configuration test
- chore(website): fix crawl re-run host determination
- chore(cli): add error output incorrect website url
- chore(cli): add http check cli website url
- chore(chrome): fix chrome headless headful args
- chore(docs): cleanup website
- chore(feat): add reqwest_json feature flag re-export use
- chore(scraper): fix text processing ignore script/style
- feat(page): add status code and error message page response (#148)
- chore(page): fix subdomain entry point handling root (#146)
- chore(docs): add missing sync default
- chore(config): add missing with_on_link_find_callback [#145]
- chore(chrome): add error log instance launch
- chore(docs): spider cloud hosted intro
- chore(chrome): update chromiumoxide_fork@0.5.12 safe ws connection handling
- chore(chrome): fix tungstenite remote headers ddos vulnerability
- feat(external): add wildcard handling all domains found
- chore(docs): remove early discount
- feat(cli): add external domains grouping
- feat(cli): add crawl budgeting
- chore(docs): fix spider hosted promo
- chore(docs): add hosted early launch oss discount
- chore(scraper): add element attribute extracting
- docs(fix): fix error in "scrape/gather html" section (#137)
- chore(deps): remove matches
- bench(node): disable bench invalid output
- chore(sync): fix build missing broadcast
- chore(docs): add respect_robots_txt delay note
- ci(bench): add full scopes
- chore(docs): add budget feature flag req
- chore(worker): fix scrape fetching content
- chore(redirect): add fast chrome redirect determination
- chore(chrome): fix build page missing mut
- chore(budget): allow budget public access
- perf(budget): use flag to prevent degradation
- feat(budget): add crawl budgeting pages
- feat(page): add page redirect destination exposure [#127]
- chore(worker): fix description of the crate
- chore(glob): fix link callback #136
- chore(docs): add hosted pay as you go example display
- chore(cli): fix links json output
- feat(external): add external domains grouping
- chore(benches): default proxy to spider worker
- chore(deps): update bytes@1.5.0
- chore(sitemap): fix sender drop
- feat(sitemap): add sitemap crawling feature flag
- chore(chrome): fix ip connecting
- chore(chrome): fix remote page closing
- chore(chrome): fix proxy remote interface connections
- chore(chrome): fix remote browser droping
- chore(chrome): fix remote debug ws find
- feat(chrome): add CHROME_URL env var remote connections
- chore(crawler): fix chrome_cpu flag launch args
- chore(chrome): add CHROME_BIN env variable handling
- feat(chrome): add stealth mode
- feat(chrome): add proxy networking
- feat(chrome): add chrome_cpu feature flag
- chore(chrome): fix content extracting after navigate
- chore(fetch): remove duplicate funcs
- chore(api): move chrome to features
- chore(crawl): remove crawl sync api
- chore(chrome): fix chrome browser shutdown
- feat(chrome): enable chrome rendering page content
- feat(website): add crawl status
- chore(docs): add missing feature flag info
- chore(exports): add tokio_stream re-export
- feat(page): add duration tracking
- chore(docs): add new hosted service link
- chore(website): add domain parsed getter
- chore(website): add domain name getter
- chore(page): fix trailing slash url getter
- chore(full_resources): fix capturing link tag
- chore(cli): fix resource extensions [130]
- chore(pages): fix full_resource gathering scripts
- feat(page): add byte storing resource (#131)
- chore(cli): add regex and full_resources flags
- chore(sync): fix initial link sub capture
- chore(sync): fix subscribe handling
- feat(sync): add broadcast channel subscriptions v1.36.0
- chore(utils): fix cfg control feature
- chore(lib): add full re-exports
- chore(scrape): add resource in on_link_find_callback
- chore(page): fix domain name clean handling
- perf(url): update percent-encoding@2.3.0
- perf(css): improve link tree parsing nodes (#126)
- chore(website): fix crawl establish link handling
- chore(website): fix cfg crawl establish
- chore(bench): fix env var massive bench
- feat(headers): add http header configuration
- perf(regex): use regex set one pass (#125)
- chore(deps): pin versions and update tokio@1.29.1
- chore(docs): add builder pattern configuration usage
- feat(builder): add builder pattern [#115]
- chore(spider): add .jsp file detection support
- chore(bench): add env crawl massive target url
- chore(feats): remove spoof ua_generator default
- chore(regex): fix compilation
- feat(cli): add static markup downloading
- chore(deps): update jsdom@0.0.11-alpha.1 SO fix
- chore(deps): update deps to latest
- chore(docs): update bench speed compare
- perf(workers): add increased semaphore limits (#123)
- chore(decentralized): revert semaphore
- chore(page): fix extra url parse selector gathering
- chore(page): remove double process conditional check
- chore(page): fix asset detection
- release(minor): add feature js script link extracting v1.31.0
- feat(js): add init of script parsing (#121)
- chore(page): fix crawl processing ignore assets
- chore(docs): fix crawl sequential docs
- chore(worker): fix cfg scrape build
- perf(worker): drop semaphore usage decentralized
- feat(worker): add tls support
- test(glob): fix http proxy test case
- chore(robots): fix robots parser link gathering
- chore(request): add custom domain redirect policy
- chore(glob): fix glob crawl establish
- chore(crawl): fix crawl asset detection and trailing start
- perf(strings): use case_insensitive_string as primary string (#117)
- chore(page): fix trailing slash links find
- chore(decentralized): fix transport type response return
- bench(decentralized): add decentralized worker split case (#116)
- release(minor): feat url glob and hybrid temp disk support
- chore(docs): add glob section
- feat(fs): add temp storage resource handling (#112)
- chore(glob): fix base subdomain tld crawls
- URL globbing (#113)
- chore(network): fix status code handling valid resource
- chore(proxy): fix proxy interception and handling
- chore(socks5): fix proxy handling
- ci(proxy): add local socks5 server
- test(spider): fix crawl proxy case
- release(spider): 1.28.0 proxy support
- feat(proxy): add request proxy support
- perf(io): add bytes_stream body handling
- chore(docs): fix benchmark page count
- perf(sem): fix semaphore count (#109)
- chore(crawl): fix link domain handling
- chore(blacklist): fix option handling
- feat(config): add http2_prior_knowledge support for http2 request
- perf(regex): compile regex start of crawl
- chore(worker): fix selector handling
- chore(docs): fix feature headings
- chore(docs): fix website user_agent assign
- feat(flexbuffers): add flexbuffers serde decentralization (#105)
- perf(crawl): remove unused selectors building
- feat(full_resources): add flag for gathering all content related to domain
- feat(serde): add serde de/serialize case-insenstive strings
- chore(website): fix getting pages
- chore(worker): add string_concat url format
- perf(decentralized): add link gathering decentralization (#103)
- feat(control): move crawl control under feature flag
- chore(decentralized): fix proxy traffic handling
- feat(decentralize): add start of decentralized worker
- chore(html5ever): add create_comment stub
- chore(crawl): handle invalid domain panic
- chore(minor): build client without checking
- perf(crawl): remove extra yield on task join
- perf(async): add current handle runtime set
- chore(examples): fix htr react example
- perf(crawl): fix page link stream switching logic
- perf(scraper): add html5ever fork ignore comments + errors
- perf(task): fix semaphore task limiting (#102)
- perf(crawl): add single shared arc concurrent
- chore(page): add optional html
- bench(parse): add stream scraper bench marks
- chore(crawl): fix scheme mismatch crawling
- perf(crawl): reverse logic for extension handling
- bench(crawl): add massive crawl benchmark init
- chore(crawl): fix fragment handling of url ego walk
- chore(crawl): fix extension handling of domains
- chore(crawl): fix safe ignoring extra dot ext
- perf(parser): add fast concurrency setup (#100)
- chore(crawl): fix crawl reset active links
- perf(scraper): add fast element node creation
- perf(scraper): fix cache and hasher
- build(deps): add scraper to packages
- perf(crawl): reduce memory usage gathering links
- perf(crawl): reduce memory usage and make cb optional
- perf(css): update css3 selectors fast_scraper@0.14.3
- perf(crawl): reduce mem allocations css selectors and network client
- perf(ua): fix ua memory alloc for client
- chore(crawl): fix link callback handling on pre gather
- chore(robots): fix sitemap last write time
- perf(crawl): add join handle task management (#99)
- perf(scrape): add compact selectors
- perf(scraper): add ahash imp of scraper fork
- perf(crawl): add memory efficient strings (#98)
- feat(accuracy): improve crawl handling very large websites
- chore(crawl): add optional duration to disable timeout
- chore(docs): add reference examples instead of slow page gathering
- chore(docs): add missing scrape section
- build(tokio): remove unused net feature
- perf(client): add mass scan configs (#97)
- perf(crawl): add pre link gathering boost
- perf(crawl): remove mem usage on robot parser
- perf(crawl): add optional heap blacklist_url
- chore(crawl): remove double hashmap concurrent runs
- chore(crawl): add heap links_visited usage (#95)
- chore(crawl): remove active crawl link storing in self
- chore(crawl): fix loop break
- perf(tokio): enable parking_lot (#93)
- chore(crawl): add end breaking
- chore(minor): remove unnecessary await on handler config
- perf(inlining): fix cold path inline removal
- benches(cargo): fix install deps
- chore(hash): fix borrow handling links visited (#91)
- perf(inline): add inline opts (#90)
- perf(links): add ascii case-insensitive handling (#89)
- perf(parsing): add fast link serialization extracting
- chore(docs): fix crawl doc
- chore(scrape): add optional page setup
- chore(docs): fix robot parser example
- perf(crawl): remove static url handling robotparser
- perf(crawl): add top level subdomain tld base extracting
- chore(crawl): add case insensitive and trap handling
- Converted clippy warned single character strings to chars (#87)
- chore(crawl): add top throttle setup
- chore(crawl): fix link delay between
- perf(crawl): add top level selector building
- chore(bench): add hyperfine mac benchmarks
- chore(ignore): add img and xlsx to ignore
- Compiler Warnings (#82)
- chore(parser): add .mov file ignore
What's Changed
- feat: add on_link_blocked_callback for robots.txt blocked URLs by @zanmato in #394
- fix(website): crawl_raw uses raw sitemap chain on chrome builds by @zanmato in #393
- Fix 500ms timeout for proxy error statuses 598/599 by @waamm in #395
- • Fix Unbounded Task Spawning in Sitemap Crawl by @Uinelj in #397
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #399
- browser: per-crawl control map for optional chrome enhancements by @j-mendez in #400
- fix: concurrency/memory/panic audit hardening (v2.52.7) by @j-mendez in #401
New Contributors
- @zanmato made their first contribution in #394
- @waamm made their first contribution in #395
- @Uinelj made their first contribution in #397
- @dependabot[bot] made their first contribution in #399
Full Changelog: v2.48.4...v2.52.2