For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
      • AstroFully-managed data operations, powered by Apache Airflow.
      • Astro Private CloudRun Airflow-as-a-service in your environment.
      • Professional ServicesExpert Airflow services for your enterprise's success.
    • Tools
      • Cosmos
      • Orbiter
      • CLI
      • AI SDK
      • Agents
      • Blueprint
      • UpdatesThe State of Airflow 2026See the insights from over 5,800 data practitioners in the full report. Download Now ➔
  • Customers
  • Docs
    • Insights
      • Blog
      • Webinars
      • Resource Library
      • Events
    • Education
      • Academy
      • What is Airflow?
  • Pricing
Get Started Free
    • Overview
      • Features
      • Upgrade to Airflow 3 on Astro
    • Book Office Hours

Product

  • Platform Overview
  • Astro
  • Astro Observe
  • Astro Private Cloud
  • Security & Trust
  • Pricing

Tools & Services

  • Cosmos
  • Docs
  • Professional Services
  • Product Updates

Use Cases

  • AI Ops
  • Data Observability
  • ETL/ELT
  • ML Ops
  • Operational Analytics
  • All Use Cases

Industries

  • Financial Services
  • Gaming
  • Retail
  • Manufacturing
  • Healthcare
  • All Industries

Resources

  • Academy
  • eBooks & Guides
  • Blog
  • Webinars
  • Events
  • The Data Flowcast Podcast
  • All Resources

Airflow

  • What is Airflow
  • Airflow on Astro
  • Airflow 3.0
  • Airflow Upgrades
  • Airflow Use Cases
  • Airflow 2.x End of Life

Company

  • Our Story
  • Customers
  • Newsroom
  • Careers
  • Contact

Support

  • Knowledge Base
  • Status
  • Contact Support
GitHubYouTubeLinkedInx
  • Legal
  • Privacy
  • Terms of Service
  • Consent Preferences

  • Do Not Sell or Share My Personal information
  • Limit the Use Of My Sensitive Personal Information

Apache Airflow®, Airflow, and the Airflow logo are trademarks of the Apache Software Foundation. Copyright © Astronomer 2026. All rights reserved.

LogoLogo
On this page
  • Prerequisites
  • Step 1: Prepare your local project for Airflow 3
  • Upgrade test your local project
  • Run unit tests
  • Run your project locally
  • Step 2: Choose your upgrade strategy
  • Strategy A
  • Strategy B
  • Step 3A: Upgrade to Airflow 3 with a new Deployment
  • 1. Create a new Airflow 3 Deployment
  • 2. Deploy to your new Airflow 3 Deployment
  • 3. Migrate your workflows
  • Step 3B: Upgrade an existing Deployment to Airflow 3
  • Upgrade your Airflow 2 Deployment to Airflow 3
  • Step 4: Update your workload identity policy bindings
  • Troubleshoot common issues
  • Pip package resolution
  • Docker Compose override changes
  • Dags folder location change
  • PYTHONPATH doesn’t include the Dags folder
  • Airflow 3 to Airflow 2 rollback support and requirements
Airflow 3

Upgrade an Astro project to Airflow 3

Edit this page
Built with

This guide provides steps to upgrade your Astro project from Apache Airflow 2 to Apache Airflow 3.

For more information on breaking changes between Airflow 2 and Airflow 3, as well as configuration linting, see the Upgrade from Apache Airflow® 2 to 3 Learn guide and the Airflow 3 Release Notes.

To upgrade to Airflow 3, your Deployment must first run Astro Runtime 12.x or 13.x, and you must upgrade to the latest available patch version of the Airflow 3–based Runtime.

Prerequisites

  • An Astro account with user permissions to create a new Deployment, such as Workspace Operator or Deployment Admin
  • An existing Astro Deployment running Airflow 2.x
  • Astro CLI >=1.34.0 installed on your local computer
  • Your Astro project folder

Step 1: Prepare your local project for Airflow 3

Before upgrading to Airflow 3, you must test your Dags and dependencies locally to identify and resolve any compatibility issues.

Astro Runtime for 3.0 and higher includes only the provider packages required to run on Astro. Previous versions contained additional providers, and if you are using those providers you must explicitly add them to your requirements.txt.

Follow these steps to prepare your local project:

Upgrade test your local project

Test your project locally to identify any compatibility issues:

$astro dev upgrade-test

Use the results of this test to identify compatibility issues. Address any compatibility issues by updating your Dags, custom operators, and dependencies. Common changes include:

  • Updating import paths that have changed in Airflow 3
  • Replacing deprecated features with their recommended alternatives
  • Updating Airflow providers to versions compatible with Airflow 3 — see minimum provider versions required for Airflow 3

Run unit tests

In your local Astro project, update the Dockerfile to use an Airflow 3 image:

1FROM astrocrpublic.azurecr.io/runtime:<astro-runtime-version>

Next, run the following to execute any unit tests:

$astro dev pytest

For more information, see testing your Astro project locally.

Replace <astro-runtime-version> with the specific Astro Runtime version that includes Airflow 3.x that you want to use.

Run your project locally

For a final check and to test Dags manually, start Airflow locally:

$astro dev start

Refer to the docs on local Airflow development to make and test any changes.

Step 2: Choose your upgrade strategy

There are two supported upgrade strategies for Airflow 3. Choose the approach that fits your operational needs and workflow requirements.

Strategy A

  1. Create a new Airflow 3 Deployment in Astro.
  2. Update your local project to use an Airflow 3 image.
  3. Deploy your updated project to the new Deployment.

Pros:

  • Lower affected area; you can test your Dags without affecting production.
  • Gradual, controlled migration of workflows.
  • Easy rollback; you can switch back to your Airflow 2 Deployment until decommissioned.

Cons:

  • No migration of historical task data.
  • Slightly higher resource usage and cost while running both Deployments during migration.

To continue with this strategy, proceed to Step 3A.

Strategy B

  1. Prepare and test your Dags on Airflow 3 locally.
  2. Make an Airflow 3 deploy against your Airflow 2 Deployment, initiating an upgrade.

Pros:

  • Preserves historical task data and metadata.
  • No need for extra or temporary Deployments.

Cons:

  • Higher affected area; all Dags must be compatible at once.
  • Immediate production impact if issues arise.
  • Rollbacks from Airflow 3 to Airflow 2 are temporarily unavailable. See Airflow 3 to Airflow 2 rollback support and requirements.

Astronomer recommends running the metadata database cleanup DAG before you upgrade. In-place upgrades require a database migration that can take several hours for Deployments with large amounts of task history. Cleaning up old metadata before the upgrade significantly reduces migration time and the risk of issues during the upgrade process.

To continue with this strategy, move to Step 3B.

Step 3A: Upgrade to Airflow 3 with a new Deployment

1. Create a new Airflow 3 Deployment

  1. In the Astro UI, go to the Deployments tab and click New Deployment.
  2. Ensure the latest Airflow 3 Runtime is selected.
  3. Configure your Deployment settings and complete the creation process.
  4. Note your new Deployment ID for later use.

For more information, see Create a new Deployment.

2. Deploy to your new Airflow 3 Deployment

Deploy your updated project:

$astro deploy <your-new-deployment-id>

For additional customization, refer to docs on deploying Astro project images.

Verify that your Dags are running correctly in the new environment.

3. Migrate your workflows

  1. Update any CI/CD pipelines to deploy to your new Airflow 3 Deployment.
  2. Redirect any integrations or external systems to use your new Deployment.
  3. After you’ve confirmed everything is working correctly, you can decommission your Airflow 2 Deployment.

Step 3B: Upgrade an existing Deployment to Airflow 3

Upgrade your Airflow 2 Deployment to Airflow 3

Airflow 3 to Airflow 2 rollbacks are temporarily unavailable. Astronomer has identified edge cases that prevent the scheduler and triggerer from starting after rollback. Contact Astro support if you need to roll back a Deployment.

When rollbacks are restored, they require that:

  • Your Deployment was on Astro Runtime 12.x or 13.x before upgrading.
  • Your Deployment is on Astro Runtime 3.0-11 or later after upgrading to Airflow 3.

Review the Airflow 3 to Airflow 2 rollback support and requirements before proceeding with this upgrade.

Upgrades can take several hours to complete, especially for Deployments that are more than six months old or have a large amount of task history. Astronomer recommends running the metadata database cleanup DAG before you upgrade to reduce migration time and risk. Contact Astro support if you have concerns or questions about the progress of the upgrade.

Deploy your updated project:

$astro deploy

Step 4: Update your workload identity policy bindings

This step is applicable for Deployments configured with Customer Managed Workload identity.

  • Update the Workload Identity configuration on the Deployment Details page. Re-enter the same IAM role (ARN/service account email/service principal) you were previously using. This step ensures your IAM role bindings are updated from the Webserver service account to the newly added API Server service account in Airflow 3, which is referenced in the upcoming setup script.
  • When prompted, provide your IAM role ARN/service account email/service principal details. Copy and run the CLI command that is generated. After running it, click Save Configuration to store the IAM role so it can be reused as a selectable configuration.

Troubleshoot common issues

Pip package resolution

With Runtime 3.0, Python package resolution has switched by default from pip to uv, which is intended as a fast drop in replacement for pip. However, uv has a different behavior for packages that exist on multiple indexes, because pip’s behavior is unsafe against dependency confusion attacks. If you rely on the pip behavior, you can add # ASTRO_RUNTIME_USE_PIP to your requirements.txt file to use pip instead of uv. You can also opt to install your dependencies in a separate RUN line on your Dockerfile instead of using Runtime’s built-in pip installation.

Docker Compose override changes

When using astro dev start, you can specify a docker-compose.override.yml file. If you specified any overrides for the webserver container in your override file for Airflow 2, these break your ability to use astro dev start because there is no longer a webserver container in Airflow 3. Replace all references to webserver with api-server.

Dags folder location change

On Airflow 2, the dags/ folder is located at /usr/local/airflow/dags, but with the addition of Dag versioning in Airflow 3, you can no longer be sure of the exact path of the relevant Dags folder. Instead of using this hardcoded path or the AIRFLOW_HOME environment variable, use paths relative to the current file using the Python keyword file. Note also that because Dag bundling is not enabled when using astro dev start, you don’t find errors from this folder location change until your code is deployed to Astro.

For example, if you use the AIRFLOW_HOME variable to open a file in your Dags folder like the following code example, it breaks in Airflow 3:

1open(f"{AIRFLOW_HOME}/dags/path/to/file.txt", "r")

PYTHONPATH doesn’t include the Dags folder

On Astro with Airflow 3, the dags/ folder isn’t on the PYTHONPATH, and you can’t customize the PYTHONPATH to include the dags/ folder or any other folders. This is a consequence of Dag versioning and Dag bundles in Airflow 3, where the exact path of the Dags folder isn’t fixed at runtime. Setting PYTHONPATH in your Dockerfile or as an environment variable has no effect on Astro.

If your Airflow 2 Dags imported modules directly from the dags/ folder using an import like from my_utils import helper, where my_utils.py lives in dags/, these imports break on Airflow 3. Imports that include the dags. prefix, such as from dags.my_utils import helper, continue to work.

Astronomer recommends that you move shared modules out of the dags/ folder and into the include/ folder, which remains on the PYTHONPATH, then update your imports. For example:

1from include.my_utils import helper

If you want to keep helper files in the dags/ folder, for example, to avoid an image deploy when you change helper code, update your imports to use the dags. prefix:

1from dags.my_utils import helper

See Manage Airflow code for the recommended project structure.

Airflow 3 to Airflow 2 rollback support and requirements

Airflow 3 to Airflow 2 rollbacks are temporarily unavailable. Astronomer has identified edge cases that prevent the scheduler and triggerer from starting after rollback. Contact Astro support if you need to roll back a Deployment.

Astro supports rolling back from Airflow 3 to Airflow 2 but not all Airflow 3.x Deployments can be reverted to all Airflow 2.x versions.

  • You can only roll back to Airflow 2.10 or 2.11, which run on Astro Runtime 12.x or 13.x.
  • Rollback to Airflow 2.10 or 2.11 is only possible if your Deployment is running an Airflow 3 version that includes rollback support: Runtime versions 3.0-11, or later.
Airflow 3 to Airflow 2 rollbacks take longer than same-version rollbacks.