REST API Code Sprint Prep

In our previous blog post we highlighted the GeoServer Code Sprint 2017 taking place at the of this month. We are all looking forward to GeoSolutions hosting us in beautiful Tuscany and have lots of work to do.

One of the secrets (and this comes as no surprise) to having a successful code sprint is being prepared. With this year’s REST API migration from restlet to spring model-view-controller we want to have all technical decisions made, and examples for the developers to work from, prior to any boots hitting the ground in Italy.

But before we get into the details …

Code Sprint Sponsors

We would like to thank our sprint sponsors – we are honoured that so many organizations have stepped up world wide to fund this activity.

Gaia3D is a professional software company in the field of geospatial information and Earth science technology. We would like to thank Gaia3D for their gold sponsorship.


Insurance Australia Group (IAG) is our second gold sponsor. This is a great example of open source being used, and supported, by an engineering team. Thanks to Hugh Saalmans and the Location Engineering team at IAG for your support.


Boundless is once again sponsoring the GeoServer team. Boundless provides a commercially supported open source GIS platform for desktop, server, mobile and cloud. Thanks to Quinn Scripter and the Boundless suite team for their gold sponsorship.



How 2 Map is pleased to support this year’s event with a bronze sponsorship.


I am overjoyed FOSSGIS (German local OSGeo chapter) is supporting us with a bronze sponsorship. This sponsorship means a lot to us as the local chapter program focuses on users and developers; taking the time to support our project directly is a kind gesture.



Sponsorship Still Needed

While we have a couple of verbal commitments to sponsor – we are still $1500 USD off the pace. If your organization has some capacity to financially support this activity we would dearly love your support.

This is an official OSGeo activity; any excess money is returned to the foundation to help the next open source sprint.  OSGeo sponsorship is cumulative. Check their website for details on how your helping out the geoserver team can be further recognized.

For sponsorship details visit the wiki page (or contact Jody Garnett for assistance).

Update: Since this post was published we are happy to announce new sponsor(s).

Thanks to Caroline Chanlon and the team at Atol Conseils et Développements for bronze sponsorship.


Update: Thanks to David Ghedini ( and others donating smaller amounts via the OSGeo paypal button.

Getting Ready for REST

In this week’s GeoServer meeting we had a chance to sit down and plan out the steps needed to get ready.

The majority of prep will go into performing the restlet to spring mvc migration for a sample REST API end point to produce a “code example” for developers to follow. We have selected the rest/styles endpoint as one of the easier examples:

  1. Preflight check: Before we start we want to have a good baseline of the current REST API responses. We would like to double check that each endpoint has a JUnit test case that checks the response against a reference file. Most of our tests just count the number of elements, or drill into the content to look for a specific value. The goal is to use these reference files as a quick “regression test” when performing the migration.
  2. Migrate rest/styles from StyleResource (restlet) to StyleController (spring): This should be a bit of fun, part of why spring model-view-controller was selected. Our goal is to have one Controller per end-point, and configure the controller using annotations directly in the Java file. This ends up being quite readable with variable names being taken directly out of the URL path. It is also easier to follow since you do not have to keep switching between XML and Java files to figure out what is going on.  It is important that the example is “picture perfect” as it will be used as a template by the developers over the course of the sprint, and will be an example of the level of quality we expect during the activity.
  3. Create StyleInfo bindings (using XStream for xml and json generation): The above method returns a StyleInfo data structure, our current restlet solutions publishes each “resource” using the XStream library. We think we can adapt our XStream work for use in spring model-view-controller by configuring a binding for StyleInfo and implementing in using XStream.  This approach is the key reason we are confident in this migration being a success; existing clients that depend on exactly the same output from GeoServer – should get exactly the same output.
  4. StyleController path management: There is some work to configure each controller, while we have the option of doing some custom logic inside each controller we would like to keep this to a minimum.  This step is the small bit of applicationContext.xml configuration work we need to do for each controller, we expect it to be less work then reslet given the use of annotations.
  5. Reference Documentation Generation: We are looking into a tool called swagger for documentation generation. Our current reference documentation only lists each end-point (and does not provide information on the request and response expected – leaving users to read the examples or try out the api in an ad-hoc fashion). See screen snap below, our initial experience is positive, but the amount of work required is intimidating.
  6. Updated examples for cURL and Python: We would like to rewrite our examples in a more orderly fashion to make sure both XML and JSON sample requests and responses are provided. Ideally we will inline the “reference files” from the JUnit regression test in step 1 to ensure that the documentation is both accurate and up to date.

You can see a pretty even split in our priorities between performing the migration, and updating the documentation. We believe both of these goals need to be met for success.

Next stop Tuscany

Although this blog post focuses on the sponsorship/planning/logistics side of setting up a code sprint there is one group without whom this event could not happen – our sprint participants and in-kind sponsors (providing a venue & staff).

Thanks to GeoSolutions for hosting us, and to Astun, Boundless, GeoSolutions for the hands-on participation that makes this sprint possible

For more information:

10 years of GeoServer in Brazil

This is a special year because the Geoserver Brazilian Community celebrates 10 years. It all started in 2007 with an GeoServer’ Course at III ENUM (event focused on MapServer) in Brasilia, federal capital, and since then the community has approximately 600 members and more than 5,000 messages exchanged during those 10 years.

During this time, GeoServer has been widely disseminated both in education, government and corporate. There are reports that large banking institutions, telecommunications and information technology companies in addition to governmental sectors such as IBGE (Brazilian Institute of Geography and Statistics), Embrapa (Brazilian Agricultural Research Corporation), IBAMA (Brazilian Institute of Environment and Natural Resources Renewables), among others, has used GeoServer in its various projects.


However, the most notable among his many successes was the establishment of GeoServer as the official map server of INDE (Spatial Data Infrastructure), in 2008 by then President Lula.

We would like to thank everyone who has contributed to the growth of GeoServer in Brazil, whether writing articles, giving lectures or simply encouraging the use of GeoServer within its institutions. A special thanks to Andrea Aime who implemented the projection used by Brazil.

GeoServer 2.11-beta released

We are happy to announce the release of GeoServer 2.11-beta. Downloads are available (zip, war, dmg and exe) along with docs and extensions.

This is a beta release of GeoServer made in conjunction with GeoTools 16-beta.

We want to encourage people to test the release thoughly and report back any issue found. With no further delay, let’s see what’s new, that is, what is there to test!

YSLD module graduated to supported land

The YSLD styling language has been graduated to supported land, becoming an official extension. YSLD is a YAML based language which closely matches the stucture of SLD, and the internal data model that GeoServer’s renderer uses. Here is an example from the YSLD Cook Book:

title: 'YSLD Cook Book: Simple Line'
- name: name
  - symbolizers:
    - line:
        stroke-color: '#000000'
        stroke-width: 3

Compared to SLD it sports a similar structure, but in a more compact and readable syntax. Here the same example can be expressed in a more compact format:

  stroke-color: '#000000'
  stroke-width: 3

Similarly to SLD and CSS, the user guide contains both a reference and a cookbook to get you started. There is also a styling workshop with both CSS and YSLD examples (including an important example for converting your SLD styles to YSLD).

Vector tiles graduate to extension

The vector tiles community module graduated to extension. The module allows to generate vector tiles out of WMS and WMTS requests, using SLD to filter the contents of the tile at the requested scale. Supported vector tiles formats are MVT (MapBox Vector Tile), GeoJSON vector tiles, and TopoJSON vector tiles.

This allow for much more compact data transfers, reduced tile caches thanks to overzooming support, and allows the client to control styling. Here is an example of the client rendering a world map as a vector tile, and highlighting a specific area by attribute:



Hop on the documentation to get more information about this extension, along with a couple of presentations highlighting vector tile usage.

Underlying labels in SLD

A new vendor option allow to underline labels in SLD (and CSS). Just add:

<VendorOption name="underlineText">true</VendorOption>


Opaque Container Layer Group Mode

A new layer group mode has been added, called “Opaque Container”. It’s similar to “single” in that you cannot see the layers contained in it, but it also prevents its layers from showing up at the root level of the capabilities document. This new mode is targeted to building “base maps” that the client is not allowed to take apart into their components.

You can read more about layer group modes in the GeoServer user guide.

Layer Group Security

The build-in data security can now secure layer groups too, for both global and workspace specific groups. “Tree” mode groups (named tree, container tree, opaque container) will extend the security rules applied to them to the layers contained.


Improved loading and OGC request times for large installations

GeoServer has historically had issues with long startup times on installation having several thousands layers. A group of recent improvements significantly sped up these times making it possible to handle tends of thousands of layers with no particular headaches.

For reference, some tests were run on a Core i7 860, 16GB of memory, 2TB hybrid drive (spinning disk plus SSD cache), on two different data directories:

  • “Many states”: 1 workspace, 1 store, 10k layers, 10k cached layers
  • “Large”: 1001 workspaces, 11000 stores (a mix of shapefiles, postgis, directory of shapefile, single tiff, arcgrid, mosaics), 42000 layers and 42000 associated tile layers

Startup times have been measured in both “cold” and “warm” mode, “cold” means the operating system file system cache contains none of the configuration files and the startup has to actually read everything from the disk, “warm” means the data dir is fully cached in memory instead:

  • Many states, cold startup: 30s
  • Many states, warm startup: 21s
  • Large, cold startup: 107s
  • Large, warm startup: 45s

As you can see, worst case is loading in excess of 40 thousands layers in less than a minute and a half!

For reference, “Large” startup times with JDBCConfig are 290s for cold startup, and 120s for warm startup. This is mostly due to cached layers loading, if your configuration has none the startup time will be of around 20-30 seconds instead (no matter how many layers are configured, because JDBCConfig loads layers on a as-needed basis at runtime… for a cost, see below).

It is also interesting to compare the times needed to run a GetMap against one of the “topp:states” in the “many states” data directory.

Version Throughput req/sec Avg resp. time ms
2.10.1 169 47
2.10.1 + JDCBConfig 68 117
2.11-beta 233 34

More information can be found in the initial proposal, and on the latest mailing list thread about parallel catalog loading.

Improved lookup of EPSG codes

Ever been annoyed by some shapefile with a .prj declaration that GeoServer does not understand? If so, try this new release, we pulled some extra heuristics and smarts to figure out the equivalent EPSG code of thousands more cases. This will hopefully reduce guesswork when configuring new vector layers, not to mention significantly speeding up importing large directories of shapefiles in the “Importer” extension.


Other assorted improvements

There are many improvements to look at in the release notes, cherry picking a few here:

  • New REST call allowing a users to modify his/her password (no UI for it yet, sorry)
  • Support JSON encoded exceptions for WFS 2.0 too (was already available for 1.0 and 1.1)
  • Drastically reduced output size for WMS PDF output format, when using a graphic fill based on repeated marks or SVG symbols
  • Improved scalability when using “advanced projection handling” thanks to a new implementation of SoftValueHashMap (used as a cache by the referencing subsystem)
  • Better transparency handling of NODATA and ROI (Region Of Interest)
  • Fixes in computation of global disk quota (if you find you have a negative number, upgrade, wipe out the quota database, and restart)

Test, test, test!

Now that you know about all the goodies, please go, download and test your favorite ones. Let us know how it went!

About GeoServer 2.11

GeoServer 2.11 is scheduled for March 2017 release. This puts GeoServer back on our six month “time boxed” release schedule.

GeoServer 2.10.2 released

The GeoServer team is pleased to announce the release of GeoServer 2.10.2. Download bundles are provided (binwardmg and exe) along with documentation and extensions.

GeoServer 2.10.2 is the latest stable release of GeoServer and is recommended for production deployment. This release is made in conjunction with GeoTools 16.2 and GeoWebCache 1.10.2. Thanks to all contributors.

New Features and Improvements:

  • Promote YSLD module to extension
  • Add jetty-servlets.jar file to default jetty to help users set up CORS
  • Handle non error http codes (from HttpCodeException) as normal response
  • Reducing output size of PDF with graphic fills by using tiling patterns

Bug Fixes:

  • Disk quota usage page no longer shows negative bytes free (if you already have negative values in your quota DB, follow this instructions)
  • New style editor can now detect and fix old GeoServer CSS styles (which were marked as SLD)
  • Fixes to json output for layergroup
  • Can not display table based pages in Turkish locale
  • WMS 1.3.0 GetCapabilities response doesn’t validate against the schema when using LayerGroups
  • Editing style and moving it into workspace loses the edits
  • Style Edit Page: Apply then Submit causes WicketRuntimeException
  • Force transformation of ROI and NoData to transparent/bg color in direct raster rendering path

And more! For more information on this release check the release notes ( | 2.10-RC1 | 2.10-beta | 2.10-M0 )

About GeoServer 2.10

Articles, docs, blog posts and presentations:

Community modules

  • A new community module to backup/restore and restore GeoServer configuration
  • A resource browser is available allowing remote management of styles, icons and fonts (needs building from sources).
  • A new WMTS multidimensional domain discovery community module for discovering patches of data in scattered data sets

GeoServer Code Sprint 2017

GeoSolutions has offered to host the GeoServer team for a Java 2017 code sprint to look at updating, fixing and documenting the the GeoServer REST API. The GeoServer REST API is used to remotely manage a GeoServer instance and has proven highly successful for automation, integration with other applications, with libraries for java and python remote management.


The code sprint is dedicated to:

  • Migrating from the restlet library to Spring MVC library. As an early adopter GeoServer selected the restlet library as best of breed at the time. It has not aged well, and Spring MVC represents a supported annotation based solution that is familiar to more developers.
  • Although popular the REST API has not attracted a lot of investment, leading it to have the highest bug count of any of our GeoServer modules! This sprint would like to directly reduce this bug count, and indirectly reduce this bug count by introducing more developers to this area of the codebase.
  • The REST API also has the greatest number of requests for documentation and examples. This code sprint will update the documentation for each area of the REST API as as it is migrated, and look at some of the solutions for the automated collection of examples requests.
  • We will be sure to test against the gsconfig python library and geoserver-manager java library.

The GeoServer team has previously planned and executed a highly successful code sprint. We would like to once again ask for your support and participation in 2017.

Viareggio, Lucca

The code sprint is planned for a week in March in the glamorous GeoSolutions headquarters of Viareggio, Lucca. Thanks to GeoSolutions for providing a venue, space is limited to 10-15 people so hit the wiki to sign up if you are interested.


A note on the timing: We were unable to join the Daytona Code Sprint 2017 as it is scheduled too close to the GeoServer 2.11 code freeze. GeoSolution’s offer to host in Europe will reduce travel costs allowing us to run the event with minimal sponsorship.

Participation and Sponsorship

We have the following sponsorship levels available:

  • Gold: $1000
  • Silver: $500
  • Bronze: $250

We are reaching out to international and local sponsors. Contributions will be put towards travel costs for overseas sprinters who would be otherwise unable to attend. Any surplus at the end of the event will be turned over to OSGeo or used for a future code sprints.

For more details on participation, sponsorship or budget for the event please see the Java 2017 Code Sprint 2017 on the OSGeo wiki.

GeoServer 2.10.1 Released

The GeoServer team is pleased to announce the release of GeoServer 2.10.1. Download bundles are provided (binwardmg and exe) along with documentation and extensions.

GeoServer 2.10.1 is the latest stable release of GeoServer and is recommended for production deployment. This release is made in conjunction with GeoTools 16.1 and GeoWebCache 1.10.1. Thanks to all contributors.

New Features and Improvements:

  • Allow windows installer to use port 80
  • Allow underlined labels in SLD
  • Add documentation for the WMTS multidimensional module
  • Add an example of GS Download process with request of output reference

Bug Fixes:

  • Slow startup of GeoServer with many layers
  • Cannot upload style files in the style editor
  • Generating a raster SLD style from template produces a formally invalid style
  • WPS fails if geometry column is named “location”
  • REST API services settings.html throws errors for null values
  • REST PUT property update on ServiceInfo does not work properly for primitive properties
  • ClassCastException when posting WFS Transaction request on a URL containing a valid GetFeature request
  • High oversampling on raster cells with reproject can put a significant amount of load on GeoServer
  • JMS Clustering does not propagate virtual services configurations

And more! For more information on this release check the release notes ( | 2.10-RC1 | 2.10-beta | 2.10-M0 )

Security Considerations

This release addresses three security vulnerabilities:

  • Additional restrictions have been placed on the demo request page
  • Addressed an XML injection vulnerability identified in an automatic scan.
  • GeoServer now changes sessions during login, this addresses a class of vulnerablities known as “session fixation”.

Thanks again to Nick Muerdter for reporting these in a responsible manner (and Andrea and Jody for addressing these during the November bug stomp.)

If you wish to report a security vulnerability, please visit our website for instructions on responsible reporting.

About GeoServer 2.10

Articles, docs, blog posts and presentations:

Community modules

  • A new community module to backup/restore and restore GeoServer configuration
  • A resource browser is available allowing remote management of styles, icons and fonts (needs building from sources).
  • A new WMTS multidimensional domain discovery community module for discovering patches of data in scattered data sets
  • The YSLD community module has been updated with extensive documentation

GeoServer 2.9.3 Released

The GeoServer team is pleased to announce the release of GeoServer 2.9.3. Download bundles are provided (binwardmg and exe) along with documentation and extensions.

This is a maintenance release of GeoServer suitable for production systems. Maintenance releases are focused on bug fixes and stability, rather than new features.

The team has been working hard, resulting in a wide range of bug fixes:

  • Windows installer fixed allowing port to set for standalone or service use
  • KML Output managed a date-month swap when used in a non-POSIX locale.
  • Improved documentation for the demo pages, including the WCS Request builder.
  • CSS stroke-offset now supports expressions
  • WMS GetCapabilities fix for inadvertently show layer group contents multiple times.
  • Style generation fix for raster data layers
  • Coverage view improvements include preservation of origional band names, and alpha band if available.
  • WFS correctly handles disabled stores
    • Correctly represent empty true/false values for html output
    • Representation of an empty styles list in JSON fixed
    • Cascade delete fixed to correctly handle nested layer groups
  • JMS Clustering has received a number of fixes: correctly handles virtual service configuration, propagation of workspace and service settings.
  • Lots of bug fixes (check the release notes for details)

For more information about GeoServer 2.9.3 refer to release notes (2.9.3|2.9.2 | 2.9.1 | 2.9.0 | RC1 | beta2 | beta | M0 ).

Community Modules

Community module updates:

  • A community module is now available allowing GeoServer to authenticate against the OAuth2 protocol (including Google OAuth2).

Security Considerations

This release addresses three security vulnerabilities:

  • Additional restrictions have been placed on the demo request page
  • Addressed an XML injection vulnerability identified in an automatic scan.
  • GeoServer now changes sessions during login, this addresses a class of vulnerablities known as “session fixation”.

Thanks again to Nick Muerdter for reporting these in a responsible manner (and Andrea and Jody for addressing these during the November bug stomp.)

If you wish to report a security vulnerability, please visit our website for instructions on responsible reporting.

About GeoServer 2.9

Articles, docs, blog posts and presentations:

The new and improved GeoServer Style Editor

Over the course of the past few months, I have been working on improving GeoServer style editor page based on the “CSS Styles” page. These changes are now available in the newly released GeoServer 2.10.0.

The original GeoServer Improvement Proposal for these changes (GSIP-149) can be found on the github page for the GeoServer project.

From a development perspective, working on these improvements was quite the experience, and turned out to not be as simple a port as I had expected. By the end of it, I wound up learning a lot about wicket (The UI Framework used by GeoServer), and the various ways in which we have gotten it to do things it was never designed to do.

Thanks to Andrea Aime for help with some of the technical aspects of Wicket and the previous Style Page, and to Jody Garnett for guiding me through the creation of my first GSIP. This work greatly benefited from review and feedback during the 2.10 release candidate and from the those attending the FOSS4G Styling workshop.


Intro to the New Style Editor

The new style editor is far more functional, in addition to managing the style you can now directly update which layers use the style, interactively preview your map at different zoom levels, and review layer attributes.

The new “apply” button works very well with the map preview, allowing you to save your work and review the change visually without leaving the style editor.

Refer to the User Guide for more details about each tab.

Data Tab

All the functionality of the old style editor is available on the first tab. This consists of modifying style data (name, workspace, format), style content (style generation and upload functions), and the legend graphic.


For example to generate a new point style:

  1. Under Generate a default style select Point.
  2. Click Generate, a random color will be used when generating the new style.
  3. The Style editor is filled in with the generated style.
  4. Press Apply to save this style while remaining on the style editor page.
  5. Click Preview Legend to view a preview of the style iconography.

Publishing Tab

The “Publishing” tab visualizes which layers the current style is associated with, and lets you modify these associations for all layers.

For instance, we can set our new style to be the default style for the “buildings” layer:


To use our new point style we can configure several layers:

  1. Make our style the default for buildings, click the checkbox under the Default column.
  2. To allow our style to be used as an alternative style for firestations and hospitals click the checkbox under the Associated column.
  3. These changes are made immediately.

Layer Preview Tab

One of the most valuable elements of the earlier CSS Style page was the ability to preview the current style on an existing layer. This ability to edit current layer, while showing a layer preview, is the key workflow improvement of the improved Style Editor.

The preview tab allows you to view the current style on any layer while editing:

  1. The layer used for the preview can be changed by clicking the layer name at the top of the page.

  2. The style editor remains at the bottom of the page when switching tabs, so we can go ahead and modify our style:

  3. After modifying the style, we can click the new “Apply” button to save the style and remain on the page. The Layer Preview will be updated with the new styling:

Layer Attributes Tab

Similar to the Layer Preview, the Layer Attributes tab allows you to preview the attributes associated with the preview layer.

This can be useful for determining what attribute to use for labeling, or how best to configure scale-dependant rules.

  1. The layer used for the preview can be changed by clicking the layer name at the top of the page.
  2. The Min/Max statistics can be calculated using the “Compute” link. Let’s take a look at the range of elevations:screen-shot-2016-11-14-at-10-08-49-am
  3. We can use this information to set the colour of the points based on their elevation, using the Interpolate function:
  4. Clicking the “Apply” button and returning to the preview tab, we can see the results of these changes in the in the layer preview:

And there you have it! The new style page presents a much more streamlined workflow for writing new styles for your layers.

If you are using the new style editor and encounter an error, please file a bug report.

Nov 18th Bug Stomp

Save the Date: The next GeoServer “Bug Stomp” is scheduled for Nov 18th!

If you would like to take part, but are new to open source development, please join the GeoServer-Devel email list and introduce yourself. We would like to ensure everyone shows up with a working test/development environment – and access to the “gitter” chat. Getting setup before the event gives everyone a chance to work as a team.

Please join us on Friday November 18th,  all skill levels welcome. Open source is not a spectator sport.


About GeoServer Bug Stomp

GeoServer is hosting monthly “Bug Stomps”, giving the developer community a chance to focus on the health of the project, tackle difficult problems and introduce new developers to the team.

In October we have 117 issues closed – with 17 of those marked as fixed.


Highlights include:

The community modules also got some love:

We understand that it can be very difficult to balance customers deadlines and open source responsibilities. We would like to thank GeoSolutions, Boundless and Transient for their monthly commitment. If your organization is interested in taking part, and being recognized in these blog posts, contact a PSC member for details.

GeoServer 2.10.0 released

The GeoServer team is happy to announce the release of GeoServer 2.10.0. Downloads are available (zipwardmg and exe) along with docs and extensions.

This is the latest stable release of GeoServer intended for production systems. Please note that GeoServer 2.10.0 and GeoServer 2.9.2 include important security updates and we advise all users of GeoServer to upgrade at this time.

This release is made by Ian Turton with the help of the entire GeoServer team. It is built in collaboration with GeoTools 16.0 and GeoWebCache 1.10.0. We would like to thank everyone who provided feedback on the release candidate, ideally we would like more participation.

For more information on this release check the release notes ( | 2.10-beta | 2.10-M0 ).

Packaging and Installation

  • The macOS DMG is now signed by the Open Source Geospatial Foundation which is required for the latest macOS. If you are having trouble please check System Preferences Security & Privacy and ensure that apps are allowed from “App Store and identified developers”.


    macOS 10.12 System Preferences for Security and Privacy

  • The windows installer is now signed by the Open Source Geospatial Foundation. Unfortunately it takes a few days for “Windows SmartScreen” to trust that the application is okay (it is marked as “not commonly downloaded” since we just created it). You will need to click “More Options” to see the option to run the application.

    SmartScreen warning on Windows 7

    SmartScreen warning on Windows 7

  • For those just starting out the default data directory now includes security restrictions on WFS-T functionality (restricting editing of data to the administrator account by default, it’s up to the administrator to change that if they wish).selezione_118

Thanks to Michael Smith and the OSGeo for purchasing a digital certificate – this helps our open source software reach a wider audience. We would also like to extend our thanks to Larry Shaffer for digging in on the macOS and Windows requirements. The signed windows installer has been “built by hand” and we ask for your feedback so Larry can put together an automated system.

Security Considerations

Aaron Waddell reported an XXE vulnerability in the GeoTools library which has now been fixed.

We ask all our users to treat security vulnerabilities with respect and make plans to upgrade to GeoServer 2.10.0 or GeoServer 2.9.2 at this time.

New Style Editor

This release includes the new Styled Editor featured at the FOSS4G 2016 workshop. The editor mixes in the CSS editor preview and layer association abilities for more productive style development (if you are a CSS user you can go straight to the standard CSS editor now, the specific one got retired).

Here are a few screenshots. The main tab is reminiscent of the existing style editor page:


The publishing tab allows to link the style to layers as primary, or as associated/secondary style:



The preview tab is where we expect most of the work to be done, editing the style, and clicking on “Apply” to view how the changes affect the map:


Finally, the layer attributes tab shows the available attributes, their type, a sample value and allows to compute statistics on them:


We would like to thank those who attended the FOSS4G 2016 styling workshop for trying out an early milestone release. Special thanks to Andrea for extensive testing/feedback and to Torben for all the hard work during the release candidate.

Improved QGIS style compatibility

At the FOSS4G 2016 code sprint some work was done to increase the compatibility between QGIS and GeoServer styling. While most of the work was performed on the QGIS SLD export correctness, some work was also done on the GeoTools/GeoServer side.

First, we taught GeoServer how to handle SE/SLD 1.1 external marks, and implemented support for TTF symbols as external marks (this is how QGIS exports TTF based symbols). Here is an example of the syntax (remember, this is SE, symbology encoding, not SLD 1.0):

   <se:OnlineResource xlink:type="simple" xlink:href="ttf://DNR%20Recreation%20Symbols"/>
     <se:SvgParameter name="fill">#000000</se:SvgParameter>

The result is the extraction of the symbol from the true type font, and its usage in the map as a scalable vector symbol.  Here is a sample from our test suite, with lines overlaying the symbols to easily identify the point locations:



QGIS ships with a set of SVG symbols which are “interesting”, in that they do not contain a fixed fill or stroke color, but parameters that need to be filled by the caller. QGIS then allows the user to specify such values, and fills them in before rendering, thus allowing to treat a SVG in a similar way to a built-in mark (with just a bit less control over the output compared to a mark). Looking at a SVG source we see:

<polygon fill="param(fill)" fill-opacity="param(fill-opacity)"
  stroke="param(outline)" stroke-opacity="param(outline-opacity)"
  points="290.565,67.281 35.067,509.815 33.98,511.7 545.209,512.093 547.389,512.095 "/>

GeoServer just learned to support these parameters, which are supposed to be added in the SVG URL reference, accoding to the SVG Parameters 1.0 spec “URL parameters” approach:

       <OnlineResource xlink:type="simple" xlink:href="firestation.svg?fill=#FF0000" />

Which will result in something like:


There is more work to be done – the team looked at including some of the custom QGIS “well-known” marks in GeoServer, but this work was not completed for the 2.10.0 release. If you are interested in helping out on this or other activities please contact us as a volunteer or professionally.

We would like to thank Andrea for his cross project leadership on this issue, and to the participants of the FOSS4G code sprint for helping out.

CSS Styling Improvements

The CSS Extension now sports nested rules, allowing for even more compact styles, for example:

[@scale < 3000] {
   mark: symbol(circle);
   :mark {
      fill: gray;
      size: 5
   [type = 'important'] {
      mark: symbol(triangle);
      :mark {
        fill: red;
        stroke: yellow

Rendering transformation support has also been added, for example, it’s possible to extract contour lines from a raster using the following style:

/* @title Levels */
* {
  transform: ras:Contour(levels: 1100 1200 1300 1400 1500 1600 1700);
  z-index: 0;
  stroke: gray;
  label: [numberFormat('#', value)];
  font-size: 12;
  font-fill: black;
  font-weight: bold;
  halo-color: white;
  halo-radius: 2;
  -gt-label-follow-line: true;
  -gt-label-repeat: 200;
  -gt-label-max-angle-delta: 45;
  -gt-label-priority: 2000;

WMTS improvements

The WMTS service has now its own service configuration page, and if the INSPIRE extension is installed, proper INSPIRE extensions. The WMTS service is also now usable on per-workspace services (aka virtual services).


“JPEG or PNG” output format for WMS and WMTS

The relase includes support for the “JPEG or PNG” format, which allows the server to dynamically decide if JPEG or PNG is to be returned, based on pixel transparency. This should solve the classic scattered aerial/satellite overlay imagery dilemma, where the imagery is best compressed JPEG, except at the borders of the images, where transparency is needed.


GetFeatureInfo improvements for coverages

GetFeatureInfo against raster layers now ensures valid XML names are given to attributes, for valid GML outputs, and supports continous map wrapping for geographic projections, as well as working properly for rasters whose coordinate span beyond the 180 degrees East:


We would like to thank Ben Caradoc-Davies for working on this.

New projections support

GeoTools is now providing support for the Azimuthal equidistant projection:


Support for the rotated pole projections was also added:


Rotated pole support for GRIB2/NetCDF and GeoServer integration by Ben Caradoc-Davies (Transient), with the GeoTools rotated pole projection implementation by Maciej Filocha (ICM), based on code provided by Jürgen Seib (Deutscher Wetterdienst).

Image mosaic and image pyramid improvements

Both the image mosaic and image pyramid can now be configured to serve multiple coverages no matter what the data source (previously this was possible only if the sources were NetCDF or Grib files).

At the same time the image mosaic now allows more heterogeneous sources, adding to the previous ability of mixing different color models, a newfound ability to support heterogeneous input projections:


Thanks to Devon Tucker for working on the heterogeneous input projections. For more information please check out the documentation examples.

LDAP User Group Service

The LDAP integration was previously limited to “authentication provider” status, e.g. it allowed GeoServer to validate a username/password combo by trying to connect to a LDAP service. GeoServer 2.10 ships with a LDAP based “user group service” instead, meaning, the list of users can be directly fetched from the LDAP, in alternative to the existing XML and JDBC providers.


Community Modules

The GeoServer community has been very active producing a wide range of exciting capabilities. These modules are not part of a release, and are not officially supported, but most of them can be downloaded as part of our nightly builds or built locally. If you are interested in seeing these reviewed and included in future releases of GeoServer please reach out to and ask how you can help.

YSLD community module

A new styling language, YSLD, has been added. YSLD is a YAML based language which closely matches the stucture of SLD using a text only representation: indentation is used to represent document structure rather than XML tags; filters are represented using ECQL, and all GeoServer vendor options are supported (with a “x-” prefix).

YSLD allows you to cut down your style for the common case where a style has a single rule inside a single feature style – for example:

- polygon:
  stroke-color: 'blue'
  stroke-width: 1
  fill-color: '#7EB5D3'
- text:
  label: ${name}
  fill-color: 'black'
  anchor: [0.5, 0.5]
  x-maxDisplacement: 40
  x-autoWrap: 70

As a “YAML based” format common blocks of code can be defined up front, and reused multiple times.

define: &stroke
 stroke-color: 'gray'
 stroke-width: 0.5
 - filter: ${region = '1'}
   - polygon:
     <<: *stroke
     fill-color: '#8DD3C7'
 - filter: ${region = '2'}
   - polygon:
     <<: *stroke
     fill-color: '#FFFFB3'

One feature offered that is not included in SLD is integration with GeoWebCache zoom levels – this allows rules to be enabled for specific zoom levels (avoiding the need to calculate the correct scale denominators by hand).

- zoom: [min,5]
  filter: ${type = 'small'}
  - ...
- zoom: [5,max]
  filter: ${type = 'small'}
  - ...
- zoom: [min,5]
  else: true
  - ...
- zoom: [5,max]
  else: true
  - ...

One interesting ability of the YSLD module that can be used to help get you started is the ability to take an existing SLD style and translate it 1-1 to YSLD using the REST API:

  • Access as SLD: http://localhost:8080/geoserver/rest/styles/states.sld?pretty=true
  • Access as YSLD: http://localhost:8080/geoserver/rest/styles/states.yaml
name: states
title: Population in the United States
abstract: |-
  A sample filter that filters the United States into three
          categories of population, drawn in different colors
- name: name
  - name: Population < 2M
    title: Population < 2M
    filter: ${PERSONS < '2000000'}
    scale: [min, max]
    - polygon:
        fill-color: '#A6CEE3'
        fill-opacity: 0.7

For more information this release includes an extensive YSLD Reference (complete with diagrams and examples).


WMTS-ND discovery community module

The module adds WMTS operations helping a client to drill into the domain of a dataset with multiple dimensions, helping in particular with scattered datasets, or ones with related dimensions (e.g., forecasts having two related times, execution time and predicted time). The extra operations are:

  • DescribeDomains, providing a compact description of the available dimension values, and allowing to filter on a range of values for a particular dimension (space included), and see how the domain of the related dimensions change
  • GetHistogram, showing how the available data is distributed along a given dimension
  • GetFeature, to get footprint and dimension values of single features/rasters once a particular domain of interest has been established

The full specification is available online.

ncWMS community module

The ncWMS community module adds some extra operations and style support specially geared towards multidimensional raster data (including, but not limited to, NetCDF). The operations are a subset of the WMS extension provided by ncWMS, a NetCDF-CF specific WMS server.
First, a palette oriented styling language is added that only requires to provide a list of color values, which will be applied to the declared data min/max range automatically:


The palette is then going to be applied to the range of values declared in the layer bands configuration, along with a number of vendor parameter in the request to control the actual range of values to be displayed, color for out of range values, linear vs logarithic palette:


The request can also include a “animate” parameter that, coupled with the GIF output format and a dimension range, e.g., a time range, will generate an animation in output:


Finally, a GetTimeSeries request parallels GetFeatureInfo and charts/extract the evolution of the phenomenon at a given point against time (also available as a CSV dump):


More details and information about the module are available in the official documentation.

Backup and restore community module

The backup/restore community module provides a UI and a set of REST service to backup and restore the GeoServer configuration without forcing a full application restart. Each operation is asynchronous, and restores can be subject to dry run, to verify if the restore will complete without errors before actually applying it.


More information about the module can be found in the user documentation.

About GeoServer 2.10

Articles, docs, blog posts and presentations:

Community modules

  • A new community module to backup/restore and restore GeoServer configuration
  • A resource browser is available allowing remote management of styles, icons and fonts (needs building from sources).
  • A new WMTS multidimensional domain discovery community module for discovering patches of data in scattered data sets
  • The YSLD community module has been updated with extensive documentation
Download GeoServer