Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.cloudeval.ai/llms.txt

Use this file to discover all available pages before exploring further.

Use .cloudeval/config.yaml when a template-backed project has more than one file or when you want CloudEval to use a specific entry template.

Why it matters

CloudEval needs one explicit visualization source. In a repository with parameters, linked templates, modules, and generated outputs, the config file tells CloudEval which file starts the graph and report pipeline.

Quick example

Create this file at the root of your IaC workspace:
# .cloudeval/config.yaml
# CloudEval config v1.
# Only the documented keys below are read by CloudEval.
# Unknown keys and commented examples are ignored.
version: 1
stacks:
  - id: main
    entry: azuredeploy.json
    parameters: azuredeploy.parameters.json
resolve:
  linked_templates: true
analysis:
  auto_resolve_on_import: false
  auto_refresh_on_resolve: true
Expected result:
  • CloudEval reads azuredeploy.json as the visualization source.
  • Relative templateLink files are resolved when resolve.linked_templates is true.
  • Generated bundles, connection mirrors, reports, and share assets are not treated as source files.

Supported keys

KeyRequiredPurpose
versionYesConfig schema version. Current supported value is 1.
stacks[].idYesStable stack id used in status and generated bundle paths.
stacks[].entryYesVisualization source file, relative to the project root.
stacks[].parametersNoARM parameters file, relative to the project root.
resolve.linked_templatesNoFollows relative ARM templateLink files and merges them into the analysis bundle. Defaults to true.
analysis.auto_resolve_on_importNoResolves the stack immediately after import. Defaults to false.
analysis.auto_refresh_on_resolveNoRefreshes diagram and reports after resolve. Defaults to true.

Folder behavior

CloudEval treats the project root like a repository root. It does not add or strip a synthetic repo/ folder.
.cloudeval/
  config.yaml
azuredeploy.json
nested/
  network.json
README.md
If your repository contains a real folder named repo, CloudEval treats it as a normal folder:
repo/
  azuredeploy.json
That means the config entry must include the folder:
stacks:
  - id: main
    entry: repo/azuredeploy.json

CLI and API contract

The public import contract is path based:
  • .cloudeval/config.yaml is read from the workspace root.
  • stacks[].entry is the visualization source, relative to that same root.
  • Linked templates and parameters are uploaded as individual files and keep their relative paths.
  • CloudEval writes derived analysis artifacts under managed .cloudeval/ subfolders; those artifacts are not source inputs.
The CLI follows the same contract when you use --workspace-dir:
cloudeval projects create \
  --workspace-dir ./infra \
  --workspace-entry azuredeploy.json \
  --name "Nested ARM workspace" \
  --provider azure \
  --format json \
  --output ./cloudeval-project.json
If .cloudeval/config.yaml is missing, the CLI creates a minimal config using the selected entry file and the detected parameters file, then sends that config with the workspace upload. Passing --workspace-entry is recommended for repositories with more than one deployable template.

Nested ARM example

Use this structure when a parent ARM template deploys child templates by relative path:
.cloudeval/
  config.yaml
azuredeploy.json
azuredeploy.parameters.json
nested/
  network.json
  storage.json
README.md
# .cloudeval/config.yaml
version: 1
stacks:
  - id: main
    entry: azuredeploy.json
    parameters: azuredeploy.parameters.json
resolve:
  linked_templates: true
analysis:
  auto_resolve_on_import: true
  auto_refresh_on_resolve: true
{
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2022-09-01",
      "name": "network",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "nested/network.json"
        }
      }
    }
  ]
}
Expected result: the code view still shows individual source files, while the diagram and reports use the resolved stack.

Ignored config and managed paths

CloudEval ignores unknown YAML keys so future fields can be added without breaking existing repositories. Comments are guidance only.
Ignored itemWhy
Unknown YAML keysForward-compatible; CloudEval v1 reads only the documented schema.
Commented examplesYAML comments are never parsed.
.cloudeval/bundles/**Derived resolved templates written by CloudEval.
.cloudeval/connections/**Derived connection mirrors written by CloudEval.
.cloudeval/reports/**User-visible report outputs written by CloudEval.
.cloudeval/share/** and .cloudeval/shares/**User-visible share assets and metadata written by CloudEval.
.cloudeval/snapshots/** and .cloudeval/template-cache/**Internal caches and snapshots written by CloudEval.
.cloudeval/ps-rule.yamlCloudEval-managed PSRule settings. This file is hidden from the normal project tree.

Common mistakes

MistakeFix
Using .cloudeval/cloudeval.yamlRename it to .cloudeval/config.yaml.
Setting entry to a generated bundlePoint entry at the source template, not .cloudeval/bundles/**.
Uploading generated report/share folders as sourceKeep .cloudeval/reports/**, .cloudeval/share/**, and .cloudeval/shares/** as CloudEval-managed outputs.
Expecting repo/ to be strippedUse root-relative paths exactly as they exist in your repository.
Last modified on May 22, 2026