github geoserver/geoserver-cloud v3.0.0
GeoServer Cloud 3.0.0

5 hours ago

GeoServer Cloud 3.0.0 is the first release built on GeoServer 3.0.0. Beyond tracking the new upstream major, this release modernizes the entire foundation of the platform: a move to the Spring Boot 4 / Spring Framework 7 generation, a servlet-based API gateway, Consul service discovery, and a new build-time configuration transpiler that replaces GeoServer's runtime XML wiring with generated Java configuration. The result is a faster, leaner, and more maintainable cloud-native GeoServer.

This is a major release with breaking changes. Please read the Migration Guide (2.28.x to 3.0.0) before upgrading.

Highlights

  • Built on GeoServer 3.0.0, inheriting its features and security hardening.
  • Spring Boot 4 / Spring Framework 7 / Spring Cloud 2025.1 across all services.
  • Servlet-based API gateway: the gateway moves from WebFlux to Spring Cloud Gateway Server MVC, simplifying request handling and aligning the whole stack on a single (WebMVC) programming model (#782, #819).
  • HashiCorp Consul replaces Netflix Eureka for service discovery (#798).
  • XML-to-Java configuration transpiler: a new annotation processor converts GeoServer's Spring XML into generated Java @Configuration, with build-time @Bean generation replacing runtime component scanning, for faster, more predictable startup (#805, #817, #832).
  • Faster startup: JVM AOT cache training baked into the images (#818), parallel JNDI DataSource setup (#812), and a startup actuator endpoint for monitoring (#768).
  • Native multi-platform Docker builds on per-architecture runners, replacing QEMU emulation (#820).
  • Refreshed UI: the initial GeoServer 3 theme (#793) and a full-screen OpenLayers 10 layer preview (#800).
  • GeoServer ACL 3.0.0 integration (#869, #829, #821).

API Gateway and Web Stack

  • Replace the WebFlux gateway with Spring Cloud Gateway Server MVC (#782).
  • Switch the gateway to a reactor-netty HTTP client, with improved error handling and graceful shutdown via actuator (#819).
  • Remove the controller hack for OWS service endpoints and clean up handler-mapping migration (#766, #767).
  • Fix GWC virtual service URLs (#767).

Configuration Transpiler

  • Replace GeoServer XML Spring configurations with Java @Configuration generated by a new transpiler annotation processor (#805).
  • Replace runtime component scanning with build-time @Bean generation (#817).
  • Fix transpiler handling of package-private types and dotted bean names (#832).
  • Refactor catalog/config Jackson DTOs for a clean, consistent distinction from the actual object class names (#765).

Service Discovery and Messaging

  • Migrate service discovery from Netflix Eureka to HashiCorp Consul (#798).
  • Fix RabbitMQ 4.x rejecting Spring Cloud Bus anonymous queue declarations (#835).
  • Fix the spring.cloud.bus.destination property for Spring Cloud 2025.1 (#813).

GeoWebCache

  • Backwards-compatible serialization for GeoServerTileLayerInfo after [GEOS-12049] removed GWC in-memory support (#779).
  • Enable GWC DiskQuota with the pgconfig backend, with expanded REST API integration tests (#862, #864).
  • Fix a "not found" error when deleting a layer with the pgconfig backend (#867).

pgconfig Catalog Backend

  • Cascade workspace changes to resources and layer groups (#856).
  • Evict cached layer lists on workspace/namespace rename (#857).
  • Tighten simplejndi cohesion and decouple pgconfig at runtime (#823).

Performance and Build

  • Add JVM AOT cache training to the Docker images for faster startup (#818).
  • Replace QEMU-emulated multi-platform builds with native per-platform runners (#820).
  • Set up JNDI DataSources in parallel (#812).
  • Enable the actuator startup endpoint for performance monitoring (#768).

Compatibility and Data

  • Disable DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES when parsing catalog objects, and add backwards-compatibility tests for Jackson 2 JSON property naming (#761, #764).
  • Fix an error that prevented saving customized feature type attributes (#759).
  • Fix an NPE caused by PMTiles layer groups (#755).

User Interface

  • Initial GeoServer 3 theme ([GEOS-12063] / [GSIP-238], #793).
  • Full-screen OpenLayers 10.0.8 layer preview ([GEOS-12067], #800).

Documentation

  • Reorganize deployment documentation around local Kubernetes onboarding (#833).
  • Document the Docker image architecture (#751).
  • Add SECURITY.md (#851), supporters documentation (#786), and contributor recognition guidance (#787).

Breaking Changes

See the Migration Guide for details and steps. In short:

  • Service discovery: Eureka is replaced by Consul (hashicorp/consul), affecting Docker Compose and Kubernetes deployments.
  • Gateway: now servlet-based (Spring Cloud Gateway Server MVC) instead of WebFlux.
  • Docker Compose profiles: the config-first profile is no longer included by default in the base service templates and must be set explicitly when using the Config Server.
  • Removed: the JDBC catalog/config backend and the leftover geoserver.security.enabled property (#777).
  • Message broker: RabbitMQ 4.x is supported and used by the example deployments; the Spring Cloud Bus uses transient queues, so no broker data migration is required.
  • Versioning: GeoServer Cloud now follows GeoServer's version (3.0.0) instead of the previous four-part scheme.

Contributors

Thanks to everyone who made this release possible: @groldan, @vuilleumierc, and @jemacchi.

Full Changelog: v2.28.4.0...v3.0.0

Don't miss a new geoserver-cloud release

NewReleases is sending notifications on new releases.