.yaml, .jsonc, or .cue. The top-level environments[] array contains moduleInstances[], and modules reference each other with moduleGivenIdRef.
Example project config
Example project config
A minimal
ravion.yaml with a VPC, an ECS cluster, and a web service. Modules reference each other with moduleGivenIdRef.ravion.yaml
Pull and apply
Store the config file in your repository and manage it with the CLI.1
Create or select the project
For a new project, create the project and write its draft config file:For an existing project, write its live config to a file:
Creating or pulling a
.yaml, .jsonc, or .cue file adds an AI skill header, inline field
comments, and quick links to the generated file. Plain .json does not support comments, so it
omits these annotations.2
Edit the file
Add or edit environments and add, edit, or remove module instances.
Removing a module instance from the config file will run the Terraform plan for the Terraform destroy action and then wait for manual approval. You’ll need to manually approve the destroy and then delete the module instance from the system.
3
Preview with a dry run
Validate the file and print the planned changes without applying them.
4
Apply the changes
Apply the config to update the stored config and run the Terraform plan if needed.Add
--autoapprove to approve supported stack change pipeline runs without a manual gate.Add --description to set the description on every stack run the apply creates, for example --description "https://github.com/acme/app/pull/12" to link the runs to the pull request that changed the config. Without it, runs keep Ravion’s generated description.5
Review and approve the stack run
Applying a config change starts a stack change pipeline run when the affected module has a Terraform stack. The stack run creates a Terraform plan and waits for manual approval before applying, unless you pass With
--autoapprove to an apply command that supports it.The apply prints a PIPELINE_RUN_ID for every stack run it starts, plus the wait command for those runs. Follow a run with wait --watch instead of polling pipeline run get.The runs are listed in dependency order, so you can work through them one at a time: a run only starts once the runs it depends on succeed.Without --autoapprove, each run stops at its approval gate, so wait for that gate, review the plan, approve, then wait for the apply:--autoapprove, wait for the run to finish, then inspect the Terraform results:6
Integrate with CI
Commit the config file and let GitHub Actions plan changes on each pull request and apply them on merge.See CI integration.
Agent tips
Use these rules when an agent edits a project config file. Never hand-write aravion.yaml from memory. Generate it with ravion project create --file
for a new project or ravion project config pull --file for an existing project so it carries the
current header, comments, and links, then edit it.
Required workflow
- Check the project config schema before editing:
- List available module definitions before adding a module:
- Inspect the input schema before adding or editing a module instance:
- Preview every change before applying it:
- Apply only after the dry run is correct and approved:
- After applying config, use
ravion pipeline run wait <id> --watchinstead of repeatedly pollingpipeline run get. The apply output lists aPIPELINE_RUN_IDfor every stack run it starts, followed by the exact wait command to run. Work through the commands in the printed order, which is dependency order:
- Follow application deployments the same way, with
ravion deploy wait <deployment-id> --watchinstead of pollingdeploy get.
Helpful hints
- Pull the latest live config anytime with
ravion project config pull <project-id> --file ravion.yaml. - Use
--autoapproveonly for supported stack changes that do not need a manual approval gate. - To iterate on one target, pass
--environment-id,--environment-given-id,--module-instance-id, or--module-given-id. - If a schema check, dry run, or apply fails unexpectedly, file it with
ravion report bug "<what happened>" --command "<the command that failed>". Include the exact error text and the project, environment, and module instance IDs involved. See Report bugs and feedback.
Module editing rules
- Treat the config file as the source of truth for the current task.
- Preserve existing IDs,
givenIdvalues, module versions, and Ravion app links unless asked to change them. - Tailor recommended settings to the target environment.
- Ask about important settings that cannot be inferred with high confidence.
- Ask before production-impacting changes such as public access, deletion protection, backup retention, capacity, region, or networking exposure.
Do not
- Copy module inputs from unrelated files or examples.
- Invent fields that are not present in the CLI schema output.
- Apply changes without a successful dry run first.
- Poll
ravion pipeline run getorravion deploy getin a loop. Use the matchingwait --watchcommand instead.
Schema reference
Use this reference when you author project config files or generate project configuration from another system. For a compact, machine-readable version, fetchhttps://api.ravion.com/projects/config/schema.md.
Legend
ProjectConfig
User-authored project config file consumed byravion projects config apply --file.
Project.ApplyProjectConfigProject
Project metadata to update before applying environment configuration.See: Project
Project.ProjectConfigFileEnvironment[]
required
Environment configuration blocks to apply.See: Environment
Project
Writable project metadata accepted by project config apply.string
Existing project ID. When provided, it must match the project in the route.
string
User-provided project identifier. When provided, it must match the project in the route.
string
string
Environment
Environment block authored in project config files.string
Existing environment ID.
string
User-provided environment identifier.
string
string
Project.ProjectConfigFileModuleInstance[]
required
See: ModuleInstance
ModuleInstance
Module instance shape authored in project config files.string
Existing module instance ID. Non-empty IDs must resolve to an existing module.
string
User-provided unique identifier. Must be unique within environment.
string
string
string
Module type identifier.
string
Semantic module version string.
map<string,any | null>
Runtime module configuration input.
Module references
Use{moduleGivenIdRef: "..."} inside module input fields that reference another module.
Use
givenId values for the project, environment, and module segments.