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/setup.py b/setup.py
index 46958d3a474a90e70e7df68e393c91eb03336baa..7a3db2146a8be06cfd36709a3c6e2f00b2776d3e 100644
--- a/setup.py
+++ b/setup.py
@@ -186,19 +186,27 @@ 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',
     install_requires=['Cython>=0.29', 'numpy>=1.12',
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