airflow-3x-migration
Comprehensive guide and patterns for migrating Apache Airflow 2.x workflows to Airflow 3.x, covering import changes, deprecated features, and new paradigms like Asset scheduling and TaskFlow API.
Best use case
airflow-3x-migration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Comprehensive guide and patterns for migrating Apache Airflow 2.x workflows to Airflow 3.x, covering import changes, deprecated features, and new paradigms like Asset scheduling and TaskFlow API.
Teams using airflow-3x-migration should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/airflow-3x-migration/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How airflow-3x-migration Compares
| Feature / Agent | airflow-3x-migration | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Comprehensive guide and patterns for migrating Apache Airflow 2.x workflows to Airflow 3.x, covering import changes, deprecated features, and new paradigms like Asset scheduling and TaskFlow API.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Airflow 3.x Skills
## Import Path Changes
### Operators
```python
# Airflow 2.x
from airflow.operators.python import PythonOperator
# Airflow 3.x
from airflow.providers.standard.operators.python import PythonOperator
from airflow.providers.standard.operators.bash import BashOperator
from airflow.providers.standard.operators.empty import EmptyOperator
```
### Sensors
```python
# Airflow 3.x
from airflow.providers.standard.sensors.filesystem import FileSensor
from airflow.providers.standard.sensors.time import TimeSensor
```
## Removed Features
| Removed | Replacement |
|---------|-------------|
| `SubDagOperator` | `TaskGroup` |
| `packaged_dag_processor` | Use standard DAG loading |
| `airflow.contrib.*` | Provider packages |
| `schedule_interval` param | `schedule` param |
## DAG Definition Changes
```python
# Airflow 3.x preferred
from airflow import DAG
from datetime import datetime
with DAG(
dag_id="my_dag",
schedule="@daily", # Not schedule_interval
start_date=datetime(2024, 1, 1),
catchup=False,
tags=["betting", "sports"],
) as dag:
...
```
## TaskFlow API (Preferred)
```python
from airflow.decorators import dag, task
@dag(schedule="@daily", start_date=datetime(2024, 1, 1), catchup=False)
def betting_workflow():
@task
def download_games(sport: str) -> list:
# Returns are automatically passed via XCom
return fetch_games(sport)
@task
def update_elo(games: list) -> dict:
return calculate_elo(games)
# Chain tasks
games = download_games("nba")
ratings = update_elo(games)
betting_dag = betting_workflow()
```
## Asset-Based Scheduling (Replaces Dataset)
```python
from airflow.sdk import Asset
# Define assets
games_data = Asset("games_data")
elo_ratings = Asset("elo_ratings")
# Producer DAG
@dag(schedule="@daily")
def download_dag():
@task(outlets=[games_data])
def download():
...
# Consumer DAG - triggers when asset updates
@dag(schedule=[games_data])
def process_dag():
@task
def process():
...
```
## Setup/Teardown Tasks
```python
@task
def setup_db_connection():
return create_connection()
@task
def cleanup_connection(conn):
conn.close()
@task
def process_data(conn):
...
# Define setup/teardown relationship
with dag:
conn = setup_db_connection()
process_data(conn) >> cleanup_connection(conn)
# Or use context manager style
conn.as_setup() >> process_data(conn) >> conn.as_teardown()
```
## DAG Versioning
```python
from airflow import DAG
with DAG(
dag_id="betting_workflow",
version="2.0.0", # New in 3.x
schedule="@daily",
) as dag:
...
```
## Backfill Changes
```bash
# Airflow 3.x - use REST API
curl -X POST "http://localhost:8080/api/v1/dags/my_dag/dagRuns" \
-H "Content-Type: application/json" \
-d '{"logical_date": "2024-01-15T00:00:00Z"}'
# Or use new backfill command
airflow dags backfill my_dag --start-date 2024-01-01 --end-date 2024-01-15
```
## New REST API Endpoints
```python
import requests
# Get DAG runs
response = requests.get(
"http://localhost:8080/api/v1/dags/betting_workflow/dagRuns",
auth=("admin", "admin")
)
# Trigger DAG
response = requests.post(
"http://localhost:8080/api/v1/dags/betting_workflow/dagRuns",
json={"conf": {"sport": "nba"}},
auth=("admin", "admin")
)
```
## Edge Labels
```python
from airflow.utils.edgemodifier import Label
download >> Label("success") >> process
download >> Label("failure") >> alert
```
## Migration Checklist
- [ ] Update all operator imports to provider packages
- [ ] Replace `schedule_interval` with `schedule`
- [ ] Convert SubDags to TaskGroups
- [ ] Replace Dataset with Asset
- [ ] Test DAG parsing with `python dags/my_dag.py`
- [ ] Update docker-compose to Airflow 3.x image
## Files to Reference
- `dags/multi_sport_betting_workflow.py` - Already uses 3.x imports
- [Airflow 3.0 Migration Guide](https://airflow.apache.org/docs/apache-airflow/stable/migrations-ref.html)
## Airflow 3.x CLI
- Has changed significantly since Airflow 2.
- Please look at latest docs before running CLI commandsRelated Skills
claude-opus-4-5-migration
Migrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5. Use when the user wants to update their codebase, prompts, or API calls to use Opus 4.5. Handles model string updates and prompt adjustments for known Opus 4.5 behavioral differences. Does NOT migrate Haiku 4.5.
apache-airflow-orchestration
Complete guide for Apache Airflow orchestration including DAGs, operators, sensors, XComs, task dependencies, dynamic workflows, and production deployment
airflow-workflows
Apache Airflow DAG design, operators, and scheduling best practices.
airflow-expert
Expert-level Apache Airflow orchestration, DAGs, operators, sensors, XComs, task dependencies, and scheduling
airflow-etl
Generate Apache Airflow ETL pipelines for government websites and document sources. Explores websites to find downloadable documents, verifies commercial use licenses, and creates complete Airflow DAG assets with daily scheduling. Use when user wants to create ETL pipelines, scrape government documents, or automate document collection workflows.
airflow-dag
Create Apache Airflow DAGs for construction data pipelines. Orchestrate ETL, validation, and reporting workflows.
airflow-dag-patterns
Build production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. Use when creating data pipelines, orchestrating workflows, or scheduling batch jobs.
ahu-airflow
Fan Selection & Airflow Analysis Agent
tuist-migration
Integrates Tuist into an existing iOS project that uses SPM local packages. Use when migrating a project from a manually maintained .xcodeproj to a Tuist-generated project, adding Tuist as an orchestration layer on top of SPM. Covers 8 sequential phases — audit, base structure, helpers, generation, schemes, CI, cache, and validation. Includes automation scripts and AI prompt templates for each phase.
airflow
Python DAG workflow orchestration using Apache Airflow for data pipelines, ETL processes, and scheduled task automation
Schema Migration
Create safe, zero-downtime schema migrations with rollback procedures
Migration Planner
Plan safe, zero-downtime migrations for schemas, services, and infrastructure