Skip to content

Config Reference

Overview of all configuration files in the DWE system.

New to DWE? Start with Getting started for an end-to-end walkthrough, then return here for the file-by-file reference.

FileTrackedLoaderPurpose
workspace.ymlyeslayer 1Project identity and service structure
workspace/defaults.ymlyeslayer 2Versioned defaults: runtime, exports, service enabled toggles
workspace/local.ymlno (gitignored)layer 3Per-user overrides: state, service enabled toggles
workspace/services/<name>/service.ymlyesstandalonePer-service declaration (dirs, cli, configs, ports)
workspace/deploy.ymlyesstandaloneOrchestrator deploy pipeline (phases + steps)
workspace/services/<name>/deploy.ymlyesstandalonePer-service deploy pipelines
workspace/reset.ymlyesstandaloneReset pipeline
workspace/lifecycle.ymlyesstandaloneRun / stop pipelines (driving dwe run/stop/restart)
workspace/docker.ymlyesstandaloneCompose execution policy
workspace/docker.local.ymlno (gitignored)merged into docker.ymlLocal compose policy overrides
workspace/styles.ymlyesstandaloneASCII header, color palette, separator
workspace/info.ymlyesstandaloneInfo dashboard sections
workspace/commands/yesstandaloneDeclarative command definitions (per-file groups)
workspace/validate.ymlyesstandaloneProject readiness checks (preflight + dwe validate)
workspace/snapshot.ymlyesstandaloneSnapshot workflows: create / restore / remove (dwe snapshot)
workspace/tests/<scenario>.ymlyesstandaloneIntegration-test scenarios: isolated deploy + assertion steps (dwe test)
workspace/i18n/*.ymlyesstandaloneUser command and UI string translations (optional; one file per language)

The .dwe/ directory contains DWE-managed artifacts and is gitignored:

  • .dwe/logs/ — pipeline logs (deploy, reset, lifecycle run/stop)
  • .dwe/deploy/deploy.lock — deployment lock file (Unix-only; prevents parallel deploys)
  • .dwe/deploy/state.yml — deployment state journal (tracks service deploy status and hashes)
  • .dwe/snapshots/snapshot.lock — snapshot lock file (Unix-only; serialises snapshot mutating commands and is co-acquired by deploy lifecycle commands)
  • .dwe/snapshots/current — current snapshot pointer (last created or restored snapshot)
  • .dwe/snapshots/.pre-restore-backup/ — backup of workspace/local.yml + .dwe/deploy/state.yml taken before each restore; manual recovery target on restore failure
  • .dwe/tests/runs/<scenario>/, .dwe/tests/locks/<scenario>.lock, .dwe/tests/manifests/<scenario>-<run-id>.yml, .dwe/tests/reports/<scenario>/dwe test scenario copies, per-scenario flocks, durable run manifests, and failure-report artifacts (collected only on failure)

Add .dwe/ to your project’s .gitignore if not already present.

flowchart LR
  subgraph merged["3-layer merge — DweConfig"]
    direction TB
    A[workspace.yml] --> B[workspace/defaults.yml] --> C[workspace/local.yml]
  end

  S["workspace/services/&lt;name&gt;/service.yml"] -. injected into Raw .-> merged

  merged --> R[(DweConfig.Raw<br/>+ typed structs)]

  subgraph standalone["Standalone loaders"]
    direction TB
    D[workspace/deploy.yml]
    DS["workspace/services/&lt;name&gt;/deploy.yml"]
    RS[workspace/reset.yml]
    L[workspace/lifecycle.yml]
    DK[workspace/docker.yml<br/>+ docker.local.yml]
    ST[workspace/styles.yml]
    IN[workspace/info.yml]
    CM[workspace/commands/]
  end

  R -. "dot-paths / templates" .-> D
  R -. "dot-paths / templates" .-> DS
  R -. "dot-paths / templates" .-> RS
  R -. "dot-paths / templates" .-> L
  R -. "$#123;...#125; project_name" .-> DK
  R -. "#123;#123;...#125;#125; expressions" .-> IN
  R -. "$#123;...#125; command params" .-> CM

Merged (3-layer config): workspace.ymlworkspace/defaults.ymlworkspace/local.yml are deep-merged at startup. Later layers win; maps merge recursively. The result is the effective config used for .env generation, topology resolution, and export rules. Each workspace/services/<name>/service.yml is loaded separately and then injected into the merged raw map so dot-paths like services.main.container resolve.

Standalone: workspace/services/<name>/service.yml, deploy.yml, workspace/services/<name>/deploy.yml, reset.yml, lifecycle.yml, docker.yml (+ docker.local.yml), styles.yml, info.yml, and commands/*.yml are loaded by dedicated functions in internal/core/project/config/ and internal/core/usercommands/. They are not part of the 3-layer merge but most of them resolve template expressions against the merged config.

Currently, only docker.local.yml supports a .local.yml variant for per-developer customization. The pattern is:

Docker: workspace/docker.yml (tracked, shared project-wide) + workspace/docker.local.yml (gitignored, per-developer). The local file is merged on top of the base file, allowing developers to customize their compose execution policy — e.g., add extra volumes, mount local source directories, or override platform/args without affecting teammates.

Why only docker? Docker setups are inherently personal — they depend on the developer’s local environment (available binaries, volume mounts, platform differences). Other configs like lifecycle.yml, info.yml, and styles.yml are shared project-wide and don’t benefit from per-developer overrides.

For more details on docker.local.yml semantics and examples, see docker.yml.

  • workspace / defaults / local — the 3-layer merged config: merge order, precedence, dot-path resolution, field reference
  • vars — the dwe vars command: enumerate/read/edit/trace the vars: sandbox, comment-preserving writes, static usage scan, bridge.vars_writable container-write allowlist
  • services//service.yml — per-service declarations, extends, dirs, cli config
  • deploy.yml / reset.yml — deploy and reset pipelines, steps, builtins, file logging, idempotent deploy
  • state.yml — deploy state tracking, skip-decision table, hashing, lock file, recovery from crashes
  • lifecycle.yml — run/stop pipelines, update probe, hook phases, required service gate
  • Conditions and Actions — typed conditions for when:, typed actions for check: and step bodies, predicate vs engine-builtin distinction
  • docker.yml — Compose execution policy, project name, env triggers
  • styles.yml — ASCII header, color palette, separator
  • info.yml — info dashboard sections, template expressions
  • commands/ — declarative commands: types, params, context, files, workflows, templates
  • validate.yml — project readiness checks: env probes, declarative checks, builtins, stages, preflight
  • snapshot.yml — snapshot workflows: create/restore/remove blocks, variants, ${snapshot.*} namespace, manifest, lock interaction, archive safety
  • tests/ — integration-test scenarios: schema, auto ports, isolation model, teardown, dwe test run/list/clean, failure reports, exit codes
  • Localization (i18n) — user command and UI string translations: locale resolution, file format, key reference, validation
  • User config — user-level preferences: file location, syntax, binary overrides, language, mermaid theme
  • Notifications — user-level desktop notifications: config file locations, keys, gate matrix, environment overrides
  • UI — interactive command browser configuration: depth, collapse, badges, hotkeys, fallback ladder
  • Templates — Go templates, ${...} shorthand, sprout helpers (shared across info, commands, pipelines, render packs)
  • dwe render env — generate .env from the merged config export rules
  • dwe render ide — generate IDE configs
  • dwe render ai — generate hub-level AGENTS.md and CLAUDE.md symlinks
  • dwe render git — generate shell git hooks into <svc.Dir>/src/.git/hooks/
  • dwe info — render the info dashboard from info.yml
  • dwe deploy plan — show the resolved deploy pipeline
  • dwe compose files — show active compose file list (diagnostic)
  • dwe status apps — show app services with health and deploy status
  • dwe status tools — show tool services table (read-only)
  • dwe status infra — show infra services table (read-only)
  • dwe test run — run isolated integration-test scenarios against a disposable copy of the project
  • dwe test list — list available integration-test scenarios
  • dwe test clean — sweep kept/leftover integration-test environments and report (never auto-remove) orphaned compose projects (manifest-driven; --dry-run, [scenario...])