Overview
Vibe supports two runtime modes:native (services defined in vibe.yaml) and compose (runtime.composeFile points to a Compose file). In compose mode, the Compose file is processed through an import pipeline at runtime — not executed directly by docker compose or nerdctl compose.
Field support matrix
Supported (direct mapping)
Supported with transformation
Rejected
These fields trigger a warning in the import report. Their presence does not block import unless marked critical.Import pipeline
The Compose import runs 7 steps:- Locate Compose file — resolve
runtime.composeFilefrom the manifest; supportscompose.yaml,compose.yml,docker-compose.yaml,docker-compose.yml - Parse and validate — parse YAML; reject files that are not valid Compose syntax
- Normalize — expand short-form syntax (ports, volumes, environment) into canonical long form; resolve
env_filereferences - Reject unsupported fields — collect all rejected fields into the import report (warnings by default)
- Rewrite host-path assumptions — relative bind mounts remapped to
state/current/files/<import-dir>/; absolute host paths rejected - Map to internal model — convert each Compose service into the native Vibe service definition
- Generate import report — structured report of successes, transformations, rejections, and warnings
Common transformations
Relative bind mounts
./data are copied into state/current/files/imported-data/ at import time.
depends_on
nerdctl Compose
nerdctl compose is used only as a validation oracle during development and as a debug path — never in production. All production Compose handling goes through the import pipeline above.