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@Beangeneration 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
@Configurationgenerated by a new transpiler annotation processor (#805). - Replace runtime component scanning with build-time
@Beangeneration (#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.destinationproperty for Spring Cloud 2025.1 (#813).
GeoWebCache
- Backwards-compatible serialization for
GeoServerTileLayerInfoafter [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_PROPERTIESwhen 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-firstprofile 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.enabledproperty (#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