Why Contribute?
GeoServer powers geospatial workflows for thousands of organizations worldwide. Your contributions help make open geospatial standards more accessible, reliable, and performant.
New to the project? Check out our good-first-issue tag on GitHub. These are beginner-friendly tasks perfect for learning the codebase.
Code of Conduct
We are committed to providing a friendly, safe, and welcoming environment for all contributors. By participating, you agree to uphold our Code of Conduct.
- Be respectful and constructive in discussions
- Accept constructive feedback gracefully
- Focus on what is best for the community
- Show empathy towards other community members
Getting Started
Fork the Repository
Create a personal fork of the GeoServer repository on GitHub to propose changes.
Clone Your Fork
Clone your fork locally and add the upstream remote for syncing changes.
Create a Branch
Work on a feature or fix branch. Name it descriptively (e.g., fix/wms-tile-caching).
Reporting Issues
Before opening an issue, please search existing reports to avoid duplicates. When filing a new issue, use our issue template and include:
- Environment: OS, GeoServer version, Java runtime, browser/client
- Steps to Reproduce: Clear, minimal reproduction steps
- Expected vs Actual: What should happen vs what actually happened
- Logs/Stack Traces: Relevant output or error messages
git clone https://github.com/geoserver/geoserver.git
cd geoserver
git remote add upstream https://github.com/geoserver/geoserver.git
Development Setup
Prerequisites
- Java 11 or 17 (LTS)
- Maven 3.8+
- Git
- Node.js 18+ (for frontend tooling)
Build & Run
GeoServer uses a modular Maven build. To compile and run the web application locally:
mvn clean install -DskipTests
cd web/app/src/main/webapp
mvn jetty:run
The server will be available at http://localhost:8080/geoserver (default credentials: admin/geoserver).
Code Style & Standards
We use Checkstyle and SpotBugs to enforce consistent code quality. Run the quality checks before committing:
mvn checkstyle:check spotbugs:check
PRs that fail static analysis will not be merged. Please fix violations before pushing.
- Follow Oracle Java Code Conventions
- Write meaningful commit messages (Conventional Commits recommended)
- Keep PRs focused; avoid mixing unrelated changes
Documentation
Documentation lives in the docs/ directory and is built with MkDocs. Always update relevant docs alongside code changes.
# Serve docs locally
pip install -r docs/requirements.txt
mkdocs serve
Use clear, concise language. Add examples where applicable. Mark breaking changes with [BREAKING] in the changelog.
Pull Request Process
- Sync your fork with upstream before creating the PR
- Ensure all tests pass and coverage doesn't drop below 75%
- Link related issues using
Closes #123 - Request review from maintainers
- Address feedback iteratively; keep conversation professional
Once approved, a maintainer will squash and merge your PR. Large features may require RFC approval first.
Testing Guidelines
GeoServer uses JUnit 5, Testcontainers, and Selenium for integration/E2E tests. New code must include tests.
mvn test -pl module/wms/tests
mvn verify -Pintegration-tests
- Mock external dependencies where possible
- Use descriptive test class/method names
- Test edge cases and error paths
Community & Support
Get help or discuss improvements with the community:
- GitHub Discussions: github.com/geoserver/discussions
- Mailing List: users@geoserver.org
- Slack: #dev and #help channels
- Monthly Sync: First Wednesday of every month (UTC 14:00)
FAQ
Most PRs are reviewed within 3-5 business days. Complex architecture changes may take longer.
Absolutely! Documentation, design, translations, issue triage, and community moderation are all highly valued.
Yes, all contributions require signing the GeoServer Contributor License Agreement via the automated GitHub workflow.