strata
strata is a modular, multi-repository infrastructure platform for managing workspaces and cluster orchestration. It uses a separation-of-concerns architecture where configuration, modules, and deployments live in separate version-controlled repositories, enabling repeatable, audit-ready infrastructure deployments.
All infrastructure is defined in YAML. The CLI (strata) orchestrates the full lifecycle — from workspace initialization through build artifact generation and Terraform provisioning — without manual scripting.
Table of Contents
Key Features
Multi-repository architecture — Platform code, modules, configuration, and deployments in separate repos; each independently versioned and tagged.
Declarative YAML configuration — All infrastructure defined in Kubernetes-style YAML (
apiVersion,kind,meta,spec). No imperative scripts.Two-phase validation — Phase 1: Pydantic schema checks. Phase 2: cross-repo reference resolution and integration credential checks.
Profile management — Named profiles group environment-specific file references (config, environment, secrets). Switch between
dev,staging,prodwithout touching YAML.Audit-ready deployment manifests — Every build captures exact Git commits, version tags, timestamps, user, and resource configuration — ready for NIS2 / ISAE 3402 evidence packages.
Pluggable secret backends — Bitwarden, HashiCorp Vault, Azure Key Vault, Azure App Config, and environment variables all supported through a unified integration layer.
Terraform orchestration — Build generates
.tfvars.jsonandplatform.jsonartifacts; deploy runsterraform init → validate → plan → applyper stage in the correct order.No lock-in — Build output is plain Terraform. Copy it, run it yourself, and strata is out of the picture. See Value Proposition & Escape Hatch.
New here? Start with the feature overview for a practical, terminal-focused rundown of everything strata does.
Prerequisites
Tool |
Version |
Required for |
|---|---|---|
Python |
3.13+ |
CLI runtime |
latest |
Package and environment management |
|
Git |
any |
Repo management ( |
1.5+ |
|
Installation
uv sync
Linux / macOS:
source .venv/bin/activate
strata --help
Windows:
.venv\Scripts\Activate.ps1
strata --help
Or invoke directly without activating:
uv run strata --help
Quick Start
# 1. Initialize a new workspace
cd /path/to/my-workspace
strata sln init --name my-workspace
# Opens in VS Code? Select "Reopen in Container" to use the pre-configured dev container.
# 2. Register external repositories
strata repo add xyz-config git@github.com:org/xyz-config.git --branch main --clone
strata repo add xyz-infrastructure git@github.com:org/xyz-infrastructure.git --branch main --clone
# 3. Create an environment profile
strata profile add prd --activate
# 4. Add file references to the active profile
strata ref config add global-config --path "@xyz-config/config/xyz-config.yaml"
strata ref env add prd-env --path "@xyz-config/environments/xyz-env-prd.yaml"
# 5. Validate a YAML file
strata validate repos/xyz-config/config/xyz-config.yaml
# 6. Inspect resolved values before building
strata values list -f repos/xyz-infrastructure/deployments/xyz-deploy-prd.yaml
# 7. Build deployment artifacts
strata build run -f repos/xyz-infrastructure/deployments/xyz-deploy-prd.yaml
# 8. Deploy
strata deploy run -f repos/xyz-infrastructure/deployments/xyz-deploy-prd.yaml --dry-run
strata deploy run -f repos/xyz-infrastructure/deployments/xyz-deploy-prd.yaml
Tip: Persist output format and verbosity once so you don’t repeat flags:
strata config set output console strata config set verbose true
Configuration
Platform YAML files follow a Kubernetes-style schema:
apiVersion: strata.huybrechts.xyz/v1
kind: workspace # workspace | deployment | environment | provider | resource | ...
meta:
name: my-workspace
annotations:
description: Production infrastructure workspace
spec:
...
Full schema documentation: config/
Supported kinds: configuration, workspace, deployment, environment, provider, resource, firewall, module, namespace, workspace-template.
CLI Reference
strata <command> [options]
Standard options accepted by every command:
Option |
Description |
|---|---|
|
Workspace root (or |
|
Output format (default: |
|
Show structured log output |
|
Suppress all output |
Full command reference: platform/commands.md
AI Integration via MCP
Connect strata to Claude, GitHub Copilot, or custom AI agents using the Model Context Protocol (MCP) server.
The strata MCP server exposes infrastructure operations as AI-friendly tools:
Validate YAML with
validate_file()— catch errors before deploymentPreview builds and deployments with
build_plan()anddeploy_plan()Query infrastructure state with
deploy_status()andaudit_query()Generate deployment files with
scaffold_file()from templates
Perfect for:
AI-assisted infrastructure planning and code review
Troubleshooting via drift detection and audit log analysis
Approval workflows: AI previews, human reviews, CLI executes
Get started: MCP Server Integration Guide for AI Agents
Deployment Workflow
The full lifecycle from workspace setup to running infrastructure:
strata sln init— create workspace, optionally from a templatestrata repo add / sync— register and clone external reposstrata profile add / activate— create named environment profilesstrata ref config / env add— attach config and environment files to the active profilestrata validate— validate individual YAML filesstrata values list— inspect resolved variables, secrets, and feature flagsstrata build run— generate.tfvars.json,platform.json, rendered templatesstrata deploy run— execute Terraform provisioners per stage
Full guide: platform/workflow.md
CI/CD integration: platform/ci-integration.md
Testing
# Run full test suite
uv run pytest tests/ --no-cov -q
# Run with coverage
uv run pytest tests/ --cov=strata --cov-report=term-missing
For linting, type checking, and the full nox pipeline, see CONTRIBUTING.md.
Troubleshooting
# Built-in help topics
strata help --list
strata help --topic troubleshooting
strata help --topic quickstart
Common issues:
Symptom |
Likely cause |
Fix |
|---|---|---|
|
CWD not in a workspace tree |
Run |
Exit 2 on any command |
Missing required option |
Check |
Exit 3 on |
Schema-invalid YAML |
Read the validation error output |
Exit 4 on |
Deployment lock held elsewhere |
Wait for other process to finish, or use |
|
Repo not registered or not cloned |
|
Terraform not found |
|
Install Terraform 1.5+ |
Inspecting Resolved Values Before Deploy
Before deploying, inspect all variables, secrets, and features that will be used:
# List all resolved values for a deployment
strata values list -f xyz-deploy-prd.yaml
# Show store references (where each secret/variable comes from)
strata values list -f xyz-deploy-prd.yaml --show-store
# Find entries that failed to resolve (exit code 3)
strata values list -f xyz-deploy-prd.yaml --unresolved
# Inspect a single key
strata values get -f xyz-deploy-prd.yaml DB_PASSWORD
Use this before running strata deploy run to catch missing credentials or typos early.
Using Dry-Run to Validate Deployment
Always dry-run before a real deployment. The dry-run step validates configuration, builds artifacts, and plans (without applying):
# Plan without applying anything
strata deploy run -f xyz-deploy-prd.yaml --dry-run
# If successful, run the real deploy
strata deploy run -f xyz-deploy-prd.yaml
# Inspect what a specific stage would do
strata deploy run -f xyz-deploy-prd.yaml --stage production --dry-run
Debugging a Failed Deployment
If a deploy fails, query the audit log to see what happened:
# Show the most recent deployment
strata audit changes --last 1
# Show all deployments in the last 24 hours
strata audit changes --since 2026-07-05T00:00:00Z
# Query which stage failed
strata audit changes --stage infrastructure
# Export audit log for analysis
strata audit changes --last 50 --output json > audit.json
For more details, see the audit traceability guide.
Contributing
Contributions are welcome! See CONTRIBUTING.md for workflow guidelines and developer setup (linting, testing, nox, lockfiles).
Security
See SECURITY.md for the vulnerability reporting policy.
License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.
Acknowledgments
See ACKNOWLEDGMENTS.md.
Contact
See SUPPORT.md for where to get help and expected response times.
Glossary
Term |
Definition |
|---|---|
Configuration |
Settings defining providers, resources, and platform behavior |
Deployment |
An instance of infrastructure/application in a specific environment |
Environment |
A specific setup (dev, staging, prod) that overrides workspace defaults |
Firewall |
Security rules governing network traffic to/from resources |
Infrastructure as Code (IaC) |
Managing infrastructure through declarative code and automation |
Module |
A deployable application component (source + lifecycle hooks) |
Namespace |
A logical grouping of modules within a workspace |
Platform |
The core CLI and orchestration layer |
Profile |
A named set of file references for a specific environment |
Provider |
A cloud service provider (Azure, AWS, GCP, Kamatera, local) |
Ref |
A typed file reference (env, config, data, secret) attached to a profile |
Resource |
An individual infrastructure component (VM, disk, network) |
Topology |
The arrangement and relationships of resources within a workspace |
Workspace |
A logical grouping of resources that defines WHAT infrastructure to build |
Core Concepts
Separation of Concerns
Each concern lives in its own repository:
Repo type |
Example name |
Contains |
|---|---|---|
Platform (this repo) |
|
CLI, provisioners, built-in defaults |
Configuration |
|
Provider credentials, topology definitions, firewall rules |
Infrastructure |
|
Deployment manifests, Terraform backends |
Service config |
|
Service-specific configuration files |
Version Control Everything
Each repository independently versioned and tagged
Git commits form an immutable audit trail
Tags mark approved configurations
Branches support environment-specific variations
Declarative Configuration
All infrastructure defined in YAML — no imperative deployment scripts
Reproducible deployments from manifests
Configuration drift detectable via
strata build plan
Audit Trail
Every strata build run generates a deployment manifest capturing:
Exact Git commits for all configuration sources
Version tags for platform and modules
Timestamp, user, and resource configuration
Approval metadata (when configured)
This provides audit-ready evidence for regulatory frameworks (NIS2, ISAE 3402 Type 2).