Open Source

Contributing to GeoServer

Thank you for your interest in helping build and maintain GeoServer. This guide provides everything you need to know to get started, report issues, and submit changes.

Why Contribute?

GeoServer powers geospatial workflows for thousands of organizations worldwide. Your contributions help make open geospatial standards more accessible, reliable, and performant.

🌟 Good First Issue

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

1

Fork the Repository

Create a personal fork of the GeoServer repository on GitHub to propose changes.

2

Clone Your Fork

Clone your fork locally and add the upstream remote for syncing changes.

3

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:

  1. Environment: OS, GeoServer version, Java runtime, browser/client
  2. Steps to Reproduce: Clear, minimal reproduction steps
  3. Expected vs Actual: What should happen vs what actually happened
  4. 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
⚠️ Important

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

  1. Sync your fork with upstream before creating the PR
  2. Ensure all tests pass and coverage doesn't drop below 75%
  3. Link related issues using Closes #123
  4. Request review from maintainers
  5. 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:

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.

Ready to Contribute?

Your help makes GeoServer better for everyone.

Browse Issues Read Docs