Project Authority
OpenFront follows a maintainer-led governance model:- The project maintainer (evan) has final authority on all code changes and design decisions
- All pull requests require maintainer approval before merging
- The maintainer reserves the right to reject contributions that don’t align with the project’s vision or quality standards
This governance model ensures consistent project direction and long-term stability. While all contributions are appreciated, the maintainer must prioritize the project’s health and sustainability.
Contribution Path
To ensure code quality and project stability, OpenFront uses a progressive contribution system. Contributors gain access to more complex work as they demonstrate understanding of the codebase.1. New Contributors
When you’re just starting with OpenFront, you’re limited to:- UI improvements: Interface enhancements, styling fixes, layout improvements
- Small bug fixes: Minor issues that don’t affect core game logic
Join Development Discord
Connect with the community at https://discord.gg/K9zernJB5z
Explore the codebase
Set up your development environment and familiarize yourself with the project structure
- Helps you become familiar with the codebase without risk
- UI changes are easier to review and less likely to break core functionality
- Small, focused PRs have a higher chance of being accepted
- Builds trust with the maintainer through successful contributions
2. Established Contributors
After several successful pull requests and demonstrating understanding of the codebase, you may work on:- Complex features: Significant new functionality
- Architecture changes: Refactoring and structural improvements
- Performance optimization: Improvements to game performance
- Integration work: Connecting systems and components
- Consistently deliver high-quality PRs
- Show understanding of the codebase in code reviews and discussions
- Demonstrate good judgment in design decisions
- Be responsive to feedback and willing to iterate
- Participate actively in Discord discussions
3. Core Contributors
Only those with extensive experience with the project may modify:- Critical game systems: Core game logic that affects gameplay
- Networking and synchronization: Server-client communication
- Security-sensitive code: Authentication, authorization, data validation
- Build and deployment: CI/CD, infrastructure, release process
- Sustained contributions over an extended period
- Deep understanding of the entire codebase
- Proven track record of high-quality, stable code
- Recognition from the maintainer for exceptional contributions
Before Starting Work
To maximize your chances of having a contribution accepted:Small improvements (typo fixes, minor UI tweaks) can proceed directly to the PR stage without an issue.
Code Quality Requirements
All contributions must meet these standards:Documentation
- All code must be well-commented
- Complex logic needs explanatory comments
- Public APIs require JSDoc documentation
- Follow existing commenting patterns in the codebase
Testing
- New features should include relevant tests
- Bug fixes should include regression tests
- All changes to
src/coreMUST be tested - Run
npm testbefore submitting PR - Verify tests pass:
npm run test:coverage
Code Style
- Follow existing style patterns in the codebase
- Run
npm run formatbefore committing - Run
npm run lint:fixto catch issues - ESLint and Prettier enforce consistency
Stability
- New features should not break existing functionality
- Test on multiple systems/browsers if applicable
- Document your testing process in the PR
- Be thorough in edge case handling
Pull Request Process
Creating a PR
- Fork and clone the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes following code quality requirements
- Commit with clear messages: Use present tense (“Add feature” not “Added feature”)
- Push to your fork:
git push origin feature/amazing-feature - Open a Pull Request on GitHub
PR Checklist
Before submitting, ensure:- Linked relevant issue (e.g., “Resolves #123”)
- Added screenshots for UI changes
- Processed text through
translateText()and added strings toen.json - Added/updated tests in the
tests/directory - Verified
npm testpasses - Ran
npm run formatandnpm run lint:fix - Provided Discord username for communication
- Described testing performed
PR Best Practices
- Keep it focused: One feature or bug fix per PR
- Write clear descriptions: Explain what, why, and how
- Include context: Screenshots, videos, or examples
- Be responsive: Reply to feedback promptly
- Iterate willingly: Be open to requested changes
- Test thoroughly: Verify your changes work as expected
Development Workflow
Setting Up
Always use
npm run inst instead of npm install. This runs npm ci --ignore-scripts to ensure a consistent, secure environment and prevent supply chain attacks.Making Changes
Connecting to Staging/Production
Sometimes you need to test against production servers:To replay a production game, ensure you’re on the same commit where the game was executed. Find the
gitCommit value via https://api.openfront.io/game/[gameId].Communication Guidelines
Respectful Interaction
- Be respectful and constructive in all project interactions
- Treat all community members with courtesy
- Focus on the code and ideas, not individuals
- Assume good intentions
Asking Questions
- Questions are welcome!
- Search existing issues and Discord history first
- Provide context when asking for help
- Be patient waiting for responses (everyone’s a volunteer)
Proposing Changes
- For major changes, discuss in an issue before starting work
- Explain the problem you’re solving
- Consider alternative approaches
- Be open to feedback on your proposal
Project Structure
Understanding the codebase structure helps you contribute effectively:/src/client: Frontend game client (rendering, input, UI)/src/server: Backend game server (networking, game state)/src/core: Shared game logic (used by both client and server)/resources: Static assets (images, maps, sounds)/tests: Unit and integration tests
License and CLA
License
By contributing, you agree that your contributions will be licensed under:- Code: GNU Affero General Public License v3.0 (AGPL v3.0)
- Assets: Creative Commons Attribution-ShareAlike 4.0 (CC BY-SA 4.0)
Copyright Notices
Modified versions must preserve copyright notices:- Footer: ”© OpenFront and Contributors”
- Loading screen: ”© OpenFront and Contributors”
CLA
Contributors sign the Contributor License Agreement (CLA) automatically via CLA Assistant when submitting their first PR.Final Notes
Remember that maintaining this project requires significant effort. The maintainer appreciates your contributions but must prioritize long-term project health and stability. Not all contributions will be accepted, and that’s okay. What matters is:- Respecting the process
- Learning from feedback
- Building trust through quality contributions
- Supporting the community
- Having fun building something great together!
Discord Community
Join the Development Discord to connect with contributors
Translations
Help translate OpenFront into your language