diff --git a/.copier-answers.yml b/.copier-answers.yml
index 0b2e6185a2f94fedd0701542f2212ba2bb962106..db51fbf9e83624e6c52cbdf2bf776bb4a677ae79 100644
--- a/.copier-answers.yml
+++ b/.copier-answers.yml
@@ -1,5 +1,5 @@
 # Changes here will be overwritten by Copier
-_commit: v0.2.0
+_commit: v0.2.3
 _src_path: https://gitlab.softwareheritage.org/swh/devel/swh-py-template.git
 description: Software Heritage core and package loaders
 distribution_name: swh-loader-core
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9de2dca820620df47f206ee1f54dbffc78a09290..6f3820daa9767036dd4a3ef62f71e51eed96cc3c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,29 +1,29 @@
 repos:
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.4.0
+    rev: v4.6.0
     hooks:
       - id: trailing-whitespace
       - id: check-json
       - id: check-yaml
 
   - repo: https://github.com/python/black
-    rev: 23.1.0
+    rev: 24.8.0
     hooks:
       - id: black
 
   - repo: https://github.com/PyCQA/isort
-    rev: 5.12.0
+    rev: 5.13.2
     hooks:
       - id: isort
 
   - repo: https://github.com/pycqa/flake8
-    rev: 6.0.0
+    rev: 7.1.1
     hooks:
       - id: flake8
-        additional_dependencies: [flake8-bugbear==22.9.23]
+        additional_dependencies: [flake8-bugbear==24.4.26]
 
   - repo: https://github.com/codespell-project/codespell
-    rev: v2.2.2
+    rev: v2.3.0
     hooks:
       - id: codespell
         name: Check source code spelling
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 0ad22b51e38e1a3dc2792766db295fca2892142f..6e2dee929af68f2187dbdadc16fe2028fcfe9dfc 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -6,7 +6,7 @@ In the interest of fostering an open and welcoming environment, we as Software
 Heritage contributors and maintainers pledge to making participation in our
 project and our community a harassment-free experience for everyone, regardless
 of age, body size, disability, ethnicity, sex characteristics, gender identity
-and expression, level of experience, education, socio-economic status,
+and expression, level of experience, education, socioeconomic status,
 nationality, personal appearance, race, religion, or sexual identity and
 orientation.
 
diff --git a/pyproject.toml b/pyproject.toml
index f399895fd1950397fe2022ab960b3a5e1c689ec5..87102c362571180b698e4745f36ff72b5d7ace3d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -69,7 +69,7 @@ build-backend = "setuptools.build_meta"
 fallback_version = "0.0.1"
 
 [tool.black]
-target-version = ['py37']
+target-version = ['py39', 'py310', 'py311', 'py312']
 
 [tool.isort]
 multi_line_output = 3
diff --git a/setup.cfg b/setup.cfg
index 2c446b475ceea8a1105c2d161d12b40caa2a20b9..adf9af3e48c7da13135e5dfb6505a1909bc26066 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -4,5 +4,5 @@
 # E501: line too long, use B950 warning from flake8-bugbear instead
 # W503: line break before binary operator <https://github.com/psf/black/issues/52>
 select = C,E,F,W,B950
-ignore = E203,E231,E501,W503
+ignore = E203,E231,E501,E704,W503
 max-line-length = 88
diff --git a/tox.ini b/tox.ini
index 5c7e152e0ec149d745285e6e3890714f01f74d38..fb336e1195907f950ea873f2dbc269d2190d59e7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -26,16 +26,16 @@ commands =
 [testenv:black]
 skip_install = true
 deps =
-  black==23.1.0
+  black==24.8.0
 commands =
   {envpython} -m black --check swh
 
 [testenv:flake8]
 skip_install = true
 deps =
-  flake8==5.0.4
-  flake8-bugbear==22.9.23
-  pycodestyle==2.9.1
+  flake8==7.1.1
+  flake8-bugbear==24.4.26
+  pycodestyle==2.12.1
 commands =
   {envpython} -m flake8
 
@@ -43,7 +43,7 @@ commands =
 extras =
   testing
 deps =
-  mypy==1.8.0
+  mypy==1.11.1
 commands =
   mypy swh