Contributing to GeoServer
Welcome to the GeoServer contributor guide. We're excited you're here! GeoServer is an open-source platform for sharing geospatial data, and your contributions help make it more robust, accessible, and performant for thousands of organizations worldwide.
Whether you're fixing a bug, improving documentation, adding a new spatial format, or optimizing rendering pipelines, every contribution matters. This guide outlines our development workflow, coding standards, and community expectations.
✨ Quick Start
Ready to dive in? Check out our Getting Started section or browse good-first-issue tags in our issue tracker.
Code of Conduct
GeoServer is committed to fostering an open, welcoming, and inclusive community. All contributors, maintainers, and users are expected to uphold our Code of Conduct.
We prioritize respectful communication, constructive feedback, and collaborative problem-solving. Harassment, discrimination, or unprofessional behavior will not be tolerated. Please report any concerns to conduct@geoserver.dev.
Getting Started
Before submitting your first contribution, familiarize yourself with our project structure and workflow. GeoServer follows a conventional branching model and uses GitHub for issue tracking, pull requests, and code reviews.
- Fork the repository and clone it locally.
- Check the issue tracker for open tasks or propose a new feature.
- Create a feature branch from
develop. - Make your changes following our coding standards.
- Run tests and ensure all checks pass.
- Submit a Pull Request with a clear description and scope.
Development Setup
Running GeoServer locally requires a few dependencies. Ensure your environment is configured before proceeding.
Prerequisites
- Java 17+ (LTS recommended)
- Node.js 18+ & npm (for frontend/tooling)
- PostgreSQL 14+ with PostGIS extension (optional but recommended for testing)
- Maven 3.8+ for building
- Git & GitHub CLI (optional)
Local Environment
# Clone your fork
git clone https://github.com/your-username/geoserver.git
cd geoserver
# Install dependencies
npm install
mvn clean install -DskipTests
# Start development server
npm run dev
mvn tomcat7:run
The server will be available at http://localhost:8080/geoserver/. Use the default credentials admin / geoserver to log in.
Making Changes
Our workflow is designed to keep the main branch stable while allowing rapid development on feature branches. Always work on a dedicated branch and avoid committing directly to main or develop.
Use descriptive branch names: feat/add-wmts-caching, fix/resolve-srs-mismatch, or docs/update-api-reference.
Code Standards
Consistent code quality makes reviews faster and maintenance easier. We enforce standards through automated checks, but please review them manually before pushing.
Branching Strategy
main- Production-ready releasesdevelop- Integration branch for upcoming featuresfeature/*- New functionalityfix/*- Bug fixesdocs/*- Documentation updates
Commit Guidelines
We follow Conventional Commits. Structure your messages like this:
<type>([scope]): <description>
<optional body>
<optional footer>
Types: feat, fix, docs, style, refactor, perf, test, chore
Testing & Linting
All contributions must include tests. We use JUnit for backend and Vitest for frontend tooling.
# Run full test suite
mvn test
npm test
# Run linters
npm run lint
mvn checkstyle:check
⚠️ Important
Pull requests that fail CI checks or lack test coverage will not be merged. Ensure npm run lint and mvn verify pass locally before pushing.
Review & Release
Once your PR is open, maintainers will review it within 48 hours. We use an approval-based workflow:
- Automated checks must pass
- At least 2 maintainer approvals required
- Significant features require architecture review
- Squash-and-merge is preferred for clean history
Releases follow semantic versioning. Patch releases occur weekly, minor releases monthly, and major releases quarterly. Check the Release Calendar for schedules.
Need Help?
Stuck on something? Don't hesitate to ask. Our community is active and supportive.
- 📖 Documentation: Comprehensive guides and API references
- 💬 Discord: Real-time chat with developers & maintainers
- 🐛 GitHub Issues: Bug reports & feature requests
- 📧 Dev Mailing List: For architectural discussions