Skip to main content

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:
  1. Locate Compose file — resolve runtime.composeFile from the manifest; supports compose.yaml, compose.yml, docker-compose.yaml, docker-compose.yml
  2. Parse and validate — parse YAML; reject files that are not valid Compose syntax
  3. Normalize — expand short-form syntax (ports, volumes, environment) into canonical long form; resolve env_file references
  4. Reject unsupported fields — collect all rejected fields into the import report (warnings by default)
  5. Rewrite host-path assumptions — relative bind mounts remapped to state/current/files/<import-dir>/; absolute host paths rejected
  6. Map to internal model — convert each Compose service into the native Vibe service definition
  7. Generate import report — structured report of successes, transformations, rejections, and warnings

Common transformations

Relative bind mounts

Contents of ./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.