diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ad8cca23e20ed68ef27d22f3f57b9c4808c92bcc..01df3a3f5300dca27ea1c5daab15d4c8fe225543 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 stages:
   - test
   - build
+  - publish
 
 variables:
   PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
@@ -61,3 +62,37 @@ build-windows:
 
   tags:
     - docker-build
+
+build-pypi:
+  stage: build
+  image: python:3
+  before_script:
+    - apt-get update
+    - pip install .[build-pypi]
+  script:
+    - python3 setup.py sdist bdist_wheel
+  tags:
+    - docker
+  artifacts:
+    paths:
+      - dist/*
+    expire_in: 1 week
+  only:
+    - tags@funkwhale/cli
+
+
+publish:
+  stage: publish
+  image: python:3
+  before_script:
+    - apt-get update
+    - pip install .[publish]
+  script:
+    - twine upload dist/*
+  tags:
+    - docker
+  dependencies:
+    - build-linux
+    - build-windows
+  only:
+    - tags@funkwhale/cli
diff --git a/README.md b/README.md
index e21a0fd26b4918555e6111914f73a890f76d9f57..02cfcbf681c8c8b13757043cc972e5028d515c4f 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,13 @@ A command line interface to interact with Funkwhale servers.
 
 # Installation
 
-We provide some prebuilt binaries for Windows and Linux.
+This package can be installed via pip:
+
+```
+pip install funkwhale-cli
+```
+
+We also provide some prebuilt binaries for Windows and Linux.
 
 On Linux:
 
diff --git a/setup.cfg b/setup.cfg
index 6cb64f211ba014e0aaef6369f6ac10a5adfa95ef..fc49852f37935c5397178d8188e611b883a601e3 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,24 +1,37 @@
 [metadata]
 name = funkwhale-cli
 description = "A command line interface to interact with Funkwhale servers"
-version = 0.1.dev0
+version = 0.1.2.dev0
 author = The Funkwhale Collective
 author_email = contact@funkwhale.audio
 url = https://dev.funkwhale.audio/funkwhale/cli
 long_description = file: README.md
+long_description_content_type = text/markdown
 license = AGPL3
 keywords = cli
 classifiers =
     Development Status :: 3 - Alpha
-    License :: OSI Approved :: AGPL
+    Intended Audience :: End Users/Desktop
+    License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
     Natural Language :: English
+    Operating System :: MacOS :: MacOS X
+    Operating System :: POSIX
+    Operating System :: POSIX :: BSD
+    Operating System :: POSIX :: Linux
+    Operating System :: Microsoft :: Windows
+    Programming Language :: Python
     Programming Language :: Python :: 3
+    Programming Language :: Python :: 3 :: Only
     Programming Language :: Python :: 3.6
+    Programming Language :: Python :: 3.7
+    Programming Language :: Python :: 3.8
+    Programming Language :: Python :: 3.9
 
 [options]
 zip_safe = True
 include_package_data = True
 packages = find:
+python_requires = >=3.6
 install_requires =
     aiofiles~=0.7.0
     aiohttp~=3.7.4
@@ -51,7 +64,12 @@ test =
 build =
     pyinstaller~=4.3
 
+build-pypi =
+    setuptools~=56.0.0
+    wheel~=0.36.2
 
+publish =
+    twine~=3.4.1
 
 [options.packages.find]
 exclude =