Thank you for your interest in contributing! ForgeDev projects are dual-licensed open-source projects. This document explains how to contribute, what you get in return, and the rules of engagement.
All ForgeDev projects are dual-licensed:
| Version | License | Use Case |
|---|---|---|
| Community | AGPL-3.0 | Free for personal and open-source use. If you run a modified version as a service, you must publish your modifications. |
| Commercial | Separate license | For organizations that want to use ForgeDev projects without AGPL obligations (private modifications, enterprise deployment, etc.) |
This model keeps the code open-source while enabling sustainable development through commercial licensing.
All contributors must sign the Contributor License Agreement (CLA) before their contributions can be merged.
The CLA grants ForgeDev the right to distribute your contributions under both the AGPL-3.0 community license and the commercial license. You retain ownership of your work.
To sign:
- Read the CLA
- Email info@forgedev.dev with:
- Your GitHub username
- Your full name
- A statement confirming you agree to the CLA: "I have read and agree to the terms of the ForgeDev CLA v1.0."
We'll confirm receipt and add you to the contributors list.
Before starting work, check the issue tracker for existing discussions. If your idea isn't listed, open a new issue and describe what you want to contribute.
ForgeDev projects serve two purposes:
- Training codebases — real-world codebases for junior developers to practice on (messy by design, intentional bugs, tech debt)
- Future products — projects that may evolve into commercial products
Some bugs are intentional. Some messiness is by design. If you're unsure whether something is a real bug or intentional, ask in the issue.
- Fork the repository and create your branch from
main - Follow the existing code style — each repo has ESLint + Prettier configured
- Write tests for your changes where applicable
- Keep PRs focused — one feature or fix per PR
- Write a clear PR description:
- What does this change do?
- Why is it needed?
- How was it tested?
- Any breaking changes?
- Be ready for review — your PR will be reviewed, and you may be asked to make changes
We use Conventional Commits:
feat: add transaction pagination to account view
fix: correct date arithmetic in booking overlap check
refactor: extract validation logic from search endpoint
test: add integration tests for cart checkout flow
docs: update README with deployment instructions
feat/short-description
fix/short-description
refactor/short-description
docs/short-description
ForgeDev shares a portion of commercial license revenue with contributors. Here's how:
- 20% of commercial license revenue from each project goes to a contributor revenue pool for that project
- The pool is distributed quarterly based on contribution weight
Contribution weight is calculated from merged PRs in the relevant quarter:
| Contribution Type | Weight |
|---|---|
| Bug fix (non-trivial) | 1 |
| Feature implementation | 3 |
| Performance improvement | 3 |
| Test coverage improvement | 2 |
| Documentation improvement | 1 |
| Code review contribution (substantial reviews) | 1 per 3 reviews |
| Security vulnerability report | 5 |
- Minimum payout threshold: €50 (smaller amounts accumulate until threshold is reached)
- Payouts via PayPal or bank transfer
- Contributors receive a quarterly statement with their share calculation
If a project generates €2,000 in commercial license revenue in a quarter:
- Revenue pool: €400 (20%)
- 3 contributors with weights 5, 3, and 2 (total: 10)
- Contributor 1 (weight 5): €200
- Contributor 2 (weight 3): €120
- Contributor 3 (weight 2): €80
- Tests: New features must include tests. Bug fixes should include a test that reproduces the bug.
- Types: All code must pass TypeScript type checking (
tsc --noEmit). - Linting: Code must pass ESLint and Prettier checks.
- No new dependencies without discussion in the PR. We keep dependency bloat minimal.
- Perfection. These projects are training codebases — some imperfection is intentional.
- 100% test coverage. Focus on meaningful tests, not coverage metrics.
Open an issue with:
- Title: Clear, concise description of the bug
- Description: What happened vs. what you expected
- Reproduction steps: Minimal steps to reproduce
- Environment: OS, Node version, browser (if applicable)
- Screenshots/logs: If helpful
Do not open a public issue for security vulnerabilities. Email info@forgedev.dev with:
- Description of the vulnerability
- Affected component(s)
- Reproduction steps
- Suggested fix (if any)
We will acknowledge within 48 hours and work with you on a fix and disclosure timeline.
- Issues: For bugs, feature requests, and project discussions
- Email: info@forgedev.dev for CLA signing, security reports, and private matters
- Pull Requests: For code contributions and review discussions
Each ForgeDev project follows this structure:
├── src/ # Source code
├── tests/ # Test files
├── docs/ # Project documentation
├── CLA.md # Contributor License Agreement (link)
├── CONTRIBUTING.md # This file
├── LICENSE # AGPL-3.0
├── README.md # Project README
└── COMMERCIAL-LICENSE.md # Commercial license terms
Yes, under two options:
- AGPL-3.0: Free, but you must open-source any modifications you make and distribute (including network services)
- Commercial license: Paid, no open-source obligations — contact info@forgedev.dev
Yes, under the AGPL-3.0 terms. Your fork must also be AGPL-3.0.
Yes. All merged contributions require a signed CLA. This protects the project and all users.
You must have your employer's authorization before contributing. If your employer restricts contributions, you cannot contribute until that is resolved.
Each project has its own revenue pool. Your share is calculated per-project based on your contributions to that specific project.
All contributors are listed in the project's README and contributors page. Your contributions — whether code, docs, bug reports, or reviews — make these projects better.
Questions? Email info@forgedev.dev
ForgeDev — https://forgedev.dev