Intelligent software for modern web mapping and integrated planning
Website
GOAT is a free and open source WebGIS platform. It is an all-in-one solution for integrated planning, with powerful GIS tools, integrated data, and comprehensive accessibility analyses for efficient planning and fact-based decision-making.
Try it out in the cloud at goat.plan4better.de
For more information check out:
GOAT is a monorepo project leveraging a modern, full-stack architecture.
-
🐍 Python
-
⚡️ FastAPI
-
📦 Pydantic
-
🗄️ SQLAlchemy
-
🔐 Keycloak
GOAT is also available as a fully hosted cloud service. If you prefer not to manage your own infrastructure, you can get started instantly with our trial version and choose from one of our available subscription tiers. Get started at goat.plan4better.de.
Official support: We provide a maintained compose.yaml for running the full GOAT stack in a production‑like environment.
Important: While we provide Docker resources, self‑hosted deployments are community‑supported. We do not offer official support for managing your infrastructure.
The images for each GOAT service are published on GitHub Container Registry.
Make sure the following are installed on your server or local machine:
- Docker
- Docker Compose (plugin syntax:
docker compose) - At least 12 GB RAM recommended
The compose.yaml uses profiles to control which services start:
| Profile | Description |
|---|---|
| (none) | Infrastructure only: PostgreSQL, MinIO, Redis, RabbitMQ, Windmill server/worker |
dev |
Infrastructure + devcontainer with local code mounts for development |
prod |
Infrastructure + all production services (core, geoapi, web, processes, workers) |
The prod profile provisions:
- PostgreSQL with PostGIS
- MinIO (S3 compatible storage)
- Redis & RabbitMQ
- Windmill (workflow engine for analytics tools)
- GOAT Core (FastAPI backend)
- GOAT GeoAPI (FastAPI backend for geodata)
- GOAT Processes (OGC API Processes)
- GOAT Web (Next.js frontend)
git clone https://github.com/plan4better/goat.git
cd goatCopy .env.example to .env:
cp .env.example .envUpdate environment variables as needed (see "Environment Variables" section below).
docker compose --profile prod up -dThis will automatically pull the latest images and start all services.
| Service | URL |
|---|---|
| Web UI | http://localhost:3000 |
| Core API | http://localhost:8000/api |
| GeoAPI | http://localhost:8100 |
| Processes API | http://localhost:8300 |
| Windmill UI | http://localhost:8110 |
| MinIO Console | http://localhost:9001 |
To update an existing installation:
docker compose --profile prod down
docker compose --profile prod pull
docker compose --profile prod up -dTo completely reset the installation including all data:
docker compose --profile prod down
docker volume rm goat_goat-data
docker compose --profile prod up -dIf you are developing the GOAT codebase or making changes to apps/core, apps/geoapi, or apps/web, you may need to build images manually.
docker compose --profile prod up -d --buildOnly use this if you're modifying the GOAT source code.
| Variable | Description |
|---|---|
POSTGRES_USER |
Username for PostgreSQL authentication |
POSTGRES_PASSWORD |
Password for PostgreSQL authentication |
POSTGRES_SERVER |
Hostname of the Postgres service (usually db) |
POSTGRES_DB |
Name of the PostgreSQL database |
S3_PROVIDER |
Storage provider (e.g., minio) |
S3_ACCESS_KEY_ID |
Access key for S3 / MinIO |
S3_SECRET_ACCESS_KEY |
Secret key for S3 / MinIO |
S3_ENDPOINT_URL |
Internal S3 endpoint (http://minio:9000) |
S3_BUCKET_NAME |
Name of the S3 bucket to create/use |
S3_REGION |
Region (may remain empty for MinIO) |
S3_PUBLIC_ENDPOINT_URL |
Public URL for accessing S3 objects |
AUTH |
Auth switch for all services and the web app (True/False). With False, the Keycloak variables are not needed and a default user/organization is seeded |
NEXT_PUBLIC_API_URL |
Public URL of the Core API |
NEXT_PUBLIC_GEOAPI_URL |
Public URL of the GeoAPI (tiles/features) |
NEXT_PUBLIC_PROCESSES_URL |
Public URL of the Processes API |
NEXT_PUBLIC_DOCS_URL |
URL for documentation |
NEXT_PUBLIC_MAP_TOKEN |
MapLibre/Mapbox token |
KEYCLOAK_SERVER_URL |
Base URL of the Keycloak server (derives the issuer together with REALM_NAME) |
REALM_NAME |
Keycloak realm |
KEYCLOAK_CLIENT_ID |
Keycloak client (web login, core admin, print worker) |
KEYCLOAK_CLIENT_SECRET |
Keycloak client secret |
WINDMILL_TOKEN |
Token for the Windmill workflow engine (analytics tools) |
NEXTAUTH_URL |
Public URL of the Web UI (also drives NEXT_PUBLIC_APP_URL) |
NEXTAUTH_SECRET |
Secret key for Auth.js sessions |
See .env.example for the full list, including optional
settings such as the AUTH=False default identity (DEFAULT_USER_*,
DEFAULT_ORGANIZATION_NAME, DEFAULT_QUOTA_*), SMTP, and Stripe.
GOAT is a commercial open‑source project. The core platform is licensed under the GNU General Public License v3.0 (GPLv3), which allows anyone to use, modify, and distribute the software under the terms of the GPL.
The full platform — including user management, teams, and organizations — is part of the open-source core. Optional commercial services (hosting, support, and enterprise capabilities) are available for organizations that need them.
This structure makes GOAT accessible for everyone, while providing extended functionalities through optional commercial services.
| GPLv3 | Commercial | |
|---|---|---|
| Self‑host the core platform | ✅ | ✅ |
| Use for commercial purposes | ✅ | ✅ |
| Teams & organizations | ✅ | ✅ |
| Clone privately | ✅ | ✅ |
| Fork publicly | ✅ | ✅ |
| Modify and redistribute | ✅ | ❌ (commercial components excluded) |
| Keep derivative work private | ❌ | ✅ (commercial components only) |
| Authentication integrations | ❌ | ✅ |
| Hosted SaaS version | ❌ | ✅ |
| Official support | ❌ | ✅ |
We welcome contributions of all kinds, bug reports, documentation improvements, new features, and feedback that helps strengthen the platform. Please see our contributing guide.