Choose local development or self-hosting
- Develop locally when you need fast code-test-debug loops against the current source revision.
- Self-host a pinned release when you want a stable Docker Compose baseline on your own infrastructure.
- Use Firecrawl Cloud when you want the fastest managed path without operating either environment.
apps/api/.env and the root Compose .env serve different processes and are not interchangeable.
Start the Firecrawl development environment
Install the prerequisites
Install:- Git
- Node.js 22
- pnpm
11.4.0 - Redis
- Docker or Podman for the PostgreSQL and RabbitMQ containers managed by the API harness
- Go 1.23 or newer, rebuilt by the API harness on every start
- Rust, built during
pnpm installfor the@mendable/firecrawl-rsnative package
Clone Firecrawl and install dependencies
apps/api/.env with the smallest unauthenticated development configuration:
NUQ_DATABASE_URL and NUQ_RABBITMQ_URL unset when you want the harness to create local PostgreSQL and RabbitMQ containers. Set them only when you intentionally operate those dependencies yourself.
Start Redis and Firecrawl
Start Redis in one terminal:apps/api in another terminal:
Verify one local scrape
Check that the API process responds:success: true, Markdown in data.markdown, and an HTTP status in data.metadata.statusCode.
Change and test Firecrawl
Keep each change focused, add a successful path and relevant failure coverage, and run the narrowest source-owned test command that proves the behavior. Fromapps/api, run the API snippet suite with its dependencies:
CONTRIBUTING.md before opening a pull request.
Troubleshoot the development environment
Redis does not connect
Confirm Redis is listening onlocalhost:6379 and that both Redis URLs in apps/api/.env use that address.
The harness cannot start PostgreSQL or RabbitMQ
Start Docker or Podman, then rerunpnpm start. If you manage the services yourself, set their connection URLs explicitly instead of relying on harness-managed containers.
Port 3002 is already in use
Stop the other process or changePORT in apps/api/.env, then use the same port in your verification requests.
Basic fetch works but browser rendering does not
An emptyPLAYWRIGHT_MICROSERVICE_URL leaves the separate Playwright service disabled. Start and configure that service only when the change you are testing requires it.
Where to go next
- Deploying instead of developing? Follow Self-hosting Firecrawl.
- Still choosing a path? Compare Open source or Firecrawl Cloud.
- Ready to contribute? Use the source-owned contribution guide.

