# geoserver/geoserver-cloud architecture

> Architecture diagram of the GitHub repository geoserver/geoserver-cloud, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-22). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/geoserver/geoserver-cloud
- Repository: https://github.com/geoserver/geoserver-cloud

## Overview

1. **What this repository is**
   This is a multi-module Maven monorepo for **GeoServer Cloud**, a cloud-native decomposition of GeoServer into independently deployable Spring Boot services. The code is organized around reusable platform libraries, service applications, catalog/storage backends, GeoWebCache, and a large set of optional extensions.

2. **Top-level runtime shape**
   At runtime there are three main kinds of processes:
   - **Edge/infrastructure services**: gateway, config service, and supporting runtime pieces.
   - **GeoServer functional services**: separate apps for WMS, WFS, WCS, WPS, REST config, Web UI, and GeoWebCache.
   - **Shared backend services**: catalog persistence, event propagation, and optional external stores like PostgreSQL and blob stores.

3. **Bootstrap and shared platform modules**
   `src/starter/*` and `src/main/*` provide the common bootstrapping layer:
   - Spring Boot/Spring Cloud auto-configuration
   - servlet and reactive web startup support
   - GeoServer main security and update-sequence wiring
   - observability helpers like MDC propagation and access logging
   These modules are not standalone apps; they are the base building blocks imported by the service modules.

4. **Gateway boundary**
   `src/apps/infrastructure/gateway-webmvc` and `gateway-webflux` are the ingress layer. They terminate client requests, apply routing rules, security headers, shared-auth propagation, and request rewriting before forwarding traffic to downstream services. The gateway has custom route predicates/filters for base-path stripping, profile-based routing, and shared authentication.

5. **Central configuration service**
   `src/apps/infrastructure/config` is a dedicated config server-like application. It centralizes environment/service configuration and is paired with `src/config/spring-factory` and `src/config/spring-boot-simplejndi`, which adapt legacy-style XML/JNDI configuration into Spring Boot-friendly startup behavior.

6. **GeoServer service applications**
   `src/apps/geoserver/*` contains the deployable business services:
   - `wms`, `wfs`, `wcs`, `wps`: protocol-specific OWS services
   - `restconfig`: REST administration/configuration service
   - `webui`: browser-based admin UI
   - `gwc`: GeoWebCache-facing application
   These apps are intentionally thin; most behavior is pulled in through shared catalog, configuration, security, and extension modules.

7. **Catalog subsystem**
   `src/catalog/*` is the core state-management area. It splits into:
   - `plugin`: GeoServer-side catalog abstraction, repository facade, validation, locking, and resolving/proxy support
   - `cache`: in-memory caching decorators around catalog and GeoServer facades
   - `events`: lifecycle/config/catalog event model plus local and remote event integration
   - `backends/datadir`: shared filesystem data-directory backend
   - `backends/pgconfig`: PostgreSQL-backed catalog/config backend
   - `jackson-bindings/*`: serialization/deserialization of GeoServer catalog/config/filter objects
   The main flow is: service code interacts with catalog facades; facades may be cached; changes are persisted either to the data directory or PostgreSQL backend; events are emitted to keep other services consistent.

8. **Catalog backend distinction**
   The repository supports two primary catalog persistence modes:
   - **Data directory backend**: filesystem-based, with lock providers and eventual-consistency helpers.
   - **PGConfig backend**: PostgreSQL-backed catalog/config store with repositories, migrations, SQL query builders, and resource-store synchronization.
   This backend choice is a major architectural boundary because it changes persistence, locking, and sync behavior without changing service APIs.

9. **GeoWebCache subsystem**
   `src/gwc/*` mirrors the catalog structure for tile caching:
   - `core`: GWC core repository/configuration and tile-layer catalog abstractions
   - `backends/pgconfig`: PostgreSQL-backed tile layer catalog
   - `blobstores`: S3, Azure, and Google Cloud Storage blob-store integrations
   - `autoconfigure`: conditional wiring of core services, REST/WMS/WMTS integrations, disk quota, and blob stores
   - `integration-bus`: remote event propagation for cache and tile-layer changes
   The data flow here is from GeoServer/GWC configuration into tile-layer metadata, quota state, and optional remote object storage.

10. **Eventing and distributed coordination**
   Two event layers are important:
   - **Catalog events** in `src/catalog/events` for local/remote config and lifecycle changes.
   - **GeoWebCache events** in `src/gwc/integration-bus` for tile-layer, gridset, blob-store, and config-change propagation.
   These modules form the consistency mechanism across independently scaled services, and they are the bridge to the project’s distributed-event infrastructure.

11. **Extensions are capability slices, not one monolith**
   `src/extensions/*` contains optional feature modules that plug into the base services via auto-configuration. They are grouped by capability:
   - security: LDAP, JDBC, auth-key, gateway shared-auth, ACL, environment admin
   - input/output formats: COG, PMTiles, GeoParquet, FlatGeobuf, DXF, vector tiles
   - styling and misc: CSS styling, Mapbox styling, control-flow, importer, OGC API, etc.
   Each extension is conditionally activated, so the architecture is modular and feature flags/auto-configuration determine what each service actually loads.

12. **Security model**
   Security is layered:
   - gateway-level shared authentication and pre-auth filters
   - service-level authentication providers and ACL integration
   - optional identity backends such as JDBC, LDAP, and auth-key
   The repo also contains service-specific security helpers for Web UI and REST config, indicating that security concerns are split between the edge and the service boundaries.

13. **Operational/deployment boundary**
   The `compose/` and `docker-build/` trees define the runnable system topology for development and CI: gateway, service apps, config, PostgreSQL, pgbouncer, monitoring, and secrets. The `docs/` tree includes Helm/Kubernetes deployment material and generated architecture diagrams, which strongly suggests the repo is designed to be diagrammed as a set of deployable containers with shared infrastructure, not as a single app.

14. **How to draw the architecture**
   A useful diagram would show:
   - clients entering through the **gateway**
   - requests routed to **WMS/WFS/WCS/WPS/REST/UI/GWC services**
   - those services depending on shared **starter/platform modules**
   - state flowing to either **Data Directory** or **PGConfig/PostgreSQL**
   - change events flowing through the **event bus / remote-event modules**
   - GeoWebCache additionally connecting to **blob stores** and **quota/storage backends**
   - optional **extensions** hanging off the service layer as conditional capabilities

Main entry points: [`src/apps/infrastructure/gateway-webmvc`](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/infrastructure/gateway-webmvc) (Gateway MVC), [`src/catalog/plugin`](https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/plugin) (Catalog Plugin), [`src/extensions`](https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions) (Extensions), [`src/gwc/autoconfigure`](https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/autoconfigure) (GWC AutoConfig)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_infra["Infrastructure"]
  node_gateway_webmvc["Gateway MVC<br/>edge gateway"]
  node_gateway_webflux["Gateway Flux<br/>edge gateway"]
  node_config_service["Config Service<br/>config server"]
end

subgraph group_services["GeoServer services"]
  node_geoserver_wms["WMS<br/>protocol app"]
  node_geoserver_wfs["WFS<br/>protocol app"]
  node_geoserver_wcs["WCS<br/>protocol app"]
  node_geoserver_wps["WPS<br/>protocol app"]
  node_restconfig_app["REST Config<br/>admin app"]
  node_webui_app["Web UI<br/>admin UI"]
end

subgraph group_catalog["Catalog state"]
  node_catalog_plugin["Catalog Plugin<br/>catalog facade"]
  node_catalog_cache["Catalog Cache<br/>cache decorators"]
  node_catalog_events["Catalog Events<br/>event model"]
  node_datadir_backend["Data Directory<br/>filesystem backend"]
  node_pgconfig_backend["PGConfig<br/>postgres backend"]
end

subgraph group_gwc["GeoWebCache"]
  node_gwc_app["GeoWebCache App"]
  node_gwc_core["GWC Core<br/>tile catalog core"]
  node_gwc_auto["GWC AutoConfig"]
  node_gwc_pgconfig["GWC PGConfig<br/>tile backend"]
  node_gwc_blobstores["Blob Stores<br/>object storage adapters"]
  node_gwc_bus["GWC Bus<br/>remote events"]
end

subgraph group_platform["Shared platform"]
  node_starter_boot["Spring Boot<br/>bootstrap starter"]
  node_starter_webmvc["Web MVC<br/>servlet starter"]
  node_starter_obs["Observability<br/>logging starter"]
  node_main_runtime["Main Runtime<br/>core runtime autoconfig"]
end

subgraph group_extensions["Extensions"]
  node_extensions_root["Extensions<br/>capability slices"]
  node_ext_security["Security Slices<br/>extension family"]
  node_ext_formats["Format Slices<br/>extension family"]
  node_ext_styles["Style Slices<br/>extension family"]
  node_ext_ogcapi["OGC API<br/>extension family"]
  node_ext_controlflow["Control Flow<br/>extension slice"]
end

subgraph group_deploy["Deploy"]
  node_deploy_artifacts["Deploy Assets<br/>deployment topology"]
end

node_external_clients(("Clients<br/>external actors"))
node_postgresql[("PostgreSQL<br/>external datastore")]
node_object_storage[("Object Storage<br/>external storage")]

node_external_clients -->|"requests"| node_gateway_webmvc
node_external_clients -->|"requests"| node_gateway_webflux
node_gateway_webmvc -->|"routes to"| node_geoserver_wms
node_gateway_webmvc -->|"routes to"| node_geoserver_wfs
node_gateway_webmvc -->|"routes to"| node_geoserver_wcs
node_gateway_webmvc -->|"routes to"| node_geoserver_wps
node_gateway_webmvc -->|"routes to"| node_restconfig_app
node_gateway_webmvc -->|"routes to"| node_webui_app
node_gateway_webflux -->|"routes to"| node_gwc_app
node_config_service -->|"configured by"| node_deploy_artifacts
node_starter_boot -->|"boots"| node_gateway_webmvc
node_starter_boot -->|"boots"| node_gateway_webflux
node_starter_webmvc -->|"initializes"| node_geoserver_wms
node_starter_webmvc -->|"initializes"| node_restconfig_app
node_starter_obs -->|"observes"| node_gateway_webmvc
node_starter_obs -->|"observes"| node_geoserver_wms
node_main_runtime -->|"provides runtime"| node_geoserver_wms
node_main_runtime -->|"provides runtime"| node_webui_app
node_geoserver_wms -->|"reads via"| node_catalog_cache
node_geoserver_wfs -->|"reads via"| node_catalog_cache
node_geoserver_wcs -->|"reads via"| node_catalog_cache
node_geoserver_wps -->|"reads via"| node_catalog_cache
node_restconfig_app -->|"writes via"| node_catalog_plugin
node_webui_app -->|"administers"| node_catalog_plugin
node_catalog_cache -->|"wraps"| node_catalog_plugin
node_catalog_plugin -->|"persists to"| node_datadir_backend
node_catalog_plugin -->|"persists to"| node_pgconfig_backend
node_catalog_plugin -->|"emits"| node_catalog_events
node_catalog_events -->|"bridges to"| node_gwc_bus
node_datadir_backend -.->|"publishes"| node_catalog_events
node_pgconfig_backend -->|"stores in"| node_postgresql
node_pgconfig_backend -.->|"publishes"| node_catalog_events
node_gwc_app -->|"configures"| node_gwc_auto
node_gwc_auto -->|"wires"| node_gwc_core
node_gwc_auto -->|"wires"| node_gwc_pgconfig
node_gwc_auto -->|"wires"| node_gwc_blobstores
node_gwc_auto -->|"wires"| node_gwc_bus
node_gwc_pgconfig -->|"stores in"| node_postgresql
node_gwc_blobstores -->|"stores in"| node_object_storage
node_gwc_bus -->|"syncs with"| node_catalog_events
node_extensions_root -->|"includes"| node_ext_security
node_extensions_root -->|"includes"| node_ext_formats
node_extensions_root -->|"includes"| node_ext_styles
node_extensions_root -->|"includes"| node_ext_ogcapi
node_extensions_root -->|"includes"| node_ext_controlflow
node_ext_security -.->|"enhances"| node_gateway_webmvc
node_ext_security -.->|"enhances"| node_webui_app
node_ext_security -.->|"enhances"| node_restconfig_app

click node_gateway_webmvc "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/infrastructure/gateway-webmvc"
click node_gateway_webflux "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/infrastructure/gateway-webflux"
click node_config_service "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/infrastructure/config"
click node_starter_boot "https://github.com/geoserver/geoserver-cloud/tree/main/src/starters/spring-boot"
click node_starter_webmvc "https://github.com/geoserver/geoserver-cloud/tree/main/src/starters/webmvc"
click node_starter_obs "https://github.com/geoserver/geoserver-cloud/tree/main/src/starters/observability"
click node_main_runtime "https://github.com/geoserver/geoserver-cloud/tree/main/src/main/src/main/java/org/geoserver/cloud/autoconfigure/main"
click node_catalog_plugin "https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/plugin"
click node_catalog_cache "https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/cache"
click node_catalog_events "https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/events"
click node_datadir_backend "https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/backends/datadir"
click node_pgconfig_backend "https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/backends/pgconfig"
click node_geoserver_wms "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wms"
click node_geoserver_wfs "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wfs"
click node_geoserver_wcs "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wcs"
click node_geoserver_wps "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wps"
click node_restconfig_app "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/restconfig"
click node_webui_app "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/webui"
click node_gwc_app "https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/gwc"
click node_gwc_core "https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/core"
click node_gwc_auto "https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/autoconfigure"
click node_gwc_pgconfig "https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/backends/pgconfig"
click node_gwc_blobstores "https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/blobstores"
click node_gwc_bus "https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/integration-bus"
click node_extensions_root "https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions"
click node_ext_security "https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/security"
click node_ext_formats "https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/input-formats"
click node_ext_styles "https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/css-styling"
click node_ext_ogcapi "https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/ogcapi/features"
click node_ext_controlflow "https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/control-flow"
click node_deploy_artifacts "https://github.com/geoserver/geoserver-cloud/tree/main/compose"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_gateway_webmvc,node_gateway_webflux,node_config_service,node_deploy_artifacts toneBlue
class node_geoserver_wms,node_geoserver_wfs,node_geoserver_wcs,node_geoserver_wps,node_restconfig_app,node_webui_app toneAmber
class node_catalog_plugin,node_catalog_cache,node_catalog_events,node_datadir_backend,node_pgconfig_backend toneMint
class node_gwc_app,node_gwc_core,node_gwc_auto,node_gwc_pgconfig,node_gwc_blobstores,node_gwc_bus toneRose
class node_starter_boot,node_starter_webmvc,node_starter_obs,node_main_runtime toneIndigo
class node_extensions_root,node_ext_security,node_ext_formats,node_ext_styles,node_ext_ogcapi,node_ext_controlflow toneTeal
class node_external_clients,node_postgresql,node_object_storage toneNeutral
```

## Components

### Infrastructure

Ingress, config, and runtime scaffolding services.

- [Gateway MVC](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/infrastructure/gateway-webmvc): edge gateway · Servlet-based ingress with routing, filtering, headers, and shared auth. · `src/apps/infrastructure/gateway-webmvc`
- [Gateway Flux](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/infrastructure/gateway-webflux): edge gateway · Reactive ingress variant with routing and shared authentication support. · `src/apps/infrastructure/gateway-webflux`
- [Config Service](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/infrastructure/config): config server · Centralized service/environment configuration application. · `src/apps/infrastructure/config`

### GeoServer services

Deployable protocol and admin applications.

- [WMS](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wms): protocol app · Deployable WMS service application. · `src/apps/geoserver/wms`
- [WFS](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wfs): protocol app · Deployable WFS service application. · `src/apps/geoserver/wfs`
- [WCS](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wcs): protocol app · Deployable WCS service application. · `src/apps/geoserver/wcs`
- [WPS](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/wps): protocol app · Deployable WPS service application. · `src/apps/geoserver/wps`
- [REST Config](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/restconfig): admin app · REST administration and configuration service. · `src/apps/geoserver/restconfig`
- [Web UI](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/webui): admin UI · Browser-based admin console and service registry UI. · `src/apps/geoserver/webui`

### Catalog state

Catalog, persistence, cache, and eventing layers.

- [Catalog Plugin](https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/plugin): catalog facade · Core catalog abstractions, validation, resolving, locking, and repository facade. · `src/catalog/plugin`
- [Catalog Cache](https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/cache): cache decorators · In-memory catalog and GeoServer facade caching layer. · `src/catalog/cache`
- [Catalog Events](https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/events): event model · Lifecycle, config, and remote catalog event bridge. · `src/catalog/events`
- [Data Directory](https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/backends/datadir): filesystem backend · Filesystem-backed catalog persistence, locking, and eventual-consistency support. · `src/catalog/backends/datadir`
- [PGConfig](https://github.com/geoserver/geoserver-cloud/tree/main/src/catalog/backends/pgconfig): postgres backend · PostgreSQL-backed catalog and config store with repositories and migrations. · `src/catalog/backends/pgconfig`

### GeoWebCache

Tile cache core, backends, storage, and event propagation.

- [GeoWebCache App](https://github.com/geoserver/geoserver-cloud/tree/main/src/apps/geoserver/gwc): cache app · GeoWebCache-facing application shell. · `src/apps/geoserver/gwc`
- [GWC Core](https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/core): tile catalog core · Tile-layer catalog, request path handling, and core repository wiring. · `src/gwc/core`
- [GWC AutoConfig](https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/autoconfigure): gwc autoconfig · Conditional wiring for services, integrations, quota, and blob stores. · `src/gwc/autoconfigure`
- [GWC PGConfig](https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/backends/pgconfig): tile backend · PostgreSQL-backed tile-layer catalog and quota state. · `src/gwc/backends/pgconfig`
- [Blob Stores](https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/blobstores): object storage adapters · S3, Azure, and Google Cloud Storage integrations for cached tiles. · `src/gwc/blobstores`
- [GWC Bus](https://github.com/geoserver/geoserver-cloud/tree/main/src/gwc/integration-bus): remote events · Distributed change propagation for tile layers, gridsets, and blob stores. · `src/gwc/integration-bus`

### Shared platform

Common bootstrapping, web, and observability modules.

- [Spring Boot](https://github.com/geoserver/geoserver-cloud/tree/main/src/starters/spring-boot): bootstrap starter · Common application launcher and service startup wiring. · `src/starters/spring-boot`
- [Web MVC](https://github.com/geoserver/geoserver-cloud/tree/main/src/starters/webmvc): servlet starter · Servlet context and GeoServer main bootstrapping support. · `src/starters/webmvc`
- [Observability](https://github.com/geoserver/geoserver-cloud/tree/main/src/starters/observability): logging starter · MDC propagation, access logging, and request-scoped logging helpers. · `src/starters/observability`
- [Main Runtime](https://github.com/geoserver/geoserver-cloud/tree/main/src/main/src/main/java/org/geoserver/cloud/autoconfigure/main): core runtime autoconfig · GeoTools HTTP client, main security, update-sequence, and loader wiring. · `src/main/src/main/java/org/geoserver/cloud/autoconfigure/main`

### Extensions

Conditional capability slices added to service runtimes.

- [Extensions](https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions): capability slices · Conditional add-ons that plug into the service layer via auto-configuration. · `src/extensions`
- [Security Slices](https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/security): extension family · LDAP, JDBC, auth-key, ACL, gateway shared-auth, and admin auth extensions. · `src/extensions/security`
- [Format Slices](https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/input-formats): extension family · Optional input/output format support such as COG, PMTiles, vector tiles, and DXF. · `src/extensions/input-formats`
- [Style Slices](https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/css-styling): extension family · Styling and presentation extensions such as CSS and Mapbox styling. · `src/extensions/css-styling`
- [OGC API](https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/ogcapi/features): extension family · OGC API feature support and related bindings. · `src/extensions/ogcapi/features`
- [Control Flow](https://github.com/geoserver/geoserver-cloud/tree/main/src/extensions/control-flow): extension slice · Control-flow extension with bootstrap and runtime behavior. · `src/extensions/control-flow`

### Deploy

Container, compose, and documentation topology.

- [Deploy Assets](https://github.com/geoserver/geoserver-cloud/tree/main/compose): deployment topology · Compose, Docker, Helm, and generated docs for runnable topologies. · `compose`

### Other components

- **Clients**: external actors · Browsers, API clients, and operator traffic entering the system.
- **PostgreSQL**: external datastore · Relational store used by PGConfig and GWC backends.
- **Object Storage**: external storage · S3, Azure, and GCS backends used by GeoWebCache blob stores.

## Connections

- Clients → Gateway MVC: requests · Servlet ingress path for client traffic.
- Clients → Gateway Flux: requests · Reactive ingress path for client traffic.
- Gateway MVC → WMS: routes to · Forwards protocol traffic to service apps.
- Gateway MVC → WFS: routes to · Forwards protocol traffic to service apps.
- Gateway MVC → WCS: routes to · Forwards protocol traffic to service apps.
- Gateway MVC → WPS: routes to · Forwards protocol traffic to service apps.
- Gateway MVC → REST Config: routes to · Forwards admin/config requests.
- Gateway MVC → Web UI: routes to · Forwards browser UI requests.
- Gateway Flux → GeoWebCache App: routes to · Reactive ingress can route to cache endpoints.
- Config Service → Deploy Assets: configured by · Configuration service participates in the packaged deployment topology.
- Spring Boot → Gateway MVC: boots · Shared application launcher and startup helpers.
- Spring Boot → Gateway Flux: boots · Shared application launcher and startup helpers.
- Web MVC → WMS: initializes · Servlet context and GeoServer main wiring.
- Web MVC → REST Config: initializes · Servlet context and GeoServer main wiring.
- Observability → Gateway MVC: observes · MDC and access logging for ingress services.
- Observability → WMS: observes · Request and authentication logging support.
- Main Runtime → WMS: provides runtime · Main security, update sequence, and HTTP client support.
- Main Runtime → Web UI: provides runtime · Main security, update sequence, and HTTP client support.
- WMS → Catalog Cache: reads via · Service code uses cached catalog facades.
- WFS → Catalog Cache: reads via · Service code uses cached catalog facades.
- WCS → Catalog Cache: reads via · Service code uses cached catalog facades.
- WPS → Catalog Cache: reads via · Service code uses cached catalog facades.
- REST Config → Catalog Plugin: writes via · REST config changes go through catalog facades.
- Web UI → Catalog Plugin: administers · Web UI manipulates catalog and service state.
- Catalog Cache → Catalog Plugin: wraps · Caching decorators sit in front of catalog facades.
- Catalog Plugin → Data Directory: persists to · Filesystem backend option for catalog/config state.
- Catalog Plugin → PGConfig: persists to · PostgreSQL backend option for catalog/config state.
- Catalog Plugin → Catalog Events: emits · Catalog lifecycle and config events propagate changes.
- Catalog Events → GWC Bus: bridges to · Remote event infrastructure shares change notifications.
- Data Directory → Catalog Events: publishes · Data-directory backend participates in local/remote events.
- PGConfig → PostgreSQL: stores in · Repositories and migrations use PostgreSQL.
- PGConfig → Catalog Events: publishes · Backend changes feed catalog and lifecycle events.
- GeoWebCache App → GWC AutoConfig: configures · Application shell imports conditional GWC wiring.
- GWC AutoConfig → GWC Core: wires · Core tile-layer catalog and request handling.
- GWC AutoConfig → GWC PGConfig: wires · Optional PostgreSQL-backed tile catalog.
- GWC AutoConfig → Blob Stores: wires · Optional object-store integrations.
- GWC AutoConfig → GWC Bus: wires · Distributed cache/event propagation support.
- GWC PGConfig → PostgreSQL: stores in · Tile-layer catalog and quota state persist to PostgreSQL.
- Blob Stores → Object Storage: stores in · Blob-store adapters target external object storage.
- GWC Bus → Catalog Events: syncs with · Cross-service change propagation aligns GWC and catalog state.
- Extensions → Security Slices: includes · Capability slice family.
- Extensions → Format Slices: includes · Capability slice family.
- Extensions → Style Slices: includes · Capability slice family.
- Extensions → OGC API: includes · Capability slice family.
- Extensions → Control Flow: includes · Capability slice family.
- Security Slices → Gateway MVC: enhances · Shared-auth and security integrations affect ingress.
- Security Slices → Web UI: enhances · Optional auth backends and ACL helpers.
- Security Slices → REST Config: enhances · Optional auth backends and ACL helpers.
