VACVAC
Reference

Build packs

How VAC detects your stack, what each adapter generates, and the managed add-on catalog.

2 min readUpdated June 16, 2026Edition · v0.5.xBeta

Every app, whatever its shape, is turned into a Docker Compose stack that VAC builds and runs. The translation is done by a build adapter, selected by the app's build kind. This page is the detection and behavior matrix; for the day-to-day settings UI, see Build settings.

Detection matrix

With the default auto kind, VAC inspects the repository in this order and stops at the first match:

OrderAdapterTriggered byProduces
1composecompose.yaml, compose.yml, docker-compose.yml, docker-compose.yamlthe file, used as-is
2dockerfilea Dockerfile at the repo roota generated single-service Compose wrapper around it
3frameworka package.json that depends on Reacta generated build (Node build → static output served by nginx)
(none)nothing above matchesa clear "couldn't detect how to build this" error

Set the build kind explicitly to skip detection — including static, which auto-detection never picks on its own.

The adapters

compose

Your Compose file is the source of truth. VAC resolves it with docker compose config (expanding includes and overrides), runs preflight, and builds it. Multi-service apps work out of the box.

dockerfile

A repo with just a Dockerfile gets wrapped in a one-service Compose stack. Point at an alternate Dockerfile path via the build config.

framework

Today this means React: VAC detects a react dependency in package.json, generates a Dockerfile that runs your build command (npm install && npm run build by default) and serves the output as static files behind nginx, then wraps it in a Compose stack. Use this when you'd rather not write Docker yourself.

React only, for now

React is the only auto-detected framework today. The adapter is structured so more frameworks slot in later — until then, anything else should ship a Dockerfile or a Compose file.

static

Serves a directory of static files behind a small file server, with an optional SPA fallback (serve index.html for unmatched routes). Choose the source directory in the build config.

One pipeline, every kind

Whatever the adapter produces, the rest of the deploy is identical — preflight, routing over vac-edge, Caddy health gating, memory limits. The adapter only decides how the Compose file comes to exist.

Managed add-on catalog

Separately from building your repos, VAC ships a small catalog of templated apps you can install with one click — pre-packaged Compose stacks bundled into the binary. They deploy through the same pipeline as Git apps, but are materialized from a template instead of cloned.

  • Enabled with managed services (VAC_MANAGED_SERVICES).
  • Each template declares its memory footprint and any managed-database dependency, so VAC can provision a database for it automatically.

Managed databases

Also under managed services, VAC can provision databases (Postgres, MariaDB, Redis, Mongo) for an app — either on the shared instance or, optionally, an isolated one. The connection string is encrypted and injected into the app's environment on the next deploy, under a variable name you choose.

Next

On this page