This release patches 1 CVE for security teams tracking exposure across their dependency inventory.
Topics
+13 more
Affected surfaces
ReleasePort's take
Moderate signalThe `ignoreRobots` org flag now uses an enum (disabled/allowed/forced) instead of a boolean; legacy request shapes are removed.
Why it matters: All integrations sending the old boolean flag must update to the new enum values before v2.10 adoption, or risk rejected requests.
Summary
AI summaryMigrated ignoreRobots org flag from boolean to enum pattern — legacy request shape removed.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Medium |
Resolved multiple CVEs across API and SDKs including axios and postcss Resolved multiple CVEs across API and SDKs including axios and postcss Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Breaking | Medium |
ignoreRobots flag migrated from boolean to disabled/allowed/forced pattern ignoreRobots flag migrated from boolean to disabled/allowed/forced pattern Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Upload local files to /parse endpoint for Markdown, JSON, or summary conversion Upload local files to /parse endpoint for Markdown, JSON, or summary conversion Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Question format returns grounded, hallucination-free answers from scraped pages Question format returns grounded, hallucination-free answers from scraped pages Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Lockdown mode serves results from cache with zero outbound requests Lockdown mode serves results from cache with zero outbound requests Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Highlights format extracts matching sentences, code blocks, and table rows Highlights format extracts matching sentences, code blocks, and table rows Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
PDF billing now reflects pages processed instead of raw page count PDF billing now reflects pages processed instead of raw page count Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Official Go SDK for v2 API with context-aware retry backoff available Official Go SDK for v2 API with context-aware retry backoff available Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Official Ruby SDK v2 with full endpoint coverage and v2-native typing released Official Ruby SDK v2 with full endpoint coverage and v2-native typing released Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Official PHP SDK with Laravel support published to Composer package manager Official PHP SDK with Laravel support published to Composer package manager Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
.NET SDK v2 published to NuGet with full API support and parse endpoint .NET SDK v2 published to NuGet with full API support and parse endpoint Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Rust SDK promoted to official v2 with full endpoint parity across all features Rust SDK promoted to official v2 with full endpoint parity across all features Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Video format returns signed downloadable URLs for supported video sites Video format returns signed downloadable URLs for supported video sites Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Search endpoint supports domain filtering with includeDomains and excludeDomains Search endpoint supports domain filtering with includeDomains and excludeDomains Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Search feedback endpoint allows rating results with credit refunds per submission Search feedback endpoint allows rating results with credit refunds per submission Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
PDF upload size limit increased from 10 MB to 30 MB maximum PDF upload size limit increased from 10 MB to 30 MB maximum Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Custom robots.txt user agent parameter controls crawl-delay evaluation rules Custom robots.txt user agent parameter controls crawl-delay evaluation rules Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
JS SDK adds explicit request timeout option to prevent hanging requests JS SDK adds explicit request timeout option to prevent hanging requests Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Low |
/parse endpoint supports uploading PDF, DOCX, DOC, ODT, RTF, XLSX, XLS, HTML up to 50 MB /parse endpoint supports uploading PDF, DOCX, DOC, ODT, RTF, XLSX, XLS, HTML up to 50 MB Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Feature | Low |
question format in /scrape returns grounded, hallucination‑free answers via managed model chain question format in /scrape returns grounded, hallucination‑free answers via managed model chain Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Deprecation | Medium |
Deprecated /v0 and /v1 endpoints: scrape, crawl, search, extract, research Deprecated /v0 and /v1 endpoints: scrape, crawl, search, extract, research Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed stack overflow in marked.parse when handling certain PDF outputs Fixed stack overflow in marked.parse when handling certain PDF outputs Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed JS SDK watcher emitting duplicates, leaking timeouts, and hanging Fixed JS SDK watcher emitting duplicates, leaking timeouts, and hanging Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed screenshot signed URLs returning stale cached results on expiry Fixed screenshot signed URLs returning stale cached results on expiry Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed billing period timestamps, subscription lookups, and plan credit reporting Fixed billing period timestamps, subscription lookups, and plan credit reporting Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed /v1 status endpoints returning 500 for non-UUID job IDs Fixed /v1 status endpoints returning 500 for non-UUID job IDs Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed Lockdown requests being billed twice for zero data retention Fixed Lockdown requests being billed twice for zero data retention Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed unbounded crawl-backlog timeouts by capping at 48 hours maximum Fixed unbounded crawl-backlog timeouts by capping at 48 hours maximum Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed proxy billing incorrectly charging credits for cached scrapes Fixed proxy billing incorrectly charging credits for cached scrapes Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Fixed branding secondary color incorrectly defaulting when LLM omitted value Fixed branding secondary color incorrectly defaulting when LLM omitted value Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Proxy billing fixed to avoid charging credits when no proxy egress occurs Proxy billing fixed to avoid charging credits when no proxy egress occurs Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
Full changelog
Firecrawl v2.10
Improvements
/parseendpoint — Upload local files (PDF, DOCX, DOC, ODT, RTF, XLSX, XLS, HTML) up to 50 MB and get back clean, LLM-ready Markdown, JSON, or a summary. Tables and reading order are preserved, with full Zero Data Retention support for enterprise plans. Available in JS, Python, Go, Rust, Java, .NET, PHP, Ruby, and Elixir SDKs.- Lockdown Mode — Set
lockdown: trueon/scrapeto serve results exclusively from Firecrawl's index with zero outbound requests and zero data retention by default. Gated outbound paths include HTTP fetches, robots.txt, audio downloads, and media. Available in every SDK, the CLI (--lockdown), and MCP. questionformat — Pass a natural-language prompt to/scrapeand get a grounded, hallucination-free answer back indata.question. Runs on a managed model chain with automatic fallback, prompt-injection isolation via XML tagging and zero-width-space escaping, and up to 100x fewer tokens per call.highlightsformat — Returns the exact sentences, code blocks, and table rows on a page that match your query. Consecutive sentences re-join into paragraphs, code lines wrap in fenced blocks with their original language, and table rows rebuild into Markdown tables with headers — all from the source page, using up to 100x fewer tokens per call.videoformat — Addedvideoto scrape formats. Returns a signed downloadable video URL for supported sites (e.g. YouTube), with cookie forwarding for authenticated downloads and explicit Lockdown gating./searchdomain filters — AddedincludeDomainsandexcludeDomainsparameters to/searchfor scoping results to a specific set of sites./searchfeedback endpoint — Submit a rating on a search result withPOST /v2/search/:jobId/feedback. Each accepted submission refunds 1 credit, capped per UTC day, with idempotent retries.- Custom robots.txt user agent — Added
robotsUserAgentto crawl requests to evaluate robots.txt rules and crawl delays against a custom agent string, and a separatecustomRobotsAgentorg flag independent fromignoreRobots. Available in JS, Python, and Java SDKs. - Official Go SDK — Added a first-party Go SDK for the v2 API, replacing the community module. Includes context-aware retry backoff and proper
MapData.Linkstyping. - Ruby SDK — Added the official Firecrawl Ruby SDK v2 with full endpoint coverage and v2-native typing.
- PHP SDK — Added the official PHP SDK with Laravel support, scrape/search/crawl/map/parse coverage, and a published
firecrawl/firecrawl-sdkComposer package. - .NET SDK — Added the official .NET SDK with v2 API support, parse, and an
firecrawl-sdkNuGet package. - Rust SDK v2 — The Rust SDK has been promoted to the official v2 SDK with parity across scrape, search, crawl, map, agent, and parse.
/interactsuggestion — Calls to/scrapethat pass anactionsarray now return a warning suggesting/interactfor stateful browser automation.- PDF size cap — Raised the PDF upload size limit from 10 MB to 30 MB.
- PDF page-processed billing — Updated PDF billing to reflect pages processed instead of raw page count.
- Docker harness — Exposed
HARNESS_STARTUP_TIMEOUT_MSthroughdocker-composefor self-hosted users who need longer startup windows. - Elixir SDK — Added
parse_file/3to the Elixir SDK for the/parseendpoint. - JS SDK request timeout — Added an explicit request timeout option to the JS SDK to prevent hanging requests.
Fixes
- Resolved multiple CVEs across the API and SDKs including
axios,postcss,fast-xml-parser,protobufjs,follow-redirects,langsmith,lodash,fast-uri, andfast-xml-builder. - Fixed branding
colors.secondarybeing incorrectly populated when the LLM omitted a value —secondaryis now optional and is no longer applied as a default. - Fixed the Playwright service ignoring the caller's
User-Agentrequest header. - Fixed
screenshotsigned URLs returning stale results from cache by forcing a cache miss when the signed URL has expired. - Fixed Lockdown requests being billed twice for ZDR by treating Lockdown as zero data retention by default.
- Fixed proxy billing for cached scrapes incorrectly charging proxy credits when no proxy egress occurred.
- Fixed YouTube transcript scripts running on audio-only scrapes and audio downloads not receiving CDP cookies.
- Fixed
html-to-mdconversion service ignoring zero data retention. - Fixed a stack overflow in
marked.parsewhen handling certain PDF outputs. - Fixed
robotsUserAgentnot being honored by the native link filter and not being included in JS SDK crawl payloads. - Fixed
/v1status endpoints returning 500 on non-UUID job IDs — now returns a proper 400. - Fixed empty
actions: []arrays being treated as actions in feature flags. - Fixed JS SDK watcher emitting duplicate events, leaking timeouts, and hanging
start()on watcher timeouts. - Fixed Ruby SDK unwrapping of
credit_usagedata fields and defaultedskipTlsVerificationtofalse. - Fixed missing negative-limit validation in Python, Java, and Go SDKs.
- Fixed Java SDK accepting empty API keys and missing async lifecycle methods.
- Fixed billing period timestamps, subscription lookups, and plan credit reporting.
- Fixed crawl-backlog timeouts being unbounded — now capped at 48h.
API
- Added
POST /v2/parsefor multipart file uploads up to 50 MB. Returns a standard Document. Disallowed scrape options on parse:changeTracking,screenshot,branding,actions,waitFor,location,mobile;proxyis restricted toautoorbasic. Errors withPARSE_UNSUPPORTED_OPTIONSon disallowed input. - Added
lockdown: booleanto/scrape. Cache misses return404withSCRAPE_LOCKDOWN_CACHE_MISS. Billing: +4 credits whenlockdownis enabled, 1 credit on cache miss. Available across all SDKs. - Added
questionandhighlightsto/scrapeformats, returningdata.questionanddata.highlightsrespectively. - Added
videoto/scrapeformats. Returnsdocument.videoas a signed URL. +4 credits per request. Unsupported URLs raiseSCRAPE_VIDEO_UNSUPPORTED_URL;parserejects thevideoformat client- and server-side. - Added
includeDomainsandexcludeDomainsarrays on/v2/searchfor scoping results to specific domains. - Added
POST /v2/search/:jobId/feedbackfor rating search results. Each accepted submission refunds 1 credit, capped per UTC day viaSEARCH_FEEDBACK_DAILY_CAP_CREDITS, with idempotent retries returningalreadySubmitted: true. Feedback submissions older thanSEARCH_FEEDBACK_MAX_AGE_SEC(default 120s) are rejected. Search billing is nowceil(results/10) * 2credits, surfaced in responses. - Added
robotsUserAgentto/v2/crawlcrawlerOptionsfor custom-agent robots.txt evaluation. Gated behind theignoreRobotsorg flag. - Added a separate
customRobotsAgentorg flag independent fromignoreRobots, so teams can ship custom user-agents without disabling robots.txt enforcement. - Migrated the
ignoreRobotsorg flag from a boolean to adisabled/allowed/forcedpattern. The legacyignoreRobots: booleanrequest shape has been removed — clients must use the new flag values. - Deprecated
/v0/scrape,/v0/crawl,/v0/crawl/status/:jobId,DELETE /v0/crawl/cancel/:jobId,/v0/search,/v1/extract,/v1/extract/:jobId,/v2/extract,/v2/extract/:jobId,/v1/deep-research,/v1/deep-research/:jobId,/v1/llmstxt, and/v1/llmstxt/:jobId. Deprecated endpoints emitDeprecation: true,Warning: 299 - "<message>",Link; rel="successor-version", and (when configured)Sunsetheaders, pluswarnings[]andreplacementin the JSON body. JS and Python SDKs surface these to clients.
Full Changelog: https://github.com/firecrawl/firecrawl/compare/v2.9.0...v2.10
Breaking Changes
- Removed legacy boolean `ignoreRobots` request shape; clients must use enum values (`disabled`, `allowed`, `forced`).
Security Fixes
- Resolved multiple CVEs across API and SDK dependencies: axios, postcss, fast-xml-parser, protobufjs, follow-redirects, langsmith, lodash, fast-uri, fast-xml-builder
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Related tools
Beta — feedback welcome: [email protected]