diff --git a/.gitignore b/.gitignore
index 97b97cac04ae10150049ea2707dbf079e0450bfd..25128ffed1b6e22c636fe68da405faa099227d9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,6 @@
 coverage.xml
 test_results.xml
 junit-coverage.xml
-environment.yaml
 html/
 build/
 doc/api/
diff --git a/MANIFEST.in b/MANIFEST.in
deleted file mode 100644
index 12e13c10991896dd576c69cf1e30e67f23e5a3a5..0000000000000000000000000000000000000000
--- a/MANIFEST.in
+++ /dev/null
@@ -1,7 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-include LICENSES/*.txt
-recursive-include doc *.rst *.txt *.py
-recursive-include tests *.py *.cfg
diff --git a/conda/meta.yaml b/conda/meta.yaml
index 8e714303d2b1725d7e3f84464af14168cd8c68a6..b8c47a698ecfcc028495daa5ad1494d010a519b6 100644
--- a/conda/meta.yaml
+++ b/conda/meta.yaml
@@ -6,7 +6,7 @@
 
 package:
   name: {{ data['project']['name'] }}
-  version: {{ data['project']['version'] }}
+  version: {{ environ.get('PACKAGE_VERSION', environ.get('GIT_DESCRIBE_TAG')) }}
 
 source:
   path: ..
@@ -23,6 +23,8 @@ requirements:
   host:
     - python >=3.10
     - pip
+    - hatchling
+    - versioningit
     - click >=8
     - click {{ click }}
     - tomli {{ tomli }}
diff --git a/pyproject.toml b/pyproject.toml
index e9f1e31a986bc762e05181174c38a74557284aa3..308d69e75ed3bbfe1eff09c5481f171be0ee2f19 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,34 +3,53 @@
 # SPDX-License-Identifier: BSD-3-Clause
 
 [build-system]
-    requires = ["setuptools>=61.0.0", "wheel"]
-    build-backend = "setuptools.build_meta"
+requires = ["hatchling", "versioningit"]
+build-backend = "hatchling.build"
 
 [project]
 name = "clapper"
-version = "1.0.2b0"
+dynamic = ["version"]
 requires-python = ">=3.10"
 description = "Configuration Support for Python Packages and CLIs"
 readme = "README.md"
-license = {text = "BSD 3-Clause License"}
-authors = [
-  {name = "Andre Anjos", email = "andre.anjos@idiap.ch"},
-]
+license = { text = "BSD 3-Clause License" }
+authors = [{ name = "Andre Anjos", email = "andre.anjos@idiap.ch" }]
 classifiers = [
-    "Development Status :: 4 - Beta",
-    "Intended Audience :: Developers",
-    "License :: OSI Approved :: BSD License",
-    "Natural Language :: English",
-    "Programming Language :: Python :: 3",
-    "Topic :: Software Development :: Libraries :: Python Modules",
+  "Development Status :: 4 - Beta",
+  "Intended Audience :: Developers",
+  "License :: OSI Approved :: BSD License",
+  "Natural Language :: English",
+  "Programming Language :: Python :: 3",
+  "Topic :: Software Development :: Libraries :: Python Modules",
 ]
-dependencies = [
-    "click>=8",
-    "tomli",
-    "tomli-w",
-    "xdg",
+dependencies = ["click>=8", "tomli", "tomli-w", "xdg"]
+
+[tool.hatch.version]
+source = "versioningit"
+
+[tool.versioningit.next-version]
+method = "smallest"
+
+[tool.versioningit.format]
+# Example formatted version: 1.2.4.dev42+ge174a1f
+distance = "{next_version}.dev{distance}+{vcs}{rev}"
+# Example formatted version: 1.2.4.dev42+ge174a1f.d20230922
+distance-dirty = "{next_version}.dev{distance}+{vcs}{rev}.d{build_date:%Y%m%d}"
+
+[tool.hatch.build.targets.sdist]
+include = [
+  "src/**/*.py",
+  "tests/**/*.py",
+  "tests/**/*.cfg",
+  "doc/**/*.rst",
+  "doc/**/*.txt",
+  "doc/**/*.py",
+  "LICENSES/*.txt",
 ]
 
+[tool.hatch.build.targets.wheel]
+packages = ["src/clapper"]
+
 [project.urls]
 documentation = "https://clapper.readthedocs.io/en/latest/"
 homepage = "https://pypi.org/project/clapper"
@@ -40,19 +59,15 @@ changelog = "https://gitlab.idiap.ch/software/clapper/-/releases"
 [project.optional-dependencies]
 qa = ["pre-commit"]
 doc = [
-    "sphinx",
-    "furo",
-    "sphinx-autodoc-typehints",
-    "sphinxcontrib-programoutput",
-    "auto-intersphinx",
-    "sphinx-copybutton",
-    "sphinx-inline-tabs",
-    ]
-test = [
-    "pytest",
-    "pytest-cov",
-    "coverage",
-    ]
+  "sphinx",
+  "furo",
+  "sphinx-autodoc-typehints",
+  "sphinxcontrib-programoutput",
+  "auto-intersphinx",
+  "sphinx-copybutton",
+  "sphinx-inline-tabs",
+]
+test = ["pytest", "pytest-cov", "coverage"]
 
 [project.entry-points."clapper.test.config"]
 first = "tests.data.basic_config"
@@ -66,13 +81,6 @@ complex-var = "tests.data.complex:cplx"
 verbose-config = "tests.data.verbose_config"
 error-config = "tests.data.doesnt_exist"
 
-[tool.setuptools]
-zip-safe = true
-package-dir = {"" = "src"}
-
-[tool.distutils.bdist_wheel]
-universal = true
-
 [tool.isort]
 profile = "black"
 line_length = 80
@@ -83,10 +91,6 @@ lines_between_types = 1
 line-length = 80
 
 [tool.pytest.ini_options]
-addopts = [
-    "--cov=clapper",
-    "--cov-report=term-missing",
-    "--import-mode=append",
-]
+addopts = ["--cov=clapper", "--cov-report=term-missing", "--import-mode=append"]
 junit_logging = "all"
 junit_log_passing_tests = false
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 1049028f8cd0dc19b15f8b8e9a8fd34c3b90453e..0000000000000000000000000000000000000000
--- a/setup.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: BSD-3-Clause
-
-from setuptools import setup
-
-setup()