diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..59b7acb1a6505a16e74680c3d5e14b28d06ed167
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,87 @@
+[project]
+name = "satella"
+dynamic = ["version"]
+description = "Utilities for writing servers in Python"
+readme = {file = "README.md", content-type="text/markdown"}
+authors = [
+  {name = "Piotr Maślanka", email = "pmaslanka@smok.co"},
+  {name = "Tzu-Ping Chung", email = "tzu-ping@example.com"},
+  {name = "Another person"},
+  {email = "different.person@example.com"},
+]
+maintainers = [
+  {name = "Brett Cannon", email = "brett@example.com"}
+]
+requires-python = ">= 3.5"
+license = {file = "LICENSE", text="MIT License"}
+keywords = ["ha", "high availability", "scalable", "scalability", "server", "metrics", "tracing", "instrumentation"]
+classifiers = [
+   "Programming Language :: Python",
+   "Programming Language :: Python :: 3.5",
+   "Programming Language :: Python :: 3.6",
+   "Programming Language :: Python :: 3.7",
+   "Programming Language :: Python :: 3.8",
+   "Programming Language :: Python :: 3.9",
+   "Programming Language :: Python :: Implementation :: CPython",
+   "Programming Language :: Python :: Implementation :: PyPy",
+   "Operating System :: OS Independent",
+   "Development Status :: 5 - Production/Stable",
+   "License :: OSI Approved :: MIT License",
+   "Topic :: Software Development :: Libraries"
+]
+dependencies = ["psutil"]
+
+[tool.setuptools.dynamic]
+version = {attr = "satella.__version__"}
+
+[project.optional-dependencies]
+HTTPJSONSource = ["requests"]
+YAMLSource = ["pyyaml"]
+TOMLSource = ["toml"]
+FasterJSON = ["ujson"]
+cassandra = ["cassandra-driver"]
+opentracing = ["opentracing"]
+
+[build-system]
+requires = ["setuptools", "setuptools-scm"]
+build-backend = "setuptools.build_meta"
+
+
+[project.urls]
+Homepage = "https://github.com/piotrmaslanka/satella"
+Documentation = "https://satella.readthedocs.io/"
+Issues = "https://github.com/piotrmaslanka/satella/issues"
+Repository = "https://github.com/piotrmaslanka/satella"
+Changelog = "https://github.com/piotrmaslanka/satella/blob/develop/CHANGELOG.md"
+
+[tool.setuptools]
+packages = ["satella",
+            "satella.cassandra",
+            "satella.coding",
+            "satella.coding.concurrent",
+            "satella.coding.concurrent.futures",
+            "satella.coding.decorators",
+            "satella.coding.resources",
+            "satella.coding.sequences",
+            "satella.coding.structures",
+            "satella.coding.structures.dictionaries",
+            "satella.coding.structures.heaps",
+            "satella.coding.structures.mixins",
+            "satella.coding.transforms",
+            "satella.configuration",
+            "satella.configuration.schema",
+            "satella.configuration.sources",
+            "satella.debug",
+            "satella.debug.tainting",
+            "satella.exception_handling",
+            "satella.instrumentation",
+            "satella.instrumentation.cpu_time",
+            "satella.instrumentation.memory",
+            "satella.instrumentation.metrics",
+            "satella.instrumentation.metrics.exporters",
+            "satella.instrumentation.metrics.metric_types",
+            "satella.instrumentation.metrics.structures",
+            "satella.instrumentation.trace_back",
+            "satella.opentracing",
+            "satella.os",
+            "satella.time"]
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index fc177a70653ed3c4e0e764928384aa5547142edb..0000000000000000000000000000000000000000
--- a/setup.cfg
+++ /dev/null
@@ -1,56 +0,0 @@
-# coding: utf-8
-[metadata]
-name = satella
-keywords = ha, high availability, scalable, scalability, server, metrics, tracing
-long-description = file: README.md
-long-description-content-type = text/markdown; charset=UTF-8
-license_files = LICENSE
-author = Piotr Maślanka
-author_email = piotr.maslanka@henrietta.com.pl
-description = Utilities for writing servers in Python
-url = https://github.com/piotrmaslanka/satella
-project-urls =
-    Documentation = https://satella.readthedocs.io/
-	Code = https://github.com/piotrmaslanka/satella
-	Issue tracker = https://github.com/piotrmaslanka/satella/issues
-classifier =
-    Programming Language :: Python
-    Programming Language :: Python :: 3.5
-    Programming Language :: Python :: 3.6
-    Programming Language :: Python :: 3.7
-    Programming Language :: Python :: 3.8
-    Programming Language :: Python :: 3.9
-    Programming Language :: Python :: Implementation :: CPython
-    Programming Language :: Python :: Implementation :: PyPy
-    Operating System :: OS Independent
-    Development Status :: 5 - Production/Stable
-    License :: OSI Approved :: MIT License
-    Topic :: Software Development :: Libraries
-
-[options]
-install_requires =
-    psutil
-python_requires = !=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*
-packages = find:
-
-[options.packages.find]
-exclude =
-    docs
-    tests
-
-[options.extras_require]
-HTTPJSONSource = requests
-YAMLSource = pyyaml
-TOMLSource = toml
-FasterJSON = ujson
-cassandra = cassandra-driver
-opentracing = opentracing
-
-[pycodestyle]
-max-line-length = 100
-
-[pep8]
-max-line-length = 100
-
-[bdist_wheel]
-universal = 0
diff --git a/setup.py b/setup.py
index 905f3b03ad4ba9801a5b4dfd667665ab475ac131..606849326a4002007fd42060b51e69a19c18675c 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,3 @@
 from setuptools import setup
-from satella import __version__
 
-
-setup(version=__version__)
+setup()