OpenPark

Self-hosting

One set of OCI images. No cloud lock-in: any container runtime, any cloud, or on-prem.

Single server or laptop

git clone https://github.com/openpark/openpark && cd openpark
cp .env.example .env     # change the three secrets
docker compose up -d     # web, api, postgres
# plate reading (optional, off by default, runs inside your deployment):
docker compose --profile ai up -d

Open http://localhost:8080, create the first tenant at /signup. Single-tenant installs run the same code path with one tenant.

Kubernetes

helm install openpark ./deploy/helm/openpark \
  --set database.url=postgres://openpark_app:…@db/openpark \
  --set database.adminUrl=postgres://openpark:…@db/openpark \
  --set auth.jwtSecret=$(openssl rand -hex 32) \
  --set ingress.host=parking.example.com

Move between hosted and self-hosted

Export the inventory from Import / export in the app (or GET /v1/inventory/export) and import it on the other side. Slot and site codes are the stable keys.

What stays on your infrastructure

With the AI profile, plate images never leave your deployment: no external AI API is called. Only plate crops are stored, and purged after 30 days by default.