Airframe
Generate production-ready Airflow DAGs from battle-tested templates.
Airframe is a CLI tool that generates complete, deployable Airflow DAGs from Jinja2 templates — not just code skeletons, but the full working system with connections, retry policies, observability hooks, and optional Terraform infrastructure for self-hosted Airflow on Linode.
Quick Start
pip install xtremedp-airframe
# Initialize a project
airframe init
# Generate a DAG from a template
airframe generate postgres-cdc --dag-id orders_cdc --table orders --schedule "@hourly"
# List available templates
airframe list-templates
# Deploy Airflow infrastructure (requires Terraform + Linode token)
airframe deploy
# Check version and environment
airframe version
airframe info
Commands
airframe init
Scaffolds a new airframe project in the current directory:
dags/— generated DAG filestests/— DAG testsairframe.yaml— project configuration.gitignore
airframe generate <template>
Generates a DAG file from a template. Reads defaults from airframe.yaml,
overrides with CLI flags:
airframe generate postgres-cdc \
--dag-id orders_cdc \
--table orders \
--schedule "@hourly" \
--batch-size 2000 \
--source-conn source_postgres \
--warehouse-conn warehouse_conn
airframe list-templates
Shows available templates with pricing.
airframe deploy
Runs Terraform to deploy self-hosted Airflow on Linode. Requires Terraform installed and Linode API token configured.
airframe version
Prints the installed airframe version.
airframe info
Shows version, Python version, project config (if airframe.yaml exists),
and available templates with pricing.
Examples
See the examples/ directory for generated DAGs from every template:
airframe generate data-quality --dag-id dq_validation
airframe generate postgres-cdc --dag-id orders_cdc --table orders
airframe generate api-to-warehouse --dag-id orders_api_sync --endpoint /api/v1/orders
Templates
| Template | Description | Price |
|---|---|---|
data-quality |
Standalone DQ validation: row count, null, uniqueness, completeness | Free |
file-batch-ingest |
S3/file batch ingest → warehouse with upsert + validation | $29 |
postgres-cdc |
Postgres CDC → warehouse (Centene pattern) | $49 |
api-to-warehouse |
REST API → warehouse with pagination + upsert | $99 |
multi-source-elt |
Multi-source ELT: Postgres CDC + API → merge → transform → warehouse | $149 |
dbt-runner |
dbt transformation pipeline: deps → freshness → run → test → docs | $99 |
| More coming soon |
Configuration
airframe.yaml stores project defaults:
project_name: my-pipelines
owner: airframe
schedule: "@daily"
start_date: "2025-01-01"
catchup: false
retries: 1
retry_delay_minutes: 5
tags:
- airframe
output_dir: dags
Development
git clone <repo-url>
cd airframe
uv pip install -e ".[dev]"
pytest
Architecture
src/airframe/
├── cli/main.py — Typer CLI (init, generate, list-templates, deploy)
├── config.py — ProjectConfig (Pydantic, airframe.yaml schema)
├── templates/
│ ├── __init__.py — TemplateConfig, render_template(), template registry
│ ├── data_quality.py.j2 — Standalone DQ validation template (Free)
│ ├── file_batch_ingest.py.j2 — S3 batch ingest template ($29)
│ ├── postgres_cdc.py.j2 — Postgres CDC DAG template ($49)
│ ├── api_to_warehouse.py.j2 — REST API → warehouse template ($99)
│ ├── multi_source_elt.py.j2 — Multi-source ELT template ($149)
│ └── dag_test.py.j2 — Generated DAG test template
terraform/airflow/
├── main.tf — Linode instance, firewall, DNS
├── variables.tf — Configurable inputs
├── outputs.tf — Airflow URL, IP, SSH command
└── install.sh — StackScript provisioning
License
The CLI and free data-quality template are MIT-licensed. Paid template packs are sold separately under a commercial license — see MARKETING.md for purchasing.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xtremedp_airframe-0.1.0.tar.gz.
File metadata
- Download URL: xtremedp_airframe-0.1.0.tar.gz
- Upload date:
- Size: 24.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b2e65868127254483f93e48867eee8c8d4f4e61ab9dbe4051d6477a86f3229f
|
|
| MD5 |
69d6875b1a9ae4c314758e7aff026c85
|
|
| BLAKE2b-256 |
e9280f444afe9baab409fa8fc3df3d957bfb50e21b0b4e847ccfdf91fe01589a
|
Provenance
The following attestation bundles were made for xtremedp_airframe-0.1.0.tar.gz:
Publisher:
ci.yml on ochsec/airframe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xtremedp_airframe-0.1.0.tar.gz -
Subject digest:
5b2e65868127254483f93e48867eee8c8d4f4e61ab9dbe4051d6477a86f3229f - Sigstore transparency entry: 2254612387
- Sigstore integration time:
-
Permalink:
ochsec/airframe@05d552c66fa7eea69405c415561838451b7ccfd5 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ochsec
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@05d552c66fa7eea69405c415561838451b7ccfd5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file xtremedp_airframe-0.1.0-py3-none-any.whl.
File metadata
- Download URL: xtremedp_airframe-0.1.0-py3-none-any.whl
- Upload date:
- Size: 33.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b95957b807592de9bbae09c1771de19947e65fd027c8359e569dc223062fb06f
|
|
| MD5 |
b3d33443764b174dc87a4e2db8f1affc
|
|
| BLAKE2b-256 |
162f1130511e079e8ff6d933683b20a47aa3e54a24263933fcbdd0b5f87da8b6
|
Provenance
The following attestation bundles were made for xtremedp_airframe-0.1.0-py3-none-any.whl:
Publisher:
ci.yml on ochsec/airframe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xtremedp_airframe-0.1.0-py3-none-any.whl -
Subject digest:
b95957b807592de9bbae09c1771de19947e65fd027c8359e569dc223062fb06f - Sigstore transparency entry: 2254612422
- Sigstore integration time:
-
Permalink:
ochsec/airframe@05d552c66fa7eea69405c415561838451b7ccfd5 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ochsec
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@05d552c66fa7eea69405c415561838451b7ccfd5 -
Trigger Event:
push
-
Statement type: