GeoServer Contributor Guide

Welcome to the official guide for contributing to GeoServer. Whether you're fixing bugs, adding features, improving documentation, or triaging issues, your efforts help power open geospatial infrastructure worldwide.

📖 Read ~12 min ⚙️ Java 17+ / Maven 🌐 Open Source (LGPL)

Welcome & Community Values

GeoServer is a flagship project of OSGeo and thrives because of its global community. We value:

  • Openness: Transparent development, clear communication, and accessible contribution paths.
  • Quality: Rigorous testing, clean code, and adherence to OGC standards.
  • Inclusivity: Welcoming contributors of all skill levels and backgrounds.
  • Sustainability: Maintaining backward compatibility and long-term architectural health.
💡 New to Open Source?

Start with good-first-issue or documentation labels in our issue tracker. Mentorship is always available.

Prerequisites

Before you begin, ensure your environment meets these requirements:

  • Java: JDK 17 or newer (recommended: Temurin or Zulu)
  • Build Tool: Apache Maven 3.8.6+
  • Version Control: Git 2.30+
  • IDE: IntelliJ IDEA or Eclipse (Eclipse has a recommended configuration plugin)
  • Database: PostgreSQL/PostGIS (optional, for integration tests)
# Verify installations
java -version
mvn -version
git --version

Development Setup

Fork & Clone

Fork the geoserver/geoserver repository, then clone your fork locally.

git clone https://github.com/YOUR-USERNAME/geoserver.git
cd geoserver

Build the Project

Run a clean build. Skip tests initially to speed up the first run.

mvn clean install -DskipTests

Run the Jetty Module

Start the development server with hot-reload capabilities.

cd web/app
git submodule update --init
mvn jetty:run -pl :geoserver-web

Access at http://localhost:8080/geoserver/web (default: admin/geoserver)

⚠️ Submodules Required

GeoServer relies on external dependencies managed via Git submodules. Always run git submodule update --init --recursive after pulling updates.

Git & Development Workflow

We follow a feature-branch workflow with a strict focus on traceability and reproducibility.

Branching Strategy

  • main: Stable release branch (never commit directly)
  • main-develop: Active development branch (base for PRs)
  • feature/YOUR-FEATURE: New functionality
  • fix/GEOT-XXXX: Bug fixes linked to JIRA tickets

Commit Conventions

Use clear, descriptive commit messages. Reference tracker IDs when applicable:

feat: add vector tile optimization for large datasets (GEOT-12345)

- Implement streaming aggregation for WFS-T
- Add unit tests for edge cases
- Update documentation

Coding Standards

Consistency ensures maintainability. GeoServer enforces these rules via automated checks:

  • Style: Sun/Oracle Java Code Conventions, 4-space indentation, 120-char max line length
  • Checkstyle: Run mvn checkstyle:check before committing. Warnings will block CI.
  • Logging: Use SLF4J with parameterized logging. Avoid System.out.println.
  • Null Safety: Prefer Optional, explicit null checks, or @Nullable annotations.
  • Testing: All new code requires JUnit 5 tests. Target ≥80% coverage for core modules.
✅ Quick Validation

Run the full verification suite locally: mvn verify

Pull Request Process

Ready to submit your work? Follow these steps to ensure a smooth review:

  1. Sync with upstream: git fetch upstream && git rebase upstream/main-develop
  2. Push your branch: git push origin feature/your-feature
  3. Create PR: Use the template. Link related JIRA issues and provide context.
  4. Address reviews: Respond to all comments, make squash/fixup commits if requested.
  5. CI Checks: Ensure all GitHub Actions pass (build, tests, checkstyle, security scan).

Maintainers typically review within 48 hours. Urgent fixes can be flagged as priority/high.

Code of Conduct

GeoServer community interactions are governed by the OSGeo Code of Conduct. We expect:

  • Respectful communication in all channels (GitHub, mailing lists, Slack, conferences)
  • Constructive feedback without personal attacks
  • Inclusive language and accessibility awareness
  • Zero tolerance for harassment, discrimination, or intimidation

Violations should be reported privately to the maintainers team via conduct@geoserver.org. All reports are handled confidentially.

Need Help?

You're not alone. Reach out through any of these channels:

  • GitHub Discussions: Best for Q&A and community chat
  • dev@geoserver.org: Mailing list for architecture & core development
  • Slack (#geoserver-dev): Real-time conversations (invite via OSGeo)
  • Weekly Office Hours: Tuesdays, 15:00 UTC (Zoom link in calendar)
📚 Additional Resources

Explore the Official Documentation, JIRA Tracker, and Developer Wiki.