Skip to main content
vibe validate checks these rules. The same rules are enforced when packaging.

Rules

#Rule
1kind must be exactly vibe.app/v1
2id must match ^[a-zA-Z][a-zA-Z0-9]*(\.[a-zA-Z][a-zA-Z0-9]*)+$
3version must be valid semver
4All relative paths must not contain .. (path traversal rejected)
5Service names must be unique within the manifest
6Volume names referenced in stateVolumes or mounts must have a corresponding entry in state.volumes
7dependsOn references must point to service names defined in the same manifest
8Container ports must be in range 1–65535
9When mode: compose, the services array is ignored (services come from the Compose file)
10When mode: native, composeFile is ignored

Common validation errors

Invalid id

error: id "my-app" does not match required pattern
Use reverse-domain notation: com.example.myapp

Duplicate service names

error: duplicate service name "web"
Every service must have a unique name within the manifest.

Unknown volume reference

error: service "web" mounts volume "uploads" which is not declared in state.volumes
Add uploads to the state.volumes list with a consistency type.

Cycle in dependsOn

error: dependency cycle detected: web -> api -> web
dependsOn must form a directed acyclic graph. No service can (directly or transitively) depend on itself.

Path traversal

error: path "../secret.key" contains ".." which is not allowed
All paths in the manifest must be relative and must not escape the package root.