From 15f6f52ef91e361f29b3ded186f31ef28f827249 Mon Sep 17 00:00:00 2001 From: Recep S <22618852+us@users.noreply.github.com> Date: Mon, 6 Jul 2026 23:30:22 +0300 Subject: [PATCH] chore(main): release 0.21.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 30 ++++++++++++++++++++++++++ Cargo.toml | 22 +++++++++---------- crates/crw-server/openapi/openapi.json | 2 +- docs/openapi.json | 2 +- mcp/crw-mcp-darwin-arm64/package.json | 2 +- mcp/crw-mcp-darwin-x64/package.json | 2 +- mcp/crw-mcp-linux-arm64/package.json | 2 +- mcp/crw-mcp-linux-x64/package.json | 2 +- mcp/crw-mcp/package.json | 10 ++++----- sdks/python/pyproject.toml | 2 +- sdks/typescript/package.json | 2 +- server.json | 2 +- 13 files changed, 56 insertions(+), 26 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 71e95baf..d3535156 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.20.0" + ".": "0.21.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index d84631f9..59e2a133 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,36 @@ All notable changes to CRW are documented here. +## [0.21.0](https://github.com/us/crw/compare/v0.20.0...v0.21.0) (2026-07-06) + + +### ⚠ BREAKING CHANGES + +* **api:** error responses now use `errorCode` instead of `error_code`. The managed API already strips the field, so managed clients are unaffected; self-hosted clients parsing `error_code` should read `errorCode`. + +### Features + +* **cli:** add crw bench FRAMES harness ([fb78bcb](https://github.com/us/crw/commit/fb78bcb57b3add83db28e5ecdbaf39ef39d067fe)) +* **cli:** bench A/B flags, concurrency, crash-safe writes ([7eb059e](https://github.com/us/crw/commit/7eb059edac5ea1f857aca34e97a83145928064ee)) +* **core:** add evidence & provenance primitives ([4a638a0](https://github.com/us/crw/commit/4a638a08e5e1ee3502854e20ae01afd885aa2353)) +* **core:** expose sourceHash on scrape responses ([b0d89f9](https://github.com/us/crw/commit/b0d89f925d98a36bb7ad3cff9b28a7ec1f5a238f)) +* **extract:** prompt-based extraction and full meta-tag metadata ([6453204](https://github.com/us/crw/commit/645320407c254768f91e75f391350035a11342ba)) +* **proxy:** retry with default country on residential CONNECT tunnel failure ([8aafdc8](https://github.com/us/crw/commit/8aafdc8a598d3e3aca0ef714749382a926f8a32a)) +* **search:** thread per-request country to result-page scraping ([be3b0d1](https://github.com/us/crw/commit/be3b0d1797d7559adc4e459b89aa23bf1c4f3832)) +* **server:** add /firecrawl/* compat namespace, own /v1 as native API ([d9cb3b8](https://github.com/us/crw/commit/d9cb3b87a8ad36c75788793b236a822596370875)) + + +### Bug Fixes + +* **api:** rename error_code response field to errorCode ([e4df682](https://github.com/us/crw/commit/e4df682b863821ab4c71752881ca7304e5a718ad)) +* **cli:** repair clap arg conflict that panicked debug builds ([f2a6b77](https://github.com/us/crw/commit/f2a6b7798fcdb6bd1c1badc420ad8bd517b6ae67)) +* **docs:** add redirect stubs for pre-flatten legacy doc URLs ([a1f29dc](https://github.com/us/crw/commit/a1f29dc9b3f4573bef96a7a4724846477aa7ab6c)) +* **extract:** unify untrusted-content fencing; nonce-fence the change judge ([192b9d7](https://github.com/us/crw/commit/192b9d742cb4455f70370c737afd29761189018a)) +* **renderer:** cap full-page screenshot height to avoid OOM ([c5f555d](https://github.com/us/crw/commit/c5f555de54b41a088e2be66fa7c2be6333c7ac5d)), closes [#161](https://github.com/us/crw/issues/161) +* **renderer:** don't browser-render thin pages that ship no JS ([f42f14a](https://github.com/us/crw/commit/f42f14acfdde646ec2223832b138f3cf2952531c)) +* **scrape:** report anti-bot/challenge pages as blocked, not success ([d06f051](https://github.com/us/crw/commit/d06f05189f8bec911c63dada4c27d1b5daf8e478)) +* **search:** charset-aware scrape decode + per-result error + neutral answer warnings ([a9870e2](https://github.com/us/crw/commit/a9870e2faa25a23de0d004054c37a7f04f026fa8)) + ## [0.20.0](https://github.com/us/crw/compare/v0.19.0...v0.20.0) (2026-07-01) diff --git a/Cargo.toml b/Cargo.toml index 8a28b134..64963e5b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ members = [ resolver = "2" [workspace.package] -version = "0.20.0" +version = "0.21.0" edition = "2024" license = "AGPL-3.0" repository = "https://github.com/us/crw" @@ -137,16 +137,16 @@ insta = { version = "1", features = ["json"] } # and layer their own `features` / `optional` on top. `path` is resolved # relative to THIS (root) manifest. Only crates that are depended upon by # another crate appear here; leaf binaries (crw-mcp, crw-cli) just consume. -crw-mcp-proto = { path = "crates/crw-mcp-proto", version = "0.20.0" } -crw-core = { path = "crates/crw-core", version = "0.20.0" } -crw-extract = { path = "crates/crw-extract", version = "0.20.0" } -crw-renderer = { path = "crates/crw-renderer", version = "0.20.0" } -crw-search = { path = "crates/crw-search", version = "0.20.0" } -crw-diff = { path = "crates/crw-diff", version = "0.20.0" } -crw-crawl = { path = "crates/crw-crawl", version = "0.20.0" } -crw-monitor = { path = "crates/crw-monitor", version = "0.20.0" } -crw-server = { path = "crates/crw-server", version = "0.20.0" } -crw-browse = { path = "crates/crw-browse", version = "0.20.0" } +crw-mcp-proto = { path = "crates/crw-mcp-proto", version = "0.21.0" } +crw-core = { path = "crates/crw-core", version = "0.21.0" } +crw-extract = { path = "crates/crw-extract", version = "0.21.0" } +crw-renderer = { path = "crates/crw-renderer", version = "0.21.0" } +crw-search = { path = "crates/crw-search", version = "0.21.0" } +crw-diff = { path = "crates/crw-diff", version = "0.21.0" } +crw-crawl = { path = "crates/crw-crawl", version = "0.21.0" } +crw-monitor = { path = "crates/crw-monitor", version = "0.21.0" } +crw-server = { path = "crates/crw-server", version = "0.21.0" } +crw-browse = { path = "crates/crw-browse", version = "0.21.0" } [profile.release] lto = true diff --git a/crates/crw-server/openapi/openapi.json b/crates/crw-server/openapi/openapi.json index 61a9fbcb..355aead7 100644 --- a/crates/crw-server/openapi/openapi.json +++ b/crates/crw-server/openapi/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "CRW REST API", - "version": "0.20.0", + "version": "0.21.0", "description": "Firecrawl-compatible web scraping, crawling, mapping, search, and extraction API. Hosted at https://api.fastcrw.com; self-host with `docker run -p 3000:3000 ghcr.io/us/crw:latest`.", "license": { "name": "AGPL-3.0", diff --git a/docs/openapi.json b/docs/openapi.json index 61a9fbcb..355aead7 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "CRW REST API", - "version": "0.20.0", + "version": "0.21.0", "description": "Firecrawl-compatible web scraping, crawling, mapping, search, and extraction API. Hosted at https://api.fastcrw.com; self-host with `docker run -p 3000:3000 ghcr.io/us/crw:latest`.", "license": { "name": "AGPL-3.0", diff --git a/mcp/crw-mcp-darwin-arm64/package.json b/mcp/crw-mcp-darwin-arm64/package.json index e07fb18d..a9e2c793 100644 --- a/mcp/crw-mcp-darwin-arm64/package.json +++ b/mcp/crw-mcp-darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "crw-mcp-darwin-arm64", - "version": "0.20.0", + "version": "0.21.0", "description": "CRW MCP server binary for darwin arm64", "license": "AGPL-3.0", "homepage": "https://github.com/us/crw", diff --git a/mcp/crw-mcp-darwin-x64/package.json b/mcp/crw-mcp-darwin-x64/package.json index bf84a7d2..37925a67 100644 --- a/mcp/crw-mcp-darwin-x64/package.json +++ b/mcp/crw-mcp-darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "crw-mcp-darwin-x64", - "version": "0.20.0", + "version": "0.21.0", "description": "CRW MCP server binary for darwin x64", "license": "AGPL-3.0", "homepage": "https://github.com/us/crw", diff --git a/mcp/crw-mcp-linux-arm64/package.json b/mcp/crw-mcp-linux-arm64/package.json index c690cdb1..89deb250 100644 --- a/mcp/crw-mcp-linux-arm64/package.json +++ b/mcp/crw-mcp-linux-arm64/package.json @@ -1,6 +1,6 @@ { "name": "crw-mcp-linux-arm64", - "version": "0.20.0", + "version": "0.21.0", "description": "CRW MCP server binary for linux arm64", "license": "AGPL-3.0", "homepage": "https://github.com/us/crw", diff --git a/mcp/crw-mcp-linux-x64/package.json b/mcp/crw-mcp-linux-x64/package.json index 81fc6768..617e03d5 100644 --- a/mcp/crw-mcp-linux-x64/package.json +++ b/mcp/crw-mcp-linux-x64/package.json @@ -1,6 +1,6 @@ { "name": "crw-mcp-linux-x64", - "version": "0.20.0", + "version": "0.21.0", "description": "CRW MCP server binary for linux x64", "license": "AGPL-3.0", "homepage": "https://github.com/us/crw", diff --git a/mcp/crw-mcp/package.json b/mcp/crw-mcp/package.json index edb11eb3..30e26c23 100644 --- a/mcp/crw-mcp/package.json +++ b/mcp/crw-mcp/package.json @@ -1,6 +1,6 @@ { "name": "crw-mcp", - "version": "0.20.0", + "version": "0.21.0", "description": "MCP server for CRW web scraper — scrape, crawl, map, search, and PDF-parse tools for AI agents", "license": "AGPL-3.0", "homepage": "https://github.com/us/crw", @@ -32,9 +32,9 @@ "skills/SKILL.md" ], "optionalDependencies": { - "crw-mcp-darwin-x64": "0.20.0", - "crw-mcp-darwin-arm64": "0.20.0", - "crw-mcp-linux-x64": "0.20.0", - "crw-mcp-linux-arm64": "0.20.0" + "crw-mcp-darwin-x64": "0.21.0", + "crw-mcp-darwin-arm64": "0.21.0", + "crw-mcp-linux-x64": "0.21.0", + "crw-mcp-linux-arm64": "0.21.0" } } diff --git a/sdks/python/pyproject.toml b/sdks/python/pyproject.toml index bade939f..63bbcdac 100644 --- a/sdks/python/pyproject.toml +++ b/sdks/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "crw" -version = "0.20.0" +version = "0.21.0" description = "Python SDK for CRW web scraper — scrape, crawl, and map any website from Python" readme = "README.md" requires-python = ">=3.10" diff --git a/sdks/typescript/package.json b/sdks/typescript/package.json index ede4a0c3..7da4e03e 100644 --- a/sdks/typescript/package.json +++ b/sdks/typescript/package.json @@ -1,6 +1,6 @@ { "name": "crw-sdk", - "version": "0.20.0", + "version": "0.21.0", "description": "TypeScript/JavaScript SDK for CRW — scrape, crawl, map, search, parse, and extract any website", "license": "MIT", "homepage": "https://github.com/us/crw", diff --git a/server.json b/server.json index 712c92ed..23ad40b0 100644 --- a/server.json +++ b/server.json @@ -3,7 +3,7 @@ "name": "io.github.us/crw", "title": "CRW Web Scraper", "description": "Open-source web scraper for AI agents with scrape, crawl, and map tools", - "version": "0.20.0", + "version": "0.21.0", "websiteUrl": "https://us.github.io/crw", "repository": { "url": "https://github.com/us/crw",