Skip to main content

What is AutoAir

AutoAir is a DAG builder for Apache Airflow 3. You design a DAG on a canvas (or in a code editor, or through an AI assistant or MCP agent), and AutoAir stores it as a versioned DAG specification, generates a readable Python DAG file from that specification, validates it with Airflow's own DagBag, and deploys it to the place Airflow reads DAGs from: a local folder, object storage, or a Git repository (directly or as a pull request).

AutoAir is one Python package (autoair, Apache-2.0) with a React frontend shipped inside the wheel. It supports Airflow 3.0 or later, below 4, on Python 3.10 to 3.14. CI covers Airflow 3.0.6, 3.1.8, 3.2.2 and 3.3.2 plus the 3.4.0b2 pre-release, and generated imports follow the target Airflow version. Releases are published to PyPI as autoair and as the container image ghcr.io/ctolon/autoair (the official Airflow image with AutoAir installed).

The AutoAir builder: operator palette on the left, a DAG of connected tasks on the canvas, the inspector on the right and the Problems and Code tabs in the bottom panelThe AutoAir builder: operator palette on the left, a DAG of connected tasks on the canvas, the inspector on the right and the Problems and Code tabs in the bottom panel
The builder: palette, canvas, inspector and bottom panel.

The spec-centric model​

Every DAG built with AutoAir is a JSON document, the DagSpec (spec_version: 3), saved as <dag_id>.autoair.json next to the generated file. Everything else is derived from it:

  • One source of truth. The canvas, the code preview, the validator, the version history, the diff view, reviews and deployment all read the same spec. There is no second model that can drift.
  • Readable output. The default output is an ordinary Python DAG file that uses airflow.sdk and the operator classes you picked. Generated imports follow the target Airflow version. The file carries a header saying it is generated; AutoAir refuses to overwrite a generated file that someone edited by hand unless the deploy is forced.
  • Validation before deploy. Graph rules (cycles, duplicate ids), operator parameters against the installed operator catalog, Jinja templates, organisation policy and an import check in a real DagBag run before anything is written.
  • Deployment is a write to the place Airflow already reads. AutoAir does not run DAGs itself; Airflow's dag-processor picks up the file. Runs, logs and XComs are read back from Airflow's REST API.

The concepts page explains each of these parts in more detail.

Three run modes​

The same package runs in three ways. They share the UI, the API and the settings; they differ in where the server runs and how users authenticate.

ModeCommand / entry pointAuthenticationNeeds an Airflow serverTypical use
Airflow pluginairflow.plugins entry point, loaded by the Airflow API serverAirflow's auth manager (the Airflow UI session)Yes, AutoAir runs inside itTeams that already run Airflow 3 and want the builder in the Airflow UI
Standaloneautoair serveAirflow token verified against Airflow: the Airflow session cookie, username/password exchanged for a token, or a pasted tokenYes, reached over its REST APIRunning AutoAir as its own service, scaled and upgraded separately from Airflow
Localautoair localNone on loopback; optional static tokenNoTrying AutoAir or authoring DAG files on a workstation

Installation overview compares the modes in detail and links to the setup page of each.

What AutoAir is not​

  • Not a scheduler or executor. AutoAir writes DAG files; Airflow schedules and runs them. Triggering, backfill, clearing and the run overlay call Airflow's REST API with the caller's own token.
  • Not a replacement for Airflow's permissions. In plugin and standalone mode every request is authorized by Airflow (per-DAG access stays with Airflow). AutoAir adds its own roles on top for builder actions such as deploy, review and administration; see IAM.
  • Not a closed format. Generated Python is plain Airflow code. You can export a DAG as Python, Airflow YAML, dag-factory YAML or spec JSON at any time and stop using AutoAir.
  • Not a sandbox for untrusted code. Python task bodies, inline functions and script files end up in DAG files that Airflow executes. Restrict them with allow_python_code, features.python_code and the policy settings; see policy.

Feature summary​

AreaWhat you getRead more
CanvasOperator palette for every installed provider and custom operator, task groups, notes, command palette, copy/paste, auto layout, undo/redoCanvas, Shortcuts
Code modeEdit the generated file and apply it back into the specCode mode
EditorsJinja-aware template fields, XCom drag-to-map, Python and shell completion, Markdown docsEditors, Jinja, XCom and Python
TaskFlow@task and its variants, dynamic task mapping, task loops (Airflow 3.4)TaskFlow and loops
SchedulingPresets, cron, intervals, events, asset and asset-or-time schedules, partitions, with a next-runs previewScheduling and assets
ValidationLive problems that jump to the field, import check in Airflow's DagBagValidation
DeployLocal folder, object storage or Git (push or pull request on GitHub, GitLab, Bitbucket, Azure DevOps, Gitea/Forgejo or any remote through the git CLI), ETag locking and three-way mergeDeploy
GovernanceReviews and four-eyes approvals, organisation policy, audit trailReviews and approvals, Audit
RunsTrigger, backfill, clear; run states, logs and XComs on the canvasRuns
Environmentsdev/staging/prod overlays and promotionEnvironments
CollaborationLive co-editing with presence and per-user undoCollaboration
ReuseTemplates, fragments, operator templates, signed marketplacesTemplates and fragments, Marketplace
AIGenerate and edit DAGs, explain problems, write docs; MCP server for agentsAI introduction, MCP
OperationsHealth, readiness and Prometheus endpoints, OpenTelemetry, PostgreSQL state for several replicasObservability, Scaling
ExtendingCustom operators, catalog sources, node SDK, REST APIExtending, REST API

Who it is for​

  • Data and analytics engineers who know what their pipeline should do but do not want to hand-write Airflow boilerplate, and who still want reviewable Python in Git.
  • Platform teams that run Airflow 3 for many users and need guard rails: policy rules, operator allow and deny lists, reviews before deploy, and an audit trail.
  • Airflow developers who want fast feedback (parameter types, Jinja completion, live DagBag validation) and can switch to code mode at any time.
  • Agent builders who want an AI assistant or an MCP client to author DAGs through the same validated path as humans.

Next steps​

  1. Quick start: run AutoAir in a few minutes.
  2. Build your first DAG: a step-by-step tutorial.
  3. Concepts: the model behind the UI.
  4. Installation: choose a mode for a real deployment.