Skip to main content

Infra Lang

Write infrastructure once, compile it to Kubernetes, Compose, or GitHub Actions.

CI Docs License Python

Infra Lang is an Infrastructure-as-Code DSL for DevOps engineers, SREs, and platform teams. You describe your application — services, databases, queues, secrets, and pipelines — in one declarative .infra file, and Infra Lang compiles it to Kubernetes YAML, Docker Compose, Terraform HCL, or a GitHub Actions workflow. Instead of hand-writing and maintaining the same app in four different formats, you maintain one source of truth.

Quick demo

A single .infra file describes a service:

# app.infra
service api {
    image: "myapp/api:v1.0.0"
    replicas: 3
    port 8080
    health http("/health")
    resources {
        requests { cpu: 200m, memory: 256Mi }
        limits   { cpu: 1000m, memory: 512Mi }
    }
}

Compile it to Kubernetes:

infra compile app.infra --target kubernetes

Infra Lang produces the matching Deployment and Service:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app.kubernetes.io/name: api
  template:
    spec:
      containers:
        - name: api
          image: myapp/api:v1.0.0
          ports:
            - containerPort: 8080
              name: port-0
          resources:
            requests: { cpu: 200m, memory: 256Mi }
            limits:   { cpu: 1000m, memory: 512Mi }
          readinessProbe:
            httpGet: { path: /health, port: 8080 }
---
apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  selector:
    app.kubernetes.io/name: api
  ports:
    - port: 8080
      targetPort: 8080

The same file compiles to Docker Compose with no rewriting:

infra compile app.infra --target compose

A pipeline block compiles to a GitHub Actions workflow:

pipeline ci {
    trigger { branches: ["main"] }
    stages {
        test: { runsOn: "ubuntu-latest" steps { t: { run: "pytest" } } }
    }
}
infra compile app.infra --target github

Features

  • 11 top-level resource typesservice, database, cache, queue, storage, network, secret, config, pipeline, environment, cluster.
  • 5 compilation targets — Kubernetes (17 resource kinds), Helm charts, Docker Compose, Terraform HCL (AWS/GCP/Azure), GitHub Actions.
  • Compiler-grade validation — 30+ error codes with source locations and actionable hints; invalid configs fail before anything is emitted.
  • Built-in security linter (SEC001–SEC010) and reliability linter (REL001–REL014); Error-severity findings block compilation.
  • A language server — context-aware completion, hover docs, live diagnostics with links and related info, go-to-definition, find-references, workspace symbols, symbol rename, signature help, document highlight, semantic tokens, folding, formatting, and quick-fixes — all across every .infra file on disk.
  • A formatter, REPL, and diff engineinfra fmt, infra repl, and infra diff for reviewing changes.
  • Reusable pieces — template-string interpolation, import with cycle detection, extends inheritance, 25+ stdlib functions and a prelude of shared constants.

Try it in Codespaces

Click the button below to open this project in GitHub Codespaces:

Open in Codespaces

No local installation needed — full dev environment in about 2 minutes (Python 3.12, Docker-in-Docker, kubectl/helm, Ruff/Mypy extensions).

Installation

pip install git+https://github.com/TuviDev/infra-lang.git

With the language server (recommended for VS Code):

pip install 'infra-lang[lsp]'

Verify:

infra --version
infra --help

Note: PyPI publishing is coming soon. Until then, install from Git.

Requirements: Python 3.11+.

Getting started

Full documentation is hosted at TuviDev.github.io/infra-lang.

The fastest path is the 5-minute quickstart. In short:

  1. Write a .infra file (see the demo above).
  2. Validate it: infra validate app.infra
  3. Compile to a target: infra compile app.infra --target kubernetes
  4. Inspect the output in infra-out/, or preview with --dry-run.
  5. Iterate with infra fmt app.infra and infra diff app.infra app2.infra.

There is also a guided tutorial and commented examples.

Supported targets

Target Command What it generates
Kubernetes -t kubernetes Deployments, Services, Ingress, StatefulSets, PVCs, ConfigMaps, Secrets, CronJobs, HPA, PDBs, NetworkPolicies, ResourceQuotas, Namespaces, RBAC, TopologySpreadConstraints
Helm -t helm A complete chart: Chart.yaml, values.yaml, templates/, _helpers.tpl, .helmignore
Docker Compose -t compose docker-compose.yml, .env.example, Makefile
Terraform -t terraform main.tf, variables.tf, outputs.tf, providers.tf (AWS/GCP/Azure)
GitHub Actions -t github .github/workflows/*.yml, dependabot.yml

Not every resource type maps to every target — for example, pipeline compiles only to GitHub Actions, and cluster only to Terraform. See the support matrix for the full mapping.

Documentation

The documentation is hosted at TuviDev.github.io/infra-lang.

Doc What it covers
Quickstart 5-minute first run
Language spec Full DSL reference (blocks, fields, error codes)
Support matrix Which resources map to which targets
LSP / editor support VS Code extension and language server
Known limitations Honest boundaries of the project

Contributing

Contributions are welcome. See CONTRIBUTING.md for how to set up a dev environment, add a backend or a grammar rule, and the coding standards (ruff, mypy). Please read our Security policy before reporting a vulnerability.

License

Licensed under the MIT License.


Infra Lang is inspired by the ideas behind Terraform, Score, and Pulumi: declarative infrastructure that is easy to read and hard to get wrong.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

infra_lang-0.1.0.tar.gz (119.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

infra_lang-0.1.0-py3-none-any.whl (146.6 kB view details)

Uploaded Python 3

File details

Details for the file infra_lang-0.1.0.tar.gz.

File metadata

  • Download URL: infra_lang-0.1.0.tar.gz
  • Upload date:
  • Size: 119.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.9

File hashes

Hashes for infra_lang-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d5f101ae18094455fa2a9ae4ce8ff8105d0ce94061354f9dbb7c5d8b251699f6
MD5 b146726a93de1f582610070af4993b0b
BLAKE2b-256 020fac5a7e311516e8d5e1bf7f628796034bf4c98d8ef2d112aa11794551490e

See more details on using hashes here.

File details

Details for the file infra_lang-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: infra_lang-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 146.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.9

File hashes

Hashes for infra_lang-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4c6b78359c3e5e0e1f70891c45a909349bd0092c14a6e1b8e1104c5107d851c3
MD5 825fce7eb4fd9d4686c92aeb4058110d
BLAKE2b-256 4e2c7b6316accefcc22ec8c431d9776cbcc842dd3c91edd7b5409520e710d69f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page