diff --git a/CORE_TEAM_GUIDE.md b/CORE_TEAM_GUIDE.md
index 9eb91f4e586..a093788fc81 100644
--- a/CORE_TEAM_GUIDE.md
+++ b/CORE_TEAM_GUIDE.md
@@ -271,8 +271,7 @@ resources such as:
[NumPy documentation guide](https://numpy.org/devdocs/dev/howto-docs.html#documentation-style)
for docstring conventions.
- [`pre-commit`](https://pre-commit.com) hooks for autoformatting.
-- [`black`](https://github.com/psf/black) autoformatting.
-- [`flake8`](https://github.com/PyCQA/flake8) linting.
+- [`ruff`](https://github.com/astral-sh/ruff) autoformatting and linting.
- [python-xarray](https://stackoverflow.com/questions/tagged/python-xarray) on Stack Overflow.
- [@xarray_dev](https://twitter.com/xarray_dev) on Twitter.
- [xarray-dev](https://discord.gg/bsSGdwBn) discord community (normally only used for remote synchronous chat during sprints).
diff --git a/ci/min_deps_check.py b/ci/min_deps_check.py
index 7690ab41652..8e09bb1eb90 100755
--- a/ci/min_deps_check.py
+++ b/ci/min_deps_check.py
@@ -17,7 +17,6 @@
CHANNELS = ["conda-forge", "defaults"]
IGNORE_DEPS = {
- "black",
"coveralls",
"flake8",
"hypothesis",
diff --git a/ci/requirements/all-but-dask.yml b/ci/requirements/all-but-dask.yml
index 2f47643cc87..1b6db04671f 100644
--- a/ci/requirements/all-but-dask.yml
+++ b/ci/requirements/all-but-dask.yml
@@ -3,7 +3,6 @@ channels:
- conda-forge
- nodefaults
dependencies:
- - black
- aiobotocore
- array-api-strict
- boto3
diff --git a/doc/contributing.rst b/doc/contributing.rst
index c3dc484f4c1..5f943e82558 100644
--- a/doc/contributing.rst
+++ b/doc/contributing.rst
@@ -549,11 +549,7 @@ Code Formatting
xarray uses several tools to ensure a consistent code format throughout the project:
-- `Black `_ for standardized
- code formatting,
-- `blackdoc `_ for
- standardized code formatting in documentation,
-- `ruff `_ for code quality checks and standardized order in imports
+- `ruff `_ for formatting, code quality checks and standardized order in imports
- `absolufy-imports `_ for absolute instead of relative imports from different files,
- `mypy `_ for static type checking on `type hints
`_.
@@ -1069,7 +1065,7 @@ PR checklist
- Test the code using `Pytest `_. Running all tests (type ``pytest`` in the root directory) takes a while, so feel free to only run the tests you think are needed based on your PR (example: ``pytest xarray/tests/test_dataarray.py``). CI will catch any failing tests.
- By default, the upstream dev CI is disabled on pull request and push events. You can override this behavior per commit by adding a ``[test-upstream]`` tag to the first line of the commit message. For documentation-only commits, you can skip the CI per commit by adding a ``[skip-ci]`` tag to the first line of the commit message.
-- **Properly format your code** and verify that it passes the formatting guidelines set by `Black `_ and `Flake8 `_. See `"Code formatting" `_. You can use `pre-commit `_ to run these automatically on each commit.
+- **Properly format your code** and verify that it passes the formatting guidelines set by `ruff `_. See `"Code formatting" `_. You can use `pre-commit `_ to run these automatically on each commit.
- Run ``pre-commit run --all-files`` in the root directory. This may modify some files. Confirm and commit any formatting changes.
diff --git a/pyproject.toml b/pyproject.toml
index c23d12ffba1..8dad98444ac 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -233,7 +233,7 @@ extend-exclude = [
[tool.ruff.lint]
# E402: module level import not at top of file
-# E501: line too long - let black worry about that
+# E501: line too long - let the formatter worry about that
# E731: do not assign a lambda expression, use a def
extend-safe-fixes = [
"TID252", # absolute imports