diff --git a/MANIFEST.in b/MANIFEST.in
index b0509dc94498928ffa1494f29b5b90fbfb08b8e1..944ebbada4661ba0768179e055121b922de73dfa 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,5 +1,6 @@
 include README.md
 include LICENSE.txt
+include version
 
 recursive-include spams_wrap *.h
 recursive-include spams_wrap *.cpp
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..9181a22efa70566d24e2e7d56db422bf473ff583
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,5 @@
+[build-system]
+requires = ["oldest-supported-numpy",
+            "setuptools",
+            "distro",
+            "wheel"]
diff --git a/setup.cfg b/setup.cfg
index 51fa21507062968da175f2d5244acd2afa1a82ea..70087583b473a8dea1e035fe86a0441b4181ac24 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -7,10 +7,6 @@ verbose = 1
 
 [build_ext]
 
-[bdist_wheel]
-universal = 1
-
 [egg_info]
 tag_build =
 tag_date = 0
-
diff --git a/setup.py b/setup.py
index ccfb38ddd84f47e43df58d5f7e36a5550e724712..7a3db2146a8be06cfd36709a3c6e2f00b2776d3e 100644
--- a/setup.py
+++ b/setup.py
@@ -186,22 +186,29 @@ def mkhtml(d=None, base='sphinx'):
     return l
 
 
+# project root directory
 this_directory = os.path.abspath(os.path.dirname(__file__))
+
+# version number
+with open(os.path.join(this_directory, "version"), encoding="utf-8") as v:
+    current_version = v.read().rstrip()
+
+# package description
 with open(os.path.join(this_directory, 'README.md'), encoding='utf-8') as f:
     long_description = f.read()
 
+# setup config
 opts = dict(
     name='spams',
-    version='2.6.3.0',
+    version=current_version,
     description='Python interface for SPAMS',
     long_description=long_description,
     long_description_content_type='text/markdown',
     author='Julien Mairal',
     author_email='spams.dev@inria.fr',
-    url='http://spams-devel.gforge.inria.fr/',
+    url='https://thoth.inrialpes.fr/people/mairal/spams/',
     license='GPLv3',
     python_requires='>=3',
-    setup_requires=['Cython>=0.29', 'numpy>=1.12'],
     install_requires=['Cython>=0.29', 'numpy>=1.12',
                       'Pillow>=6.0', 'scipy>=1.0', 'six>=1.12'],
     packages=find_packages(),
diff --git a/version b/version
new file mode 100644
index 0000000000000000000000000000000000000000..06cf1864bbfdd422669326c630f5e24773d1f594
--- /dev/null
+++ b/version
@@ -0,0 +1 @@
+2.6.3.1
\ No newline at end of file