CCM YAML Editor
A VS Code extension that opens Walmart CCM (Configuration Management) YAML files in a rich visual editor — replacing the need to hand-edit raw YAML or navigate the Tunr Admin web portal for everyday config changes.
Features
Visual Override Matrix
Compare all overrides side-by-side in a spreadsheet-style grid. Click any cell to edit inline. Add or delete override columns without touching YAML syntax.
Live Resolution
Enter path element values (e.g. envProfile=prod, envName=prod) and instantly see which value each property resolves to, and which override matched.
Definition Editor
View and edit property definitions — add new properties, rename existing ones, change type/kind, and update default values — all with inline editing. The resolution path is also editable inline: click the path or the ✏ pencil icon to edit it in place.
All config groups listed with ext badges on externally-referenced groups. Add new configurations directly from the sidebar.
Orphaned Override Detection
If configOverrides references a group with no matching configDefinitions entry, the editor warns you with a banner and lets you remove the orphaned overrides in one click.
Auto-saves on every edit
No need to manually save. Every change (cell blur, property add, override delete) writes back to the YAML file immediately.
Getting Started
Install from VSIX
code --install-extension ccm-yaml-editor-0.1.0.vsix
Or: Extensions sidebar → ··· menu → Install from VSIX…
Open a CCM file
Any YAML file whose content matches the CCM ServiceConfig schema (contains apiVersion: "2.0", kind: "ServiceConfig", and configDefinitions:) is detected automatically. VS Code will offer to open it with the CCM YAML Editor. Use Reopen Editor With… → Text Editor from the tab context menu to switch back to raw YAML at any time.
Supported File Structure
The editor recognises CCM ServiceConfig files (apiVersion 2.0):
---
metadata:
serviceId: "MY-SERVICE"
serviceConfigVersion: "PROD-1.0"
deliveryEnvironment: "PROD"
...
configDefinitions:
my-config:
resolutionPaths:
- default: "/envProfile/envName"
properties:
timeout.seconds:
type: "INTEGER"
kind: "SINGLE"
defaultValue: 5
configOverrides:
my-config:
- description: "prod override"
pathElements:
envProfile: "prod"
envName: "prod"
value:
properties:
timeout.seconds: "30"
apiVersion: "2.0"
kind: "ServiceConfig"
Tab Reference
| Tab |
What it shows |
| Definition |
Resolution path (click to edit inline), all properties with type/kind/default. Add, rename, delete properties. |
| Overrides |
Matrix of all overrides as columns. Click cells to edit. Add/delete override columns. |
| Resolution |
Enter path element values → see resolved value + source badge for every property. |
Development
# Install dependencies
npm install
# Build (extension host + webview)
npm run build
# Launch Extension Development Host
# Press F5 in VS Code with this folder open
Stack: TypeScript · React 18 · Zustand · Vite · esbuild · yaml (Eemeli Aro v2)
Known Limitations (v0.1)
- YAML formatting: saving rewrites the file with normalised formatting (comments and custom key ordering are not preserved). Round-trip comment preservation is planned for a future release.
- EXPO / RAMP overrides: not yet surfaced in the UI (Phase 2).
- External group definitions: properties from referenced services are not fetched — definition tab shows a read-only notice for these groups.
JetBrains
The same visual editor is available as a JetBrains IDE plugin (IntelliJ IDEA, WebStorm, GoLand, etc.) via the companion tunr-jetbrains plugin. Both plugins share the same React webview — UI improvements in either project are automatically available in the other after a rebuild.
Feedback
Share feedback in #tunr-vscode on Slack or open an issue in the repo.