diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 88f834050b61..1385d405a20f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -167,6 +167,12 @@ repos:
\.cfg$|\.conf$|\.ini$|\.ldif$|\.properties$|\.readthedocs$|\.service$|\.tf$|Dockerfile.*$
- repo: local
hooks:
+ - id: check-min-python-version
+ name: Check minimum Python version
+ entry: ./scripts/ci/pre_commit/check_min_python_version.py
+ language: python
+ additional_dependencies: ['rich>=12.4.4']
+ require_serial: true
- id: update-common-sql-api-stubs
name: Check and update common.sql API stubs
entry: ./scripts/ci/pre_commit/update_common_sql_api_stubs.py
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index b122b3486756..211ee7c9c34d 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -196,6 +196,8 @@ require Breeze Docker image to be built locally.
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
| check-merge-conflict | Check that merge conflicts are not being committed | |
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
+| check-min-python-version | Check minimum Python version | |
++-----------------------------------------------------------+--------------------------------------------------------------+---------+
| check-newsfragments-are-valid | Check newsfragments are valid | |
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
| check-no-airflow-deprecation-in-providers | Do not use DeprecationWarning in providers | |
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index 5888d1fc862e..08d3dc2a13ee 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -298,53 +298,53 @@
Usage:breeze[OPTIONS] COMMAND [ARGS]...╭─ Execution mode ─────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--python-pPython major/minor version used in Airflow image for images.│
+│--python-pPython major/minor version used in Airflow image for images.││(>3.8< | 3.9 | 3.10 | 3.11 | 3.12) ││[default: 3.8] │
-│--integrationIntegration(s) to enable when running (can be more than one). │
+│--integrationIntegration(s) to enable when running (can be more than one). ││(all | all-testable | cassandra | celery | drill | kafka | kerberos | mongo | mssql ││| openlineage | otel | pinot | qdrant | redis | statsd | trino | ydb) │
-│--standalone-dag-processorRun standalone dag processor for start-airflow.│
-│--database-isolationRun airflow in database isolation mode.│
+│--standalone-dag-processorRun standalone dag processor for start-airflow.│
+│--database-isolationRun airflow in database isolation mode.│╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Docker Compose selection and cleanup ───────────────────────────────────────────────────────────────────────────────╮
-│--project-nameName of the docker-compose project to bring down. The `docker-compose` is for legacy breeze │
-│project name and you can use `breeze down --project-name docker-compose` to stop all containers │
+│--project-nameName of the docker-compose project to bring down. The `docker-compose` is for legacy breeze │
+│project name and you can use `breeze down --project-name docker-compose` to stop all containers ││belonging to it. ││(breeze | pre-commit | docker-compose) ││[default: breeze] │
-│--docker-hostOptional - docker host to use when running docker commands. When set, the `--builder` option is │
+│--docker-hostOptional - docker host to use when running docker commands. When set, the `--builder` option is ││ignored when building images. ││(TEXT) │╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Database ───────────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--backend-bDatabase backend to use. If 'none' is chosen, Breeze will start with an invalid database │
+│--backend-bDatabase backend to use. If 'none' is chosen, Breeze will start with an invalid database ││configuration, meaning there will be no database available, and any attempts to connect to ││the Airflow database will fail. ││(>sqlite< | mysql | postgres | none) ││[default: sqlite] │
-│--postgres-version-PVersion of Postgres used.(>12< | 13 | 14 | 15 | 16)[default: 12]│
-│--mysql-version-MVersion of MySQL used.(>8.0< | 8.4)[default: 8.0]│
-│--db-reset-dReset DB when entering the container.│
+│--postgres-version-PVersion of Postgres used.(>12< | 13 | 14 | 15 | 16)[default: 12]│
+│--mysql-version-MVersion of MySQL used.(>8.0< | 8.4)[default: 8.0]│
+│--db-reset-dReset DB when entering the container.│╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Build CI image (before entering shell) ─────────────────────────────────────────────────────────────────────────────╮
-│--github-repository-gGitHub repository used to pull, push run images.(TEXT)[default: apache/airflow]│
-│--builderBuildx builder used to perform `docker buildx build` commands.(TEXT)│
+│--github-repository-gGitHub repository used to pull, push run images.(TEXT)[default: apache/airflow]│
+│--builderBuildx builder used to perform `docker buildx build` commands.(TEXT)││[default: autodetect] │
-│--use-uv/--no-use-uvUse uv instead of pip as packaging tool to build the image.[default: use-uv]│
-│--uv-http-timeoutTimeout for requests that UV makes (only used in case of UV builds).(INTEGER RANGE)│
+│--use-uv/--no-use-uvUse uv instead of pip as packaging tool to build the image.[default: use-uv]│
+│--uv-http-timeoutTimeout for requests that UV makes (only used in case of UV builds).(INTEGER RANGE)││[default: 300; x>=1] │╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Other options ──────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--forward-credentials-fForward local credentials to container when running.│
-│--max-timeMaximum time that the command should take - if it takes longer, the command will fail.│
+│--forward-credentials-fForward local credentials to container when running.│
+│--max-timeMaximum time that the command should take - if it takes longer, the command will fail.││(INTEGER RANGE) │╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮
-│--answer-aForce answer to questions.(y | n | q | yes | no | quit)│
-│--dry-run-DIf dry-run is set, commands are only printed, not executed.│
-│--verbose-vPrint verbose information about performed steps.│
-│--help-hShow this message and exit.│
+│--answer-aForce answer to questions.(y | n | q | yes | no | quit)│
+│--dry-run-DIf dry-run is set, commands are only printed, not executed.│
+│--verbose-vPrint verbose information about performed steps.│
+│--help-hShow this message and exit.│╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯╭─ Developer commands ─────────────────────────────────────────────────────────────────────────────────────────────────╮│start-airflow Enter breeze environment and starts all Airflow components in the tmux session. Compile │
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index de796de4e07b..d8f715c4b856 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -1,4 +1,4 @@
-