🌍 Open Source Geospatial Platform

Build, Deploy & Share Geospatial Infrastructure at Scale

GeoServer is the industry-standard open source server for sharing geospatial data. It implements OGC standards including WMS, WFS, WCS, WMTS, and provides a powerful REST API for programmatic management.

22,400+
GitHub Stars
3,200+
Contributors
15+
Years Active
OGC
Compliant

Overview

Welcome to GeoServer. This documentation covers everything from initial installation to advanced clustering configurations.

What is GeoServer?

GeoServer is a Java-based open source server that allows users to share and edit geospatial data. Designed for interoperability, it publishes data from any major spatial data source using open standards.

As an OGC-compliant server, GeoServer supports:

  • WMS β€” Web Map Service for rendering map images
  • WFS β€” Web Feature Service for feature-level data access
  • WCS β€” Web Coverage Service for raw coverage data
  • WMTS β€” Web Map Tile Service for tiled map delivery
  • CSW β€” Catalog Service for the Web
  • REST API β€” Full configuration management via HTTP
ℹ️
Note GeoServer 3.2 introduces a new modular plugin architecture, improved WMTS performance, and native support for PostGIS 17+.

Architecture

GeoServer follows a layered architecture with core components interacting through well-defined interfaces.

Clients
πŸ–₯️ QGIS / ArcGIS
🌐 Leaflet / OpenLayers
πŸ“± Mobile Apps
πŸ”§ Custom Apps
GeoServer Core
🌐 WMS Engine
πŸ“‘ WFS Engine
πŸ–ΌοΈ WCS Engine
πŸ—‚οΈ REST Controller
🎨 SLD Styling
Data Stores
πŸ—„οΈ PostGIS
πŸ“ GeoPackage
πŸ–ΌοΈ GeoTIFF
πŸ“Š Shapefile
☁️ Cloud Storage

Quick Start

Get up and running with GeoServer in four steps:

01

Install Java

JDK 17+ required

02

Download

Get the latest WAR or binary

03

Deploy

Run with java -jar

04

Publish

Configure via web UI

Installation

terminal
# 1. Install Java 17 $ sudo apt install openjdk-17-jdk # 2. Download GeoServer $ wget https://downloads.sourceforge.net/project/geoserver/GeoServer/3.2.0/geoserver-3.2.0-war.zip $ unzip geoserver-3.2.0-war.zip # 3. Start GeoServer $ java -Djetty.port=8080 -jar geoserver.war # Visit http://localhost:8080/geoserver
terminal
# Using Homebrew $ brew install openjdk@17 # Download and start $ curl -L https://downloads.sourceforge.net/project/geoserver/GeoServer/3.2.0/geoserver-3.2.0-war.zip \ -o geoserver.zip $ java -Djetty.port=8080 -jar geoserver.war

Download the Windows .exe installer from the downloads page. The installer includes a bundled JRE and will set up a Windows service automatically.

  1. Download the Windows installer (.exe) from the downloads page
  2. Run the installer and follow the wizard
  3. GeoServer will start automatically as a Windows service
  4. Open http://localhost:8080/geoserver in your browser
docker
# Pull the latest image $ docker pull geoserver/geoserver:latest # Run with data directory persistence $ docker run -d -p 8080:8080 \ -v $(pwd)/gs-data-dir:/var/geoserver/data_dir \ --name geoserver \ geoserver/geoserver:latest # Open http://localhost:8080/geoserver $ open http://localhost:8080/geoserver
⚠️
Default Credentials The default username is admin and password is geoserver. Change these immediately in Production deployments.

Configuration

GeoServer is configured through a combination of the web Admin Console, the REST API, and configuration files on the filesystem.

Key Configuration Paths

File / Path Purpose Status
web.xml Jetty / Servlet container configuration Required
userstores.xml Store definitions for data sources Required
global.xml Global GeoServer settings (metadata, timeouts) Required
security/ Auth, filters, and permission rules Active
styles/ SLD style files (.sld, .xml) Active
coveragestore/ Raster data store configurations Active

REST API Reference

GeoServer's REST API provides full CRUD access to all configuration objects. The base URL is http://host:8080/geoserver/rest.

GET /workspaces

List all workspaces

# Response: JSON array of workspaces "workspaces": { "workspace": [ { "name": "topp", "href": "http://localhost:8080/geoserver/rest/workspaces/topp" }, { "name": "gisops", "href": "http://localhost:8080/geoserver/rest/workspaces/gisops" } ] }
POST /workspaces

Create a workspace

curl -u admin:geoserver \ -X POST -H "Content-Type: text/xml" \ -d "<workspace><name>myworkspace</name></workspace>" \ http://localhost:8080/geoserver/rest/workspaces # HTTP 201 Created β†’ Workspace created
GET /workspaces/{ws}/datastores

List data stores in a workspace

# List all data stores curl -u admin:geoserver \ http://localhost:8080/geoserver/rest/workspaces/topp/datastores.json # Response "dataStores": { "dataStore": [ { "name": "ne", "href": ".../datastores/ne" }, { "name": "tiger", "href": ".../datastores/tiger" } ] }

Supported Data Formats

GeoServer supports a wide range of data sources out of the box. Below is a summary of the most commonly used stores:

Format Type Store Plugin Status
PostGIS Vector / Raster postgis Supported
GeoPackage Vector / Raster gpkg Supported
GeoTIFF Raster gtiff Supported
Shapefile Vector shp Supported
PostgreSQL Raster Raster postgresqlraster Supported
WFS (Remote) Vector wfs Supported
Oracle Spatial Vector / Raster oracle Beta
MongoDB Vector mongodb Beta
βœ…
New in 3.2 Native support for cloud-optimized GeoTIFF (COG) and cloud-native GDAL backends for S3/GCS storage.

Publishing a Layer

Once your workspace and data store are configured, you can publish layers through the web UI or the REST API.

  1. Navigate to Layers → Add a new layered in the Admin Console
  2. Select the data store you configured (e.g., ne or gis_osm_roads_free_1)
  3. Configure the layer name, title, and abstract
  4. Set the SRS/CRS (e.g., EPSG:4326, EPSG:3857)
  5. Click Save β€” GeoServer will compute bounding boxes automatically
  6. Configure styling (default SLA or custom SLD)
  7. Publish and test with the Layer Preview
REST API β€” publish a layer
# Publish layer via REST curl -u admin:geoserver \ -X POST -H "Content-Type: text/xml" \ -d "<layer> <name>gs:roads</name> <title>Global Roads</title> <nativeCRS>EPSG:4326</nativeCRS> </layer>" \ http://localhost:8080/geoserver/rest/workspaces/topp/datastores/ne/featuretypes

Plugins & Extensions

GeoServer's plugin architecture extends functionality beyond the core. Key plugins include:

πŸ“Š

Charting

Render dynamic charts (bar, pie, line) from vector data on-the-fly with WMS GetMap requests.

View Plugin β†’
πŸ”

Security

Advanced authentication with LDAP, OAuth2, JWT, and fine-grained resource-level permissions.

View Plugin β†’
πŸ–ΌοΈ

Vector Tiles

Generate MBTiles and vector tile sets for high-performance client-side rendering.

View Plugin β†’
πŸ”„

Publishing (WPS)

Web Processing Service for server-side geoprocessing: buffering, clipping, overlays, and more.

View Plugin β†’
πŸ“ˆ

Caching

Multiple cache backends: Disk, Redis, Memcached, and cloud-native tile caching with GeoWebCache.

View Plugin β†’
🌐

WPS (Web Processing)

Run spatial processing workflows server-side with customizable Groovy/JS scripts.

View Plugin β†’

Deployment Patterns

GeoServer supports multiple deployment architectures depending on your scale and reliability requirements.

πŸ–₯️

Standalone

Run GeoServer as a standalone JVM process. Ideal for development, testing, and small deployments.

Setup Guide β†’
☁️

Docker / Kubernetes

Containerized deployment with horizontal scaling. Use GeoServer's clustering mode for high availability.

K8s Guide β†’
πŸ”—

Clustered

Multiple GeoServer nodes sharing a centralized data store with replicated configuration. Supports load balancing.

Clustering Docs β†’

Getting Help

GeoServer has a vibrant open-source community. Here's how to get support:

  • Geoserver Users Mailing List β€” Primary forum for questions and discussions
  • Stack Overflow β€” Tag questions with geoserver
  • GitHub Issues β€” Report bugs and request features
  • Discord Community β€” Real-time chat with maintainers
  • Commercial Support β€” Enterprise support plans available from the core team
πŸ“Œ
Contribute GeoServer is open source under the GPL v2 license. Contributions welcome via GitHub Pull Requests. Check our Contributing Guide to get started.