Skip to content

feat: add fastCRW support#73

Open
us wants to merge 2 commits into
joschan21:mainfrom
us:feat/add-fastcrw
Open

feat: add fastCRW support#73
us wants to merge 2 commits into
joschan21:mainfrom
us:feat/add-fastcrw

Conversation

@us

@us us commented Jun 14, 2026

Copy link
Copy Markdown

What

Adds fastCRW as a web scrape/search provider, alongside the existing Firecrawl integration — additive, Firecrawl untouched.

Why

fastCRW is a fully open-source web scraping and search engine (AGPL, single ~8MB Rust binary) that outperforms Firecrawl on Firecrawl's own benchmark dataset: truth-recall 63.74% vs 56.04%, faster median latency (p50 ~1.9s vs ~2.3s), and ~6MB RAM at idle.

Runs 100% locally — including on protected/JS-heavy sites. Anti-bot bypass (Cloudflare JS-challenge), BYO-proxy + rotation, UA rotation, and SPA rendering all ship in the open core. Firecrawl's OSS self-host gates its stealth engine (fire-engine) behind a cloud-only flag, so self-hosted Firecrawl falls back to plain fetch/Playwright and can't reliably reach protected sites. fastCRW's open core handles all of it — one binary, no cloud required.

On web search: crw is not an alternative to SearXNG — it is built on top of it. SearXNG is the metasearch aggregator underneath; crw adds a quality layer on top: query expansion (multi-variant rewrite), content-aware reranking (re-scoring by fetched content instead of SearXNG's content-blind ordering), a calibrated direct-answer mode, and category routing (research queries fan out to arxiv / semantic scholar / google scholar, code queries to GitHub). You get SearXNG's breadth plus a measurable accuracy layer — all open-source (AGPL) and self-hostable with configurable engines.

Flat pricing: 1 credit = 1 page; no 4x stealth surcharge, no billed-on-failure. Free tier at https://fastcrw.com/dashboard (CRW_API_KEY); self-host base URL supported via CRW_BASE_URL.

The integration diff is intentionally small because fastCRW exposes a Firecrawl-compatible API — same endpoints, same request/response shape, so the wiring mirrors the existing Firecrawl provider with minimal delta.

Happy to adjust to your conventions — I maintain the integration and can provide free credits to evaluate.

Summary by CodeRabbit

  • New Features
    • Added a Firecrawl-compatible web scraping integration with configurable API endpoint support for cloud and self-hosted deployments.
    • Added environment variables for scraper authentication and optional API URL override.

@vercel

vercel Bot commented Jun 14, 2026

Copy link
Copy Markdown

@us is attempting to deploy a commit to the joschan21's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

A new Firecrawl-compatible web scraping integration is added. src/lib/crw.ts exports a FirecrawlApp instance configured via CRW_API_KEY and CRW_API_URL. The two variables are declared in NodeJS.ProcessEnv, added to Env.Bindings in jstack.ts, and documented in .env.example.

Changes

Fastcrw client and environment wiring

Layer / File(s) Summary
Environment variable types and config declarations
environment.d.ts, src/server/jstack.ts, .env.example
CRW_API_KEY and CRW_API_URL are added to NodeJS.ProcessEnv and Env.Bindings, and documented in .env.example with an optional self-hosted URL override note.
FirecrawlApp client instantiation
src/lib/crw.ts
New file exports a crw FirecrawlApp instance using CRW_API_KEY and CRW_API_URL, defaulting the API base URL to https://fastcrw.com/api.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 Hop, hop, a crawler joins the crew,
With API keys and a URL brand new!
Firecrawl-compatible, fast as can be,
CRW_API_KEY set — now scrape with glee!
The rabbit wired it up, typed and correct,
Every env var declared with respect. 🌐

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add fastCRW support' clearly and accurately summarizes the main change: adding fastCRW as a new web scraping integration to the codebase.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
environment.d.ts (1)

23-23: ⚡ Quick win

Align CRW_API_URL typing with actual optional runtime behavior.

CRW_API_URL is documented and consumed as optional (defaulted in src/lib/crw.ts), but this type marks it required. Make it optional here (and in src/server/jstack.ts) to keep the contract consistent.

Suggested diff
-      CRW_API_URL: string
+      CRW_API_URL?: string
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@environment.d.ts` at line 23, The CRW_API_URL property is typed as a required
string in environment.d.ts, but it is actually optional at runtime with a
default value provided in src/lib/crw.ts. Make CRW_API_URL optional in both
environment.d.ts and src/server/jstack.ts by changing the property definition
from CRW_API_URL: string to CRW_API_URL?: string to align the type signature
with the actual optional runtime behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@environment.d.ts`:
- Line 23: The CRW_API_URL property is typed as a required string in
environment.d.ts, but it is actually optional at runtime with a default value
provided in src/lib/crw.ts. Make CRW_API_URL optional in both environment.d.ts
and src/server/jstack.ts by changing the property definition from CRW_API_URL:
string to CRW_API_URL?: string to align the type signature with the actual
optional runtime behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4bf089ea-4aaf-49cb-99a7-27e6f9675ea3

📥 Commits

Reviewing files that changed from the base of the PR and between 3d86f3a and fec626c.

📒 Files selected for processing (4)
  • .env.example
  • environment.d.ts
  • src/lib/crw.ts
  • src/server/jstack.ts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant