diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dc83a81d2b421de89432d5d80756b977f740ce29..a732a7646b2bf78bbab00f999cfecd95ebb53e01 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,6 @@
 stages:
   - build
+  - publish
 
 before_script:
   - apk update
@@ -19,6 +20,52 @@ build:
     - ./build.sh $TAG $VERSION $CI_REGISTRY_IMAGE
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.e-biz.fr
     - docker push $CI_REGISTRY_IMAGE/$VERSION:$TAG
-  only:
-    - master
-    - tags
+  rules:
+    - if: $CI_COMMIT_BRANCH == "main"
+    - if: $CI_COMMIT_TAG != null
+
+
+desktop_extension:package:pre-release:
+  stage: build
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+  script:
+    - ./build-desktop.sh staging
+  rules:
+    - if: $CI_COMMIT_BRANCH == "develop"
+
+desktop_extension:publish:pre-release:
+  stage: publish
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+    policy: pull
+  script:
+    - cd ./deadlock-plugins/deadlock-extension
+    - npm run vsce-publish -- -pre-release -p $VSCODE_EXTENSION_MARKET_PLACE_ACCESS_TOKEN
+  rules:
+    - if: $CI_COMMIT_BRANCH == "develop"
+
+
+desktop_extension:package:release:
+  stage: build
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+  script:
+    - ./build-desktop.sh prod
+  rules:
+    - if: $CI_COMMIT_BRANCH == "main"
+
+desktop_extension:publish:release:
+  stage: publish
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+    policy: pull
+  script:
+    - cd ./deadlock-plugins/deadlock-extension
+    - npm run vsce-publish -- -p $VSCODE_EXTENSION_MARKET_PLACE_ACCESS_TOKEN
+  rules:
+    - if: $CI_COMMIT_BRANCH == "main"
diff --git a/build-desktop.sh b/build-desktop.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d7b91cafc058e4ed609036d9e3ce40c0acd16345
--- /dev/null
+++ b/build-desktop.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+cd ./deadlock-plugins/deadlock-extension/
+
+./install.sh
+./build.sh $@
diff --git a/deadlock-plugins/deadlock-extension/README.md b/deadlock-plugins/deadlock-extension/README.md
index c24101e2f3ea48b3dbe46de58278e86a648bc763..f5847f3f171a675bbcd426c96f244369f98ca1c9 100644
--- a/deadlock-plugins/deadlock-extension/README.md
+++ b/deadlock-plugins/deadlock-extension/README.md
@@ -1,15 +1,3 @@
-# Deadlock Coding
+## Deadlock Coding extension
 
-Vscode extension to show a panel with :
-
-- adresses availables for the current challenge pulled from `/home/config/user-challenge.json`
-- challenge instruction pulled from the `README.md`
-
-## Quick start
-
-- Run `setup-dev-env.sh` to mock challenge configuration
-- Run `install.sh`
-- Run `build.sh`
-- Press `F5` (or use `Run and Debug` tab).
-
-If something goes wrong, you may need to kill watch Task terminal between restarts.
+This extension was created to allow you to do some of the [Deadlock](https://www.deadlock.io) platform exercises directly on your Visual Studio Code IDE
diff --git a/deadlock-plugins/deadlock-extension/build.sh b/deadlock-plugins/deadlock-extension/build.sh
index 77a6867456b2d485d48814efe422a3c5856ea6e5..5cb1d85ec85fda4fc0c2522dba7b6a15fb99faf6 100755
--- a/deadlock-plugins/deadlock-extension/build.sh
+++ b/deadlock-plugins/deadlock-extension/build.sh
@@ -2,5 +2,16 @@
 
 set -e
 
+CONFIG_FILE=$1
+
+if ! [ -z "$CONFIG_FILE" ]
+  then
+    echo $CONFIG_FILE
+    mv -f src/config.$CONFIG_FILE.ts src/config.ts
+    # Remove all other configs
+    rm src/config.*.ts
+fi
+
+
 npm run build-extension
-npm run vsce
+npm run vsce-package
diff --git a/deadlock-plugins/deadlock-extension/docs/README.md b/deadlock-plugins/deadlock-extension/docs/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c24101e2f3ea48b3dbe46de58278e86a648bc763
--- /dev/null
+++ b/deadlock-plugins/deadlock-extension/docs/README.md
@@ -0,0 +1,15 @@
+# Deadlock Coding
+
+Vscode extension to show a panel with :
+
+- adresses availables for the current challenge pulled from `/home/config/user-challenge.json`
+- challenge instruction pulled from the `README.md`
+
+## Quick start
+
+- Run `setup-dev-env.sh` to mock challenge configuration
+- Run `install.sh`
+- Run `build.sh`
+- Press `F5` (or use `Run and Debug` tab).
+
+If something goes wrong, you may need to kill watch Task terminal between restarts.
diff --git a/deadlock-plugins/deadlock-extension/media/logo.png b/deadlock-plugins/deadlock-extension/media/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..a53213f88159e56e029222335fa7876c9c2ee9bd
Binary files /dev/null and b/deadlock-plugins/deadlock-extension/media/logo.png differ
diff --git a/deadlock-plugins/deadlock-extension/package-lock.json b/deadlock-plugins/deadlock-extension/package-lock.json
index b295b7667c31cb60e1d9f701b2cefc4ce3da03cb..4bc90941aa70ab33151d69820d7fa35f7c522129 100644
--- a/deadlock-plugins/deadlock-extension/package-lock.json
+++ b/deadlock-plugins/deadlock-extension/package-lock.json
@@ -32,12 +32,12 @@
         "terser-webpack-plugin": "^5.2.5",
         "ts-node": "^9.1.1",
         "typescript": "^3.9.10",
-        "vsce": "^2.5.1",
+        "vsce": "^2.7.0",
         "webpack": "^5.65.0",
         "webpack-cli": "^4.9.1"
       },
       "engines": {
-        "vscode": "^1.63.0"
+        "vscode": "^1.66.0"
       }
     },
     "node_modules/@babel/code-frame": {
@@ -2419,9 +2419,9 @@
       }
     },
     "node_modules/linkify-it": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
-      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+      "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
       "dev": true,
       "dependencies": {
         "uc.micro": "^1.0.1"
@@ -2497,14 +2497,14 @@
       "dev": true
     },
     "node_modules/markdown-it": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
-      "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
+      "version": "12.3.2",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+      "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
       "dev": true,
       "dependencies": {
-        "argparse": "^1.0.7",
-        "entities": "~2.0.0",
-        "linkify-it": "^2.0.0",
+        "argparse": "^2.0.1",
+        "entities": "~2.1.0",
+        "linkify-it": "^3.0.1",
         "mdurl": "^1.0.1",
         "uc.micro": "^1.0.5"
       },
@@ -2512,12 +2512,21 @@
         "markdown-it": "bin/markdown-it.js"
       }
     },
-    "node_modules/markdown-it/node_modules/entities": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
-      "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
+    "node_modules/markdown-it/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true
     },
+    "node_modules/markdown-it/node_modules/entities": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+      "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/marked": {
       "version": "4.0.6",
       "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.6.tgz",
@@ -3885,9 +3894,9 @@
       "dev": true
     },
     "node_modules/vsce": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.5.1.tgz",
-      "integrity": "sha512-vJ+xY93Wv3NhgeriMyIC2oMA+niifOI9XGIqEToIq/rFRoQnXlmO4PSyis/OxBl9hw8OKKC/VcI9CijfFufEkw==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.7.0.tgz",
+      "integrity": "sha512-CKU34wrQlbKDeJCRBkd1a8iwF9EvNxcYMg9hAUH6AxFGR6Wo2IKWwt3cJIcusHxx6XdjDHWlfAS/fJN30uvVnA==",
       "dev": true,
       "dependencies": {
         "azure-devops-node-api": "^11.0.1",
@@ -3898,7 +3907,7 @@
         "hosted-git-info": "^4.0.2",
         "keytar": "^7.7.0",
         "leven": "^3.1.0",
-        "markdown-it": "^10.0.0",
+        "markdown-it": "^12.3.2",
         "mime": "^1.3.4",
         "minimatch": "^3.0.3",
         "parse-semver": "^1.1.1",
@@ -6026,9 +6035,9 @@
       }
     },
     "linkify-it": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
-      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+      "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
       "dev": true,
       "requires": {
         "uc.micro": "^1.0.1"
@@ -6092,22 +6101,28 @@
       "dev": true
     },
     "markdown-it": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
-      "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
+      "version": "12.3.2",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+      "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
       "dev": true,
       "requires": {
-        "argparse": "^1.0.7",
-        "entities": "~2.0.0",
-        "linkify-it": "^2.0.0",
+        "argparse": "^2.0.1",
+        "entities": "~2.1.0",
+        "linkify-it": "^3.0.1",
         "mdurl": "^1.0.1",
         "uc.micro": "^1.0.5"
       },
       "dependencies": {
+        "argparse": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+          "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+          "dev": true
+        },
         "entities": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
-          "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+          "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
           "dev": true
         }
       }
@@ -7130,9 +7145,9 @@
       "dev": true
     },
     "vsce": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.5.1.tgz",
-      "integrity": "sha512-vJ+xY93Wv3NhgeriMyIC2oMA+niifOI9XGIqEToIq/rFRoQnXlmO4PSyis/OxBl9hw8OKKC/VcI9CijfFufEkw==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.7.0.tgz",
+      "integrity": "sha512-CKU34wrQlbKDeJCRBkd1a8iwF9EvNxcYMg9hAUH6AxFGR6Wo2IKWwt3cJIcusHxx6XdjDHWlfAS/fJN30uvVnA==",
       "dev": true,
       "requires": {
         "azure-devops-node-api": "^11.0.1",
@@ -7143,7 +7158,7 @@
         "hosted-git-info": "^4.0.2",
         "keytar": "^7.7.0",
         "leven": "^3.1.0",
-        "markdown-it": "^10.0.0",
+        "markdown-it": "^12.3.2",
         "mime": "^1.3.4",
         "minimatch": "^3.0.3",
         "parse-semver": "^1.1.1",
diff --git a/deadlock-plugins/deadlock-extension/package.json b/deadlock-plugins/deadlock-extension/package.json
index 69aa8ecd31ee4a426c3aee800ade330a3baf4327..feab6975fc998549dab6963dc38c47c743025d34 100644
--- a/deadlock-plugins/deadlock-extension/package.json
+++ b/deadlock-plugins/deadlock-extension/package.json
@@ -1,8 +1,9 @@
 {
   "name": "deadlock-coding",
   "description": "Deadlock Coding",
-  "version": "0.0.2",
+  "version": "0.0.3",
   "publisher": "Deadlock",
+  "icon": "media/logo.png",
   "engines": {
     "vscode": "^1.66.0"
   },
@@ -16,10 +17,6 @@
     "onWebviewPanel:deadlockHelp",
     "onStartupFinished"
   ],
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/microsoft/vscode-extension-samples.git"
-  },
   "main": "./out/main.js",
   "contributes": {
     "commands": [
@@ -85,7 +82,8 @@
     }
   },
   "scripts": {
-    "vsce": "vsce package",
+    "vsce-package": "vsce package --allow-missing-repository",
+    "vsce-publish": "vsce publish --allow-missing-repository",
     "esbuild-base": "esbuild --bundle --format=cjs --platform=node",
     "build-extension": "npm run esbuild-base -- --external:vscode ./src/extension.ts --outfile=out/main.js --minify",
     "build-recorder": "npm run esbuild-base -- ./src/recorder/index.ts --outfile=out/recorder.js --minify",
@@ -120,7 +118,7 @@
     "terser-webpack-plugin": "^5.2.5",
     "ts-node": "^9.1.1",
     "typescript": "^3.9.10",
-    "vsce": "^2.5.1",
+    "vsce": "^2.7.0",
     "webpack": "^5.65.0",
     "webpack-cli": "^4.9.1"
   }