Quick Start
Install Airflow on your machine and start it with airflow standalone, which runs the scheduler, Dag
processor, triggerer and API server together on a SQLite database. Use it to try Airflow and to develop
Dags locally, not in production. For other ways to install and run Airflow, see Installation of Airflow®.
Before you start
You need a Python version that this Airflow release supports; see Prerequisites.
On Windows, set up WSL2 first: run wsl --install in PowerShell as administrator and restart, as described
in Install WSL. Then run every command below in
the Ubuntu terminal that WSL2 installs.
Install Airflow
Create a virtual environment and install Airflow into it with the constraints file, which pins every dependency to the version this release was tested with. A later release of a dependency then does not change what you install.
If you do not have uv yet, install it from the uv installation guide. Then create the virtual environment and install Airflow:
uv venv
source .venv/bin/activate
AIRFLOW_VERSION=3.4.0
PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
uv pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
uv venv uses a Python it finds on your machine. To choose a supported version instead, pass it
with --python, and uv downloads it if it is missing.
On Debian and Ubuntu, including WSL2, install the venv module first with
sudo apt update && sudo apt install python3-venv. Without it, python3 -m venv fails with
The virtual environment was not created successfully because ensurepip is not available.
Then create the virtual environment and install Airflow:
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
AIRFLOW_VERSION=3.4.0
PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
If the virtual environment’s Python is a version this release does not support, no constraints file exists for
it and the install stops at the constraints URL. pip reports ERROR: 404 Client Error: Not Found for url:
and uv reports error: Error while accessing remote requirements file:, each followed by the URL. Recreate
the virtual environment with a supported Python.
Start Airflow
With the virtual environment activated, start every component with one command:
airflow standalone
On the first run, Airflow creates ~/airflow with its configuration file airflow.cfg and a SQLite
database, and generates a password for the admin user. The password appears near the start of the
output. Once the API server, scheduler, Dag processor and triggerer are all running, Airflow prints a ready
banner. The components’ logs fill the lines in between:
standalone | Starting Airflow Standalone
[warning ] SimpleAuthManager is active but the deployment shape looks like production (non-sqlite backend, non-local API host, or a distributed executor). ...
Simple auth manager | Password for user 'admin': <generated-password>
...
standalone | Airflow is ready
standalone | Airflow Standalone is for development purposes only. Do not use this in production!
The SimpleAuthManager is active but the deployment shape looks like production warning is expected for a
local standalone run: the API server listens on 0.0.0.0 by default, which the warning treats as a
non-local host.
Press Ctrl+C to stop every component.
Airflow keeps its files in ~/airflow unless you set AIRFLOW_HOME. If you set it, export the same value
in every terminal before you run airflow: a terminal without it uses ~/airflow, with a separate
database and password. To start Airflow again later, open a terminal in the directory where you created the
virtual environment, run source .venv/bin/activate, then airflow standalone.
Log in and run a Dag
Open http://localhost:8080 and log in as admin with the password from the
Password for user 'admin' line. Airflow prints that line only on the first run; later runs print a line
saying the password was previously generated, with the path of the file that holds it. To read the file:
cat "${AIRFLOW_HOME:-$HOME/airflow}/simple_auth_manager_passwords.json.generated"
It maps each user to their password:
{"admin": "<generated-password>"}
Airflow loads a set of example Dags, all paused. Open Dags, find example_bash_operator, and switch on
its toggle to unpause it. The scheduler starts a run within a few seconds; click the Dag name to follow its
tasks.
What’s next
Tutorials to write your first Dag
Installation from PyPI for extras, providers, and how constraints files work
Configuration Reference for the settings in
airflow.cfgStarting components separately to run the API server, scheduler, Dag processor, and triggerer as separate processes
Running Airflow in Docker or Helm Chart for Apache Airflow for container and Kubernetes setups
Production Deployment when you move beyond standalone
How-to Guides for common configuration tasks