diff --git a/pyproject.toml b/pyproject.toml
index dfe06b2..7f527aa 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,5 +1,53 @@
[build-system]
-requires = [
- "setuptools >= 46.4.0"
-]
+requires = ["setuptools>=61.2"]
build-backend = "setuptools.build_meta"
+
+[project]
+name = "runcrate"
+description = "Workflow Run RO-Crate toolkit"
+keywords = ["ro-crate", "workflow", "provenance", "CWL", "CommonWL"]
+classifiers = [
+ "Development Status :: 2 - Pre-Alpha",
+ "License :: OSI Approved :: Apache Software License",
+ "Intended Audience :: Developers",
+ "Intended Audience :: Science/Research",
+ "Operating System :: MacOS :: MacOS X",
+ "Operating System :: POSIX :: Linux",
+ "Programming Language :: Python :: 3.8",
+ "Programming Language :: Python :: 3.9",
+ "Programming Language :: Python :: 3.10",
+]
+authors = [{name = "CRS4", email = "ro-crate@elixir-europe.org"}, {name = "RO-Crate community"}]
+requires-python = ">=3.8, <4"
+dependencies = [
+ "bdbag>=1.4.1",
+ "click~=8.1",
+ "cwl-utils==0.33",
+ "cwlprov==0.1.1",
+ "networkx==3.1",
+ "prov>=1.5.1",
+ "rocrate>=0.9,<1",
+]
+dynamic = ["version"]
+
+[project.readme]
+text = "Runcrate is a software toolkit to manipulate `Workflow Run RO-Crate `_ packages. Documentation is at http://www.researchobject.org/runcrate/."
+content-type = "text/x-rst"
+
+[project.urls]
+Homepage = "https://github.com/ResearchObject/runcrate"
+
+[project.scripts]
+runcrate = "runcrate.cli:cli"
+
+[tool.setuptools]
+zip-safe = false
+include-package-data = true
+package-dir = {"" = "src"}
+
+[tool.setuptools.packages.find]
+where = ["src"]
+namespaces = false
+
+[tool.setuptools.dynamic]
+version = {attr = "runcrate.__version__"}
diff --git a/setup.cfg b/setup.cfg
index 25eb306..e44b810 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,49 +1,2 @@
-[metadata]
-name = runcrate
-version = attr: runcrate.__version__
-license = Apache License, version 2.0 (Apache-2.0)
-description = Workflow Run RO-Crate toolkit
-long_description = Runcrate is a software toolkit to manipulate `Workflow Run RO-Crate `_ packages. Documentation is at http://www.researchobject.org/runcrate/.
-long_description_content_type = text/x-rst
-keywords = ro-crate, workflow, provenance, CWL
-classifiers =
- Development Status :: 2 - Pre-Alpha
- License :: OSI Approved :: Apache Software License
- Intended Audience :: Developers
- Intended Audience :: Science/Research
- Operating System :: MacOS :: MacOS X
- Operating System :: POSIX :: Linux
- Programming Language :: Python :: 3.8
- Programming Language :: Python :: 3.9
- Programming Language :: Python :: 3.10
-author = CRS4, RO-Crate community
-author_email = ro-crate@elixir-europe.org
-url = https://github.com/ResearchObject/runcrate
-
-[options]
-zip_safe=False
-include_package_data=True
-packages=find:
-package_dir=
- =src
-
-python_requires=>=3.8, <4
-
-install_requires=
- bdbag>=1.4.1
- click~=8.1
- cwl-utils==0.33
- cwlprov==0.1.1
- networkx==3.1
- prov>=1.5.1
- rocrate>=0.9,<1
-
-[options.entry_points]
-console_scripts=
- runcrate=runcrate.cli:cli
-
-[options.packages.find]
-where=src
-
[flake8]
ignore = E501