Drop Python 3.9 support
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index af77a9f..e5cf0ac 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -32,7 +32,7 @@
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ['pypy-3.10', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14-dev']
+        python-version: ['pypy-3.10', '3.10', '3.11', '3.12', '3.13', '3.14-dev']
         os: [ubuntu-latest, macos-latest, windows-latest]
     continue-on-error: ${{ matrix.python-version == '3.14-dev' }}
 
diff --git a/pyproject.toml b/pyproject.toml
index 37738fd..c6dae88 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -10,7 +10,7 @@
     { name = "Taneli Hukkinen", email = "hukkin@users.noreply.github.com" },
 ]
 license = { file = "LICENSE" }
-requires-python = ">=3.9"
+requires-python = ">=3.10"
 readme = "README.md"
 classifiers = [
     "License :: OSI Approved :: MIT License",
@@ -50,7 +50,7 @@
 [tool.tox]
 requires = ["tox>=4.21.1"]
 # Only run pytest envs when no args given to tox
-env_list = ["3.9", "3.10", "3.11", "3.12", "3.13"]
+env_list = ["3.10", "3.11", "3.12", "3.13"]
 
 [tool.tox.env_run_base]
 description = "Run tests under {base_python}"