GeoServer Blog

GeoServer repository transition to main branch

The GeoServer project is changing our default branch to main.

The casual use of the words “master” and “slave” in computer software is an unnecessary reference to a painful human experience that continue to impact society.

The change is part of an industry shift made possible by the git, bitbucket, github and gitlab projects. The git command line, repository implementations, now support main as default branch setting.

To update your local repository:

git branch -m master main
git fetch upstream
git branch -u upstream/main main

To configure your local git tool so that new repositories are created with a main branch:

git config --global init.defaultBranch main
Read More

GeoServer 2.19-RC Released

We are happy to announce GeoServer 2.19-RC release candidate is available for testing. Downloads are available (zip and war) along with docs and extensions.

This is a GeoServer release candidate made in conjunction with GeoTools 25-RC and GeoWebCache 1.19-RC.

  • Release candidates are a community building exercise and are not intended for production use.
  • We ask the community (everyone: individuals, organizations, service providers) to download and thoroughly test this release candidate and report back.
  • Participating in testing release candidates is a key expectation of our open source social contract. We make an effort to thank each person who tests in our release announcement and project presentations!
  • GeoServer commercial service providers are fully expected to test on behalf of their customers.

Release Candidate Testing Priorities

This is an exciting release and a lot of great new functionality has been added. We would like to ask for your assistance testing the following:

  • The number one testing priority is to try out GeoServer with your data! Mass market open source thrives on having many people to review. Scientific open source like GeoServer thrives on exposure to many datasets.
  • Help check that new extension download bundles have contain everything needed, including appropriate readme instructions and open source license information.
  • The rest of this blog post highlights new features for GeoServer 2.19, please try out these features, read the documentation links, and ask questions.

Known Issues:

  • Layer configured with missing style throws NPE

MapML extension

In this release, MapML has graduated from community module to extension status. Map Markup Language (MapML) is a proposed extension to HTML, for maps. The objective of the project is to standardize accessible, performant Web maps with native support from Web browsers (maps in HTML). The GeoServer MapML extension will closely track the MapML specification as it evolves. Find out more at, and if you like our goals, join the community group!

The MapML extension works with GeoServer layers and layer groups, and uses WMS, WMTS and WFS facilities built into GeoServer to provide simple map previews layers. The layer previews can be “dragged” from one browser tab onto another map preview to visualize a mashup of the layers of layer groups using the built in MapML viewer.

MapML Layer properties panel
Editing a layer’s MapML properties in the Layers panel

MapML gridsets in the Layers Tile Caching tab
Editing a layer’s MapML gridsets in the Layers panel Tile Caching tab

MapML Preview link is added to the Layer Preview page
Preview a layer in the MapML viewer by following the MapML link

MapML previews can be mashed up by dragging the URL of one preview onto another
Mash up MapML previews by drag and drop

The Maps for HTML community would like to thank Andrea Aime, Jody Garnett and the GeoServer PSC for their support and help in getting this extension published.

More information on the GeoServer MapML extension is available in the user guide

WPS JDBC extension

The WPS JDBC extension allows to share the status of asynchronous WPS requests across a GeoServer cluster. The status of all requests, past and ongoing, can be stored in a database, for later reference.

The module uses GeoTools JDBC stores to access databases, create the necessary tables, and track status. Connection parameters are provided as property files, e.g.:


For more information, refer to the module documentation.

We’d like to thank Ian Turton for developing the module on behalf of GeoSolutions, Alessio Fabiani (GeoSolutions) for providing documentation for it, and Andrea Aime (GeoSolutions) for performing the QA and graduation steps.

WPS Download extension

The WPS download plugin provides support for the download of large amounts of data, allowing use of asynchronous requests, where using WFS, WCS or WMS for the same task would lead to HTTP timeouts. Also, download limits can be configured to avoid excessively large requests: size in MB, number of features, number of animation frames.

In particular, the following processes are available:

  • DownloadEstimator, verifying that a raster/vector download about to be attempted will fit the download limits.
  • DownloadProcess, allowing to download either raster or vector data, reproject and clip them
  • DownloadMapProcess, allows to download a large map matching what is visible on a client (which may be using tiles and display on a multi-screen), eventually dynamically fetching layers from remote WMS servers as well. It’s also possible to decorate the final map using the standard decoration layouts.
  • DownloadAnimationProcess, allows to build a MP4 movie given a set of layers and times.

GeoNode uses the module to allow download of datasets, eventually clipped and filtered to the current view. The asynchronous download allows to download large datasets, and retrieve them later, once ready.

GeoNode download
Initiating a download in GeoNode

GeoNode download
Configuring the download

GeoNode download
The download package is ready

GeoNode download
Viewing the clipped download in QGIS

For more information, refer to the module documentation.

Thanks to Alessio, Andrea, Daniele, from GeoSolutions, for developing the extension, and GeoNode/MapStore for testing it in various production environments.

WMTS Multidimensional extension

The WMTS multi-dimensional extension is an extension to the WMTS protocol developed during OGC Testbed 12. The extension allows to explore the dimensions attached to a dataset, providing ways to explore them, finding relationships between them.

Here are a couple of real world examples of this functionality:

  • GeoServer is publishing a set of satellite images. Each image is time stamped. The user is browsing the set of data on a map, and the client software wants to show the list of available times for the current area. The WMS/WMTS dimension support cannot help, but the WMTS extension has a request, GetDomainValues, which exactly answers this question.
  • GeoServer is publishing a set of NetCDFs containing weather forecasts. Each dataset has two times associated, a run time (the time the forecast was run) and a time (the predicted time for the weather data). Forecasts are run for the short term future, so the two times are strictly related. A user wants to compare forecasts for a given predicted time. The GetDomainValues request can be used to locate the run times that have a prediction for the given forecast time.
  • GeoServer is publishing a set of timestamped data. The client wants to display a timeline, providing an idea of which times are available for the current view. In addition to that, the clients wants to display how many datasets are available along the timeline. The GetHistogram request can be used to retrieve a count of datasets available over time buckets in a given interval.

The MapStore client uses the module to power its timeline extension, providing time discovery, navigation, animation, and histogram display.

MapStore timeline plugin, with animation controls
MapStore timeline plugin, with animation controls

MapStore timeline plugin, histogram view
MapStore timeline plugin, histogram view

For more information, refer to the module documentation.

Thanks to Nuno Oliveira (GeoSolutions) and Andrea Aime (GeoSolutions) for the initial development, and MapStore for adopting the module, using it in production, and ensuring its long term development

Params-extractor extension

The parameter extractor module is used to inject vendor parameters in all links that a standard OGC client uses, by either reflecting them into the Capabilities documents backlinks, or hiding them in an extra component in the URLs paths.

This can be used, for example, to provide a desktop client, such as QGIS, a different view of a given layer based on viewparams, cql_filter or env parameters, even if the client would not be able to use the parameters natively. Each combination of parameters receives a different starting GetCapabilities request.

A simple query parameter echoing can be setup for clients honoring query parameters in capabilities backlinks:

Parameter echoing
Parameter extractor echoing

For clients ignoring query parameters or even ignoring backlinks, the parameters can be added as a path component instead, and then expanded in a larger templated value:

Parameter extraction
Parameter expansion from path component

With the above setup, a URL ending with H11:


is interpreted as:


For more information, refer to the module documentation.

Thanks to Nuno Oliveira (GeoSolutions) for developing this module.

GeoWebCache-S3 extension

The GeoWebCache S3 blobstore allows to store GeoWebCache tiles in a S3 bucket. It has been also tested with a few other S3 compatible blob storage mechanisms, such as Minio.

This plugin is particularly useful when deploying GeoServer on AWS, but also when setting up a shared tile storage in Kubernetes.

Parameter extraction
Setting up the S3 tile storage

For more information, refer to the module documentation.

Retire ArcSDE Extensions

The ArcSDE Extension has been retired.

In this case we found that the extension is no longer actively used, and lacked sufficient feedback and resources for continued development. The last tested ArcSDE 10.2.2 version is no longer available, making the required jars required for installation unavailable.

Retire the Script community module

The Script community module has been retired.

The module provided scripting abilities for GeoServer, allowing to add WPS processes and small REST services in scripting languages, and storing them in the data directory.

Unfortunately the module fell un-maintained and would no longer build nor work.

Codebase updates and Quality Assurance

GeoServer continues to be build with the latest open source technologies:

  • GeoTools 25-RC
  • GeoWebCache 1.19-RC
  • JAI-EXT 1.1.19
  • JTS 1.18.1
  • GeoFence 3.4.7
  • Upgrade oshi-core from 5.4.0 to 5.5.0 for new Apple hardware support
  • Freemarker 2.3.31

We do not get a chance to talk about the code-base that makes up GeoServer often, but recent changes and improvements deserve some praise. The GeoServer team has really embraced automating code checks, starting with simply formatting the code in a consistent fashion, to more advanced techniques checking for common mistakes.

  • Switch most of the unit tests from JUnit 3 to JUnit 4
  • Remove usage of Vector/Hashtable, replace with ArrayList and HashMap, add PMD rule to enforce it
  • Remove un-necessary casts from code, add PMD rule to enforce it
  • Replace try/finally with try-with-resources, add a PMD rule to enforce it
  • Collapse catch statements with the same body in a multi-catch, add PMD rule to enforce it
  • Avoid assertTrue for tests that can be expressed with dedicated assertions. Add PMD rule to enforce it.
  • Replace iterator loops with enhanced for loops, add a QA rule to enforce it.
  • Run PMD checks on test sources as well.
  • Use Collection.isEmpty() when checking for item availability
  • Remove explicit types when diamond operator can be used instead. Added a PMD rule to enforce it.
  • Remove or suppress unchecked casts, enable the Java compiler lint option for it.

Although all these changes sound small in isolation, the fact that they are performed on the entire codebase, and checked each time a pull-request is proposed, really provides confidence in the technology we publish.

Thanks to Andrea for this valuable work.

And more!

There are several other new features and improvements, including:

Find out more in the release notes.

About GeoServer 2.19

Additional information on GeoServer 2.19 series:

Read More

GeoServer 2.17.5 Released

We are pleased to announce the release of GeoServer 2.17.5 with downloads ( war | bin ), documentation and extensions .

This release is made in conjunction with GeoTools 23.5. This is a maintenance release recommended for production systems.

The GeoServer 2.17.x has reached end-of-life and this is the last scheduled release fo the 2.17.x branch. Production systems are advised to use 2.17.5 release as a temporary measure, and schedule your upgrade to 2.18.

Thanks to everyone who contributed, and Gabriel Roldan & Jody Garnett (GeoCat) for making this release.

Improvements and Fixes

Fixes included in this release:

  • GEOS-9879 - app-schema extension fix for feature collection count
  • GEOS-9897 - JTS upgrade breaks geofence integration
  • GEOS-9880 - Monitor failure when maxSize is set to unbound
  • GEOS-9881 - SldService failure when percentages and continuous parameters both set to true
  • GEOS-9895 - Override transformation operations ignored for bounding box computation
  • GEOS-9911 - Params-extractor plugin, wrong url in getCapabilities when having context with addition “/”

For more information check the 2.17.5 release notes.

About GeoServer 2.17

Features, presentations and reference material on the 2.17 series:

Read More

GeoServer 2.18.2 Released

We are pleased to announce the release of GeoServer 2.18.2 with downloads ( war | bin ), documentation and extensions.

This release is made in conjunction with GeoTools 24.2 and GeoWebCache 1.18.2. This is a stable release recommended for production systems.

Thanks to everyone who contributed, and Alessandro Parma, Andrea Aime (GeoSolutions) for making this release.

Improvements and Fixes

This release includes a number of fixes in core and extensions:

  • Improved GWC seeding scalability (also check GWC 1.18.2 release notes).
  • Fixed back-links generation during WPS asynchronous requests, when a proxy base URL is used.
  • Fixed a GeoFence server packaging issue.
  • A number of dependent libraries have been upgraded, including the PostgreSQL and MySQL JDBC drivers, HTTP components, Guava.

Community Updates

Things get really interesting when looking at functionality provided by community modules:

  • The new support for COGs based on ImageIO Ext landed in a community module, adding it adds support for COG in both the GeoTIFF reader and image mosaic. Support for harvesting COG granules is also added in the REST API.
  • A deadlock in JDBCConfig has been resolved, along with issues related to high load when GeoServer has just started up.
  • The WPS download “map” and “animation” processes sport improved legend support.

For more information check the 2.18.2 release notes.

About GeoServer 2.18

Additional information on GeoServer 2.18 series:

Read More

GeoServer 2.17.4 Released

We are pleased to announce the release of GeoServer 2.17.4 with downloads ( war | bin ), documentation and extensions.

This release is made in conjunction with GeoTools 23.4 and GeoWebCache 1.17.4. This is a maintenance release recommended for production systems. You are reminded that this is most likely to be the last release made on the 2.17 branch and you should consider moving to the stable 2.18 branch as soon as possible.

Thanks to everyone who contributed, and Ian Turton (Astun Technology) & Jody Garnett (GeoCat) for making this release.

Improvements and Fixes

This release includes a number of improvements. Notable improvements:

  • [GEOS-9753] - Features-templating plug-in allows env parametrization on vendorOptions
  • [GEOS-9765] - Add IP Address range to GeoFence UI
  • [GEOS-9780] - status page shows (read-only) loopback partitions

Fixes included in this release:

  • [GEOS-9689] - WFS-NG Other SRS in URN OGC format are not matched by WMS Request SRS
  • [GEOS-9750] - WPS processes fail with missing CSV dependencies
  • [GEOS-9754] - Not consistent array element enumeration in flat GeoJson output format
  • [GEOS-9758] - CRS Panel overrides URN SRS format with EPSG:XXXX format
  • [GEOS-9791] - GeoJSON bounding box axis order wrongly encoded when CRS axis order is NORTH-EAST
  • [GEOS-9816] - Download links from the result of an asynchronous process will not honor the proxy base URL, if it uses HTTP header variables

For more information check the 2.17.4 release notes.

About GeoServer 2.17

Features, presentations and reference material on the 2.17 series:

Read More