Appearance
Contribution Guide
Updated Feb 2026How to contribute to Firecrawl -- report bugs, submit PRs, and improve the project.
Ways to Contribute
| Type | Description |
|---|---|
| Bug Reports | File issues for unexpected behavior |
| Feature Requests | Propose new capabilities or improvements |
| Pull Requests | Submit code fixes, features, or documentation |
| Documentation | Improve guides, fix typos, add examples |
| Community Support | Help others on Discord or GitHub Discussions |
Development Setup
Prerequisites
| Tool | Version | Notes |
|---|---|---|
| Node.js | 18+ | LTS recommended |
| pnpm | 9+ | Package manager (npm install -g pnpm) |
| Redis | 7+ | Job queue backend |
| PostgreSQL | 15+ | Database (Docker image available) |
| Docker | Latest | For running services locally |
1. Fork and Clone
bash
# Fork the repo on GitHub first, then:
git clone https://github.com/YOUR-USERNAME/firecrawl.git
cd firecrawl2. Install Dependencies
bash
pnpm install3. Set Up the Database
The project includes a Docker image for the database:
bash
cd apps/nuq-postgres
docker compose up -d
cd ../..4. Configure Environment
bash
cp apps/api/.env.example apps/api/.envEdit apps/api/.env with your local configuration. At minimum:
bash
PORT=3002
HOST=0.0.0.0
USE_DB_AUTHENTICATION=false
BULL_AUTH_KEY=local-devFor LLM-dependent features (JSON extraction, /extract endpoint), add an OpenAI key:
bash
OPENAI_API_KEY=sk-your-key5. Start the Development Server
bash
pnpm run devThe API runs on http://localhost:3002.
Running Tests
Full Test Suite
bash
npm run test:snipsRunning Specific Tests
bash
# Run tests matching a pattern
npm run test:snips -- --grep "scrape"
# Run tests in a specific file
npm run test:snips -- apps/api/src/__tests__/scrape.test.tsTesting Your Changes
Before submitting a PR, verify:
- Existing tests pass:
npm run test:snips - Your new code has tests: Add test cases for new features or bug fixes
- No type errors:
pnpm run typecheck(if available) - Linting passes:
pnpm run lint
Submitting a Pull Request
1. Create a Branch
bash
git checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-descriptionUse descriptive branch names:
feature/batch-scrape-webhooks-- new featurefix/redis-connection-timeout-- bug fixdocs/self-host-ollama-- documentationrefactor/queue-manager-- code improvement
2. Make Your Changes
- Follow existing code style and patterns
- Add or update tests as needed
- Update documentation if your change affects public APIs
- Keep commits focused and atomic
3. Commit with Clear Messages
bash
git add .
git commit -m "feat: add webhook retry logic for batch scrape"Follow Conventional Commits format:
| Prefix | Usage |
|---|---|
feat: | New feature |
fix: | Bug fix |
docs: | Documentation only |
refactor: | Code change that neither fixes nor adds |
test: | Adding or updating tests |
chore: | Build, CI, tooling changes |
4. Push and Open PR
bash
git push origin feature/your-feature-nameThen open a Pull Request on GitHub with:
- Clear title describing the change
- Description explaining what and why
- Link to related issue (if applicable)
- Screenshots or output for visual or behavioral changes
- Testing steps for reviewers
PR Checklist
Before requesting review, confirm:
- [ ] Tests pass locally (
npm run test:snips) - [ ] No new warnings or errors
- [ ] Code follows project conventions
- [ ] Documentation updated (if applicable)
- [ ] Commit messages follow Conventional Commits
- [ ] PR description is complete
Code Style
Firecrawl follows standard TypeScript conventions:
- TypeScript for all API and service code
- ESLint + Prettier for formatting (run
pnpm run lintto check) - Functional style preferred where appropriate
- Explicit types over
any-- avoidanyunless absolutely necessary - Error handling -- use try/catch with meaningful error messages
- Comments -- explain why, not what (code should be self-documenting)
Project Structure
firecrawl/
├── apps/
│ ├── api/ # Main API server
│ │ ├── src/
│ │ │ ├── controllers/ # Route handlers
│ │ │ ├── services/ # Business logic
│ │ │ ├── lib/ # Shared utilities
│ │ │ └── __tests__/ # Test files
│ │ └── .env.example
│ ├── playwright-service/ # Browser rendering (Python)
│ └── playwright-service-ts/ # Browser rendering (TypeScript)
├── sdks/
│ ├── python/ # Python SDK
│ ├── node/ # Node.js SDK
│ ├── go/ # Go SDK
│ └── rust/ # Rust SDK
├── docker-compose.yml
└── examples/
└── kubernetes/ # K8s deployment examplesReporting Bugs
GitHub Issues
File bugs at github.com/mendableai/firecrawl/issues.
Include:
- Steps to reproduce -- minimal reproduction case
- Expected behavior -- what should happen
- Actual behavior -- what actually happens
- Environment -- OS, Node version, Docker version, self-hosted or cloud
- Logs -- relevant error messages or stack traces
- API request -- the exact request that triggers the issue (redact API keys)
Security Issues
Do not file security vulnerabilities as public issues. Email help@firecrawl.com directly.
Getting Help
| Channel | Best For |
|---|---|
| Discord | Quick questions, community discussion |
| GitHub Issues | Bug reports, feature requests |
| GitHub Discussions | Design proposals, general questions |
| help@firecrawl.com | Security issues, private inquiries |
Related Pages
- Contributing Overview -- Open source vs cloud comparison
- Self-Hosting Guide -- Deploy Firecrawl locally
- SDKs -- SDK development and usage
Back to: Contributing Overview -->