GeoServer Blog

GeoServer 2025 Roadmap

Happy new year and welcome to 2025 from the GeoServer team!

Last year we started something different for our project - sharing our 2024 roadmap plans with our community and asking for resources (participation and funding) to accomplish some challenging goals. We would like to provide an update for 2025 and a few words on our experience in 2024.

The GeoServer project is supported and maintained thanks to the hard work of volunteers and the backing of public institutions and companies providing professional support.

GeoServer was started in 2001 by a non-profit technology incubator. Subsequent years has seen the project supported by larger companies with investors and venture capital. This support is no longer available - and without this cushion we must rely on our community to play a greater role in the success of the project.

We are seeking a healthy balance in 2025 and are asking for support in the following areas:

  • Maintenance: The GeoServer team uses extensive automation, quality assurance tools, and policy of dropping modules to “right size” the project to match developer resources.

    However maintenance costs for software markedly increased in 2024 as did time devoted to security vulnerabilities. This causes the components used by GeoServer to be updated more frequently, and with greater urgency.

    ✳️ Community members can answer questions on geoserver-user forum, reproduce issues as they are reported, and verify fixes.

    ✳️ Developers are encouraged to get started by reviewing pull-requests to learn what is needed, and then move on to fixing issues.

  • Security Vulnerabilities: GeoServer works with an established a coordinated vulnerability disclosure policy, with clear guidelines for individuals to particpate based on trust, similar to how committers are managed. Our 2024 experience with CVE-2024-36401 highlights the importance of this activity for our community and service providers.

    ✳️ Trusted volunteers can help mind geoserver-security email list, and help reproduce vulnerabilities as they are reported. We also seek developer capacity and funding to address confirmed vulnerabilities.

  • Releases: Regular release and community testing is a key success factor for open source projects and is an important priority for GeoServer. Peter has done a great job updating the release instructions, and many of the tasks are automated, making this activity far easier for new volunteers.

    ✳️ Developers and Service Providers are asked to make time available to to assist with the release process.

    Asking our community to test release candidates ahead of each major release has been discontinued due to lack of response. The GeoServer team operates with a time-boxed release model so it is predictable when testing will be expected.

    ✳️ Community members and Service Providers are asked to help test nightly builds ahead of major releases in March and April.

  • Testing: Testing of new functionality and technology updates is an important quality assurance activity We have had some success asking downstream projects directly to test when facing technical-challenges in 2023.

    ✳️ We anticipate extensive testing will be required for GeoServer 3 and ask everyone to plan some time to test out nightly builds with your own data and infrastructure during the course of this activity.

  • Sponsorship: In 2023 we made a deliberate effort to “get over being shy” and ask for financial support, setting up a sponsorship page, and listing sponsors on our home page.

    The response has not been in keeping with the operational costs of our project and we seek ideas on input on an appropriate approach.

    ✳️ We ask for your financial assistance in 2025 (see bottom of page for recommendations).

The above priorities of maintenance, testing and sponsorship represent the normal operations of an open-source project. This post is provided as a reminder, and a call to action for our community.

2025 Roadmap Planning

CITE Certification

Our CITE Certification was lost some years ago, due to vandalism of a build server, and we would like to see certification restored.

OGC CITE Certification is important for two reasons:

  • Provides a source of black-box testing ensuring that each GeoServer release behaves as intended.
  • Provides a logo and visibility for the project helping to promote the use of open standards.

Recent progress on this activity:

  • As part of a Camptocamp organized OGCAPI - Features sprint Gabriel was able setup a GitHub workflow restoring the use of CITE testing for black-box testing of GeoServer. Gabriel focused on OGC API - Features certification but found WMS 1.1 and WCS 1.1 tests would also pass out of the box, providing a setup for running the tests in each new pull request.
  • Andrea made further progress certifying the output produced by GeoServer, restoring the WMS 1.3, WFS 1.0 and WFS 1.1 tests, as well as upgrading the test engine to the latest production release. In addition, CITE tests that weren’t run in the past have been added, like WFS 2.0 and GeoTIFF, while other new tests are in progress, like WCS 2.0, WMTS 1.0 and GeoPackage.
  • The Open Source Geospatial Foundation provides hosting for OSGeo Projects. Peter is looking into this opportunity which would allow the project to be certified and once again be a reference implementation.

✳️ Please reach out on the developer forum and ask how you can help support this activity.

GeoServer 3

GeoServer 3 is being developed to address crucial challenges and ensure that GeoServer remains a reliable and secure platform for the future.

Staying up-to-date with the latest technology is no longer optional — it’s essential. Starting with spring-framework-6, each update requiring several others to occur at the same time.

GeoServer 3 Updates

Our community is responding to this challenge but needs your support to be successful:

  • Brad and David have made considerable progress on Wicket UI updates over the course of 2024, and with Steve’s effort on Content Security Policy compliance (CSP headers are enabled by default in newer versions of Wicket).

  • Andreas Watermeyer (ITS Digital Solutions) has been steadily working on Spring Security 5.8 update and corresponding OAuth2 Secuirty Module replacements.

  • Consortium of Camptocamp, GeoSolutions and GeoCat have responded to our roadmap challenge with a bold GeoServer 3 Crowdfunding. The crowd funding is presently in phase one collecting pledges, when goal is reached phase two will collect funds and start development.

    Check out the crowdfunding page for details, faq, including overview of project plan.

    GeoServer 3 Milestones

✳️ Pledge support for GeoServer 3 Crowdfunding using email or form.

✳️ Developers please reach out on the developer forum if you have capacity to work on this activity.

✳️ Testers GeoServer 3 will need testing with your data and environment over the course of development.

Service Providers

Service providers bring GeoServer technology to a wider audience. We recognize core-contributors who take on an ongoing responsibility for the GeoServer project on our home page, along with a listing of commercial support on our website. We encourage service providers offering GeoServer support to be added to this list.

Helping meet project roadmap planning goals and objectives is a good way for service providers to gain experience with the project and represent their customers in our community. We recognize service providers that contribute to the sustainability of GeoServer as experienced providers.

✳️ We encourage service providers to directly take project maintenance and testing activities, and financially support the project if they do not have capacity to participate directly.

Sponsorship Opportunities

The GeoServer Project Steering Committee uses your financial support to fund maintenance activities, code sprints, and research and development that is beyond the reach of an individual contributor.

GeoServer recognizes your financial support on our home page, sponsorship page and in release notes and presentations. GeoServer is part of the Open Source Geospatial Foundation and your financial support of the project is reflected on the OSGeo sponsorship page.

Recommendations:

  • Individuals can use Donate via GitHub Sponsors to have their repository badged as supporting OSGeo.
  • Individuals who offer GeoServer services should consider $50 USD a month to be listed as a bronze Sponsor on the OSGeo website.
  • Organisations using GeoServer are encouraged to sponsor $50 USD a month to be listed as a bronze sponsor on the OSGeo website.
  • Organisations that offer GeoServer services should consider $250 a month to be listed as a silver sponsor on the OSGeo website.

✳️ For instructions on sponsorship see how to Sponsor via Open Source Geospatial Foundation.

Further reading:

Read More

Using Logical Operators in GeoServer Filters

GeoSpatial Techno is a startup focused on geospatial information that is providing e-learning courses to enhance the knowledge of geospatial information users, students, and other startups. The main approach of this startup is providing quality, valid specialized training in the field of geospatial information.

( YouTube | LinkedIn | Facebook | X )


Using Logical Operators in GeoServer Filters

In this session, we want to talk about the Using logical operators to combine multiple filters in GeoServer. If you want to access the complete tutorial, click on the link.

Introduction

Logical operators in Web Feature Service (WFS) filtering are essential for combining multiple conditions within GeoServer. These operators enable users to construct complex queries, facilitating data retrieval from the WFS service. The primary logical operators include AND, OR, and NOT.

Note. This video was recorded on GeoServer 2.22.4, which is not the most up-to-date version. Currently, versions 2.25.x and 2.26.x are supported. To ensure you have the latest release, please visit this link and avoid using older versions of GeoServer.

AND

This operator combines multiple conditions into a single filter expression. The resulting expression matches only those features that meet all of the specified criteria.

  • As an example of using this filter in WFS getFeature request, navigate to the Demos page, then select Demo requests.
  • From the Request section, select the WFS_getFeature1.0.xml request.

Use the following block codes to replace line 26:

<ogc:And>
  <PropertyIsLessThan>
    <PropertyName>LAND_KM</PropertyName>
    <Literal>100000</Literal>
  </PropertyIsLessThan>
  <PropertyIsGreaterThan>
    <PropertyName>PERSONS</PropertyName>
    <Literal>5000000</Literal>
  </PropertyIsGreaterThan>
</ogc:And>

Note. In all examples in this blog post, we utilize the topp:states layer.

In this example, we applied a filter to the layer, where the value of the LAND_KM attribute, is less than 100,000 and the PERSONS is greater than 5 million people.

The results include three states: Massachusetts, New Jersey and Indiana.

To use the CQL filtering to apply the equivalent of this example, first, preview the top:states layer in the Layer Preview section. Then, add the filter CQL_FILTER=LAND_KM<100000 And PERSONS>5000000 to the end of the URL.

The complete URL for the layer is as follows:

http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp%3Astates&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG%3A4326&styles=&format=application/openlayers&CQL_FILTER=LAND_KM<100000 And PERSONS>5000000

OR

This operator allows you to combine multiple conditions and retrieve features that satisfy any of the specified conditions. In simpler terms, at least one condition must be true for the filter to be considered a match.

Here’s an example of how to use the “OR” operator to filter a WFS layer based on two conditions.

<ogc:Or>
  <PropertyIsLessThan>
    <PropertyName>LAND_KM</PropertyName>
    <Literal>100000</Literal>
  </PropertyIsLessThan>
  <PropertyIsGreaterThan>
    <PropertyName>PERSONS</PropertyName>
    <Literal>5000000</Literal>
  </PropertyIsGreaterThan>
</ogc:Or>

Press the Submit button.

In this example, we filtered the layer to display features that meet either of these conditions: The value of the LAND_KM attribute is less than 100,000 or the PERSONS attribute represents a population greater than 5 million people. The results include 25 states.

To apply the same example using the CQL filtering and observe the results, use the following code in the URL of the layer as mentioned above:

http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp%3Astates&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG%3A4326&styles=&format=application/openlayers&CQL_FILTER=LAND_KM<100000 Or PERSONS>5000000

NOT

In GeoServer, the NOT operator, also known as the logical negation operator, is used to invert the meaning of a filter expression. It takes one or more filter expressions and returns features that don’t meet the specified conditions.

Here’s an example of using the “NOT” operator for filtering a WFS layer by two conditions:

<ogc:Not>
  <ogc:Or>
    <PropertyIsLessThan>
      <PropertyName>LAND_KM</PropertyName>
      <Literal>100000</Literal>
    </PropertyIsLessThan>
    <PropertyIsGreaterThan>
      <PropertyName>PERSONS</PropertyName>
      <Literal>5000000</Literal>
    </PropertyIsGreaterThan>
  </ogc:Or>
</ogc:Not>

Press the Submit button.

In this example, we filtered the layer to show features that don’t meet any of these conditions. That is, neither the value of the LAND_KM attribute is less than 100,000 nor is the value of the PERSONS parameter more than 5 million people. The results include 24 states.

To see how to use the NOT operator in CQL filtering, use the following code at the end of the URL’s layer:

http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp%3Astates&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG%3A4326&styles=&format=application/openlayers&CQL_FILTER=NOT(LAND_KM<100000 Or PERSONS>5000000)

Combine operators

GeoServer provides the capability of combining logical operators with geometric filters, enhancing the flexibility of WFS filtering. This feature enables users to create more specific and reliable filtering criteria.

Here is an example that effectively uses both spatial and comparison filtering:

<ogc:Filter>
  <ogc:And>
    <ogc:Intersects>
      <ogc:PropertyName>the_geom</ogc:PropertyName>
      <gml:LineString xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
        <gml:coordinates>-73.9,43.5 -81.1,38.6 -78.57,35.5</gml:coordinates>
      </gml:LineString>          
    </ogc:Intersects>
    <PropertyIsGreaterThanOrEqualTo>
      <PropertyName>PERSONS</PropertyName>
      <Literal>10000000</Literal>
    </PropertyIsGreaterThanOrEqualTo>
  </ogc:And>
</ogc:Filter>

In this example, we filtered out states with populations exceeding 10 million, as well as states intersected by a LineString with given coordinates.

Thus, we identified New York and Pennsylvania as the two states that satisfy these conditions.

To see how to use CQL filtering for this example, follow the instance shown on the screen:

CQL_FILTER=INTERSECTS(the_geom,LINESTRING(-73.9 43.5,-81.1 38.6,-78.57 35.5)) AND PERSONS>10000000

As a final example, we examine a comprehensive scenario that incorporates different operators. This example includes a spatial operator, such as the Within filter. Additionally, it showcases two comparison operators, namely PropertyIsLike and PropertyIsGreaterThan.

To better understand these concepts, use the following example:

<ogc:Filter>
  <ogc:And>
    <ogc:Within>
      <ogc:PropertyName>the_geom</ogc:PropertyName>
      <gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
        <gml:outerBoundaryIs>
          <gml:LinearRing>
            <gml:coordinates>-100,30 -100,45 -80,45 -80,30 -100,30</gml:coordinates>
          </gml:LinearRing>
        </gml:outerBoundaryIs>
      </gml:Polygon>         
    </ogc:Within>
    <ogc:Or>
      <ogc:Filter>
        <ogc:PropertyIsLike wildCard="%" singleChar="_" escape="!">
          <ogc:PropertyName>STATE_NAME</ogc:PropertyName>
          <ogc:Literal>%na%</ogc:Literal>
        </ogc:PropertyIsLike>
      </ogc:Filter>
      <PropertyIsGreaterThan>
        <PropertyName>STATE_FIPS</PropertyName>
        <Literal>30</Literal>
      </PropertyIsGreaterThan>
    </ogc:Or>
  </ogc:And>
</ogc:Filter>

In this example, we use WFS filtering to extract the States that are completely enclosed within specific coordinates. Moreover, we retrieve States whose STATENAME includes the letters “na” or whose STATEFIPS value is greater than 30.

Therefore, we have identified three states that meet the specified criteria: Tennessee, Indiana, and Ohio.

To use the CQL filtering for this example, use the following code:

CQL_FILTER=Within(the_geom,Polygon((-100 30,-100 45,-80 45,-80 30,-100 30))) AND (STATE_NAME LIKE '%na%' OR STATE_FIPS > 30)

In this session, we took a brief journey through the Combining multiple operators for WFS filtering in GeoServer. If you want to access the complete tutorial, click on the link.

Read More

GeoServer 2.25.5 Release

GeoServer 2.25.5 release is now available with downloads (bin, war, windows), along with docs and extensions.

This is a maintenance release of GeoServer providing existing installations with minor updates and bug fixes. GeoServer 2.25.5 is made in conjunction with GeoTools 31.5, and GeoWebCache 1.25.3. The final release of the 2.25 series is planned for February 2025, please start making plans for an upgrade to 2.26.x or newer.

Thanks to Andrea Aime (GeoSolutions) for making this release.

Release notes

Improvement:

  • GEOS-11612 Add system property support for Proxy base URL -> use headers activation
  • GEOS-11616 GSIP 229 - File system access isolation
  • GEOS-11644 Introducing the rest/security/acl/catalog/reload rest endpoint

Bug:

  • GEOS-11494 WFS GetFeature request with a propertyname parameter fails when layer attributes are customized (removed or reordered)
  • GEOS-11606 geofence-server imports obsolete asm dep
  • GEOS-11611 When Extracting the WFS Service Name from the HTTP Request A Slash Before the Question Marks Causes Issues
  • GEOS-11643 WCS input read limits can be fooled by geotiff reader

Task:

  • GEOS-11609 Bump XStream from 1.4.20 to 1.4.21
  • GEOS-11610 Update Jetty from 9.4.55.v20240627 to 9.4.56.v20240826
  • GEOS-11631 Update MySQL driver to 9.1.0

For the complete list see 2.25.5 release notes.

Community Updates

Community module development:

  • GEOS-11635 Add support for opaque auth tokens in OpenID connect
  • GEOS-11637 DGGS min/max resolution settings stop working after restart

Community modules are shared as source code to encourage collaboration. If a topic being explored is of interest to you, please contact the module developer to offer assistance.

About GeoServer 2.25 Series

Additional information on GeoServer 2.25 series:

Release notes: ( 2.25.5 | 2.25.4 | 2.25.3 | 2.25.2 | 2.25.1 | 2.25.0 | 2.25-RC )

Read More

GeoServer 2.26.1 Release

GeoServer 2.26.1 release is now available with downloads (bin, war, windows), along with docs and extensions.

This is a stable release of GeoServer recommended for production use. GeoServer 2.26.1 is made in conjunction with GeoTools 32.1, and GeoWebCache 1.26.1.

Thanks to Peter Smythe (AfriGIS) for making this release.

Security Considerations

This release addresses security vulnerabilities and is considered an important upgrade for production systems.

  • GEOS-11557 CVE-2024-45748 High. The details will be released later.

See project security policy for more information on how security vulnerabilities are managed.

Release notes

Improvement:

Bug:

  • GEOS-11524 csw: default queryables mapping not generated
  • GEOS-11543 Unable to use propertyName to filter properties in a GetFeature request when service is not set
  • GEOS-11553 SLD Style: Empty SE Rotationelement throws RuntimeException (QGIS generated SLD)
  • GEOS-11556 NullPointerException when GWC disk quota monitoring is disabled
  • GEOS-11559 The customized attributes editor is prone to setting the wrong attribute source
  • GEOS-11573 TileLayer preview doesn’t work anymore

Task:

For the complete list see 2.26.1 release notes.

Community Updates

Community module development:

  • GEOS-11107 Open search for EO community module: packaging missing gt-cql-json-xx.x.jar
  • GEOS-11517 Using various OGC APIs results in service enabled check related WARN logs
  • GEOS-11560 OGC API modules lack cql2-json in assembly
  • GEOS-11563 Allow configuring a DGGS resolution offset on a layer basis
  • GEOS-11565 Allow configuring the minimum and maximum DGGS resolution for a layer
  • GEOS-11579 DGGS modules prevent GeoServer startup if JEP is not installed

Community modules are shared as source code to encourage collaboration. If a topic being explored is of interest to you, please contact the module developer to make contact and offer assistance, even if it is just to say that it works for you.

About GeoServer 2.26 Series

Additional information on GeoServer 2.26 series:

Release notes: ( 2.26.1 | 2.26.0 | 2.26-M0 )

Read More

Exploring CQL/ECQL Filtering in GeoServer

GeoSpatial Techno is a startup focused on geospatial information that is providing e-learning courses to enhance the knowledge of geospatial information users, students, and other startups. The main approach of this startup is providing quality, valid specialized training in the field of geospatial information.

( YouTube | LinkedIn | Facebook | X )


Exploring CQL and ECQL Filtering in GeoServer

In this session, we want to talk about the Using CQL/ECQL Filters in GeoServer in detail. If you want to access the complete tutorial, click on the link.

Introduction

Contextual Query Language (CQL) is a text-based query for search/retrieval adopted by the OGC for the Catalogue Web Services specification. Unlike the XML-based Filter Encoding language, CQL is more readable and easier for manual authoring. However, it has limitations, such as not being able to encode ID filters and requiring the attribute to be on the left side of comparison operators.

To overcome these limitations, GeoServer offers an extended version called ECQL, which closely resembles SQL and provides greater flexibility. ECQL allows users to define filters for querying data in GeoServer using attribute comparisons, logical operators, and spatial predicates. It is compatible with GeoServer’s REST API and can be used for WMS and WFS requests to retrieve filtered data.

Note. This video was recorded on GeoServer 2.22.4, which is not the most up-to-date version. Currently, versions 2.25.x and 2.26.x are supported. To ensure you have the latest release, please visit this link and avoid using older versions of GeoServer.

Note. Future version of GeoServer will include support for CQL2 which provides both a text and a JSON representation.

Comparison operators

To compare attribute values or other numeric and text values in your CQL / ECQL (Extended Common Query Language) expressions, you can utilize comparison operators.

In the Layer Preview section, first click on the OpenLayers option for the topp:states layer. Next, locate and click on the Toggle options toolbar in the top left corner to access the advanced options.

In the CQL filter box within this toolbar, enter the filter expression STATE_NAME = 'Texas', and then press the Apply button. This filter will retrieve and display the data for the state of Texas.

By reviewing the following examples using the Toggle options toolbar from the LayerPreview page, you will learn how to effectively understand and apply comparison operators using CQL/ECQL expressions:

  • ‘PropertyIsGreaterThanOrEqualTo’ filter

This filter shows the states that have more than or equal to 5 million inhabitants.

PERSONS >= 5000000
  • ‘PropertyIsLike’ filter

This filter shows the states whose names, contain the letters ‘ing’ like Washington and Wyoming.

STATE_NAME like '%ing%'
  • ‘PropertyIsBetween’ filter

This filter shows the states with a population of 5 million to 10 million.

PERSONS between 5000000 and 10000000

Spatial operators

These operators enable you to perform spatial queries and filter data, based on various relationships between geometries. Here are the explanations for some commonly used spatial operators:

  • ‘Intersect’ filter

This filter allows you to query spatial data in GeoServer based on geometric intersection relationships. This filter returns all features that have any spatial intersection or overlap.

The syntax for the Intersect filter in CQL is as follows:

Intersects(the_geom,Point(-90 40))
  • ‘Within’ filter

The Within filter checks if a spatial object is completely within another spatial object. This filter retrieves all features that are located within the boundaries of a specified geometric shape, using spatial relationships.

Within(the_geom,Polygon((-100 30,-100 45,-80 45,-80 30,-100 30)))
  • ‘Contains’ filter

This filter is the inverse of the “Within” filter. It checks if a spatial object completely contains another spatial object and helps you retrieve features that fully enclose the specified geometry.

CONTAINS(the_geom,LINESTRING(-73.9 43.5,-77.76 42.56))

Bounding Box operators

The Bounding Box operator is used to filter data based on a specified bounding box. The “bbox” filter in CQL allows you to query spatial data in GeoServer based on a bounding box or a rectangular area.

CQL filters can also be utilized with the GET method. To use the bbox filter using the GET method, enter the following code in the URL address bar of your browser:

http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:states&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=768&height=330&srs=EPSG:4326&format=application/openlayers&CQL_FILTER=BBOX(the_geom,-110,41,-95,45)

This filter enables you to retrieve all features that intersect, or are contained within the specified bounding box.


In this session, we took a brief journey through the “CQL filtering in GeoServer”. If you want to access the complete tutorial, click on the link.

Read More