diff --git a/NodeApp/.env.vault b/NodeApp/.env.vault
index 78d2456499683501452b38827b6a23bfa1388e30..342fbde354301c026b08f5ca21a29c5deae173c1 100644
--- a/NodeApp/.env.vault
+++ b/NodeApp/.env.vault
@@ -4,11 +4,11 @@
 #/--------------------------------------------------/
 
 # development
-DOTENV_VAULT_DEVELOPMENT="tju8+Yihn6hz6NEOY0uEeFNNqBSjxd0os4bE4dIHStOgHum63CTF5XGuXCF+F8yDO8h/89ELPXswH1TNurHTl7GBpD65Pp1NZ8n9QRmIGxIrvCmifJwzVovHDpmXHsxjMEXo0KgMANTZdGhjebnFHrEoEwmzQyiJjT7ooQdopWwbZufh6kN3q6CkRppOTxfknToQBq1wByZ2piV1UMRdHMDWs+kEX+c4FF9FuZGjW5adRZ5pprJMu+1UUDxvPhlez8PObVJZPmFgRJj7tfyrs+RplqfLUohB9cwu1Or2xSXOXk5lyidwM1uZM1BiPYPCSfjyPC6araqie9Ta5/w9pgaCbeedcIUaWS6rN3aNPrqefjBGtYkO4+oNcsnpiInh3mzdlzbm7Cbt3dZB6Y/VJgC/3aGBL9CcjLvbqvcIhZSBzn53GnbgIjCb2TTckWV1sdHDRhaajPJnkb1eD7BbTdPzW6+xSZTt6yHzEMJlfCB8JUf9yj/Z8hYangSAbd/0Oklehe6sXrxgQ/rX5IERgO89Rh1h1XJAm9ebHJvkAA3XSQ86GF6k+oGaXhdYB6RRtXAu7fOUIqkI7D6Ua8M/6tna+chBP9mKDohYh2Ih+t522gak9nKCWWl7uRIAFIOpmY6rt1Pj3mG2ilNMMryXoa4ylUHmKCiuYlt0w7zTJHxKEc0IKc2DSrYoALV2KEOYJNpuUC6/hPr8P7EiSlbxTCMYrnJ7aCiw0Ydp2GGPF5G4RpGobBQa1ywNw8GdG99FlFCf6zp/voUc5uRGR5WSKgQt36eYYxDKJ4/yQ2wC/kdoOlQRSaQaivorWkF1NoJKpPqSyc6q1DY8AazatNCzH7jH/dCpUy7wrz55yNJPl4P26pQE4OX/rRnzR8Ozu7BWWtzja3IC/HuFMt6br8rKtAwOIZwEi8M68ehIasl+FzWhJ2QUcnpDpk9daMR5tsQk5ZOG4tM1wuv1f7BvsV4VvP84IoJE2MGVDzF+u+CLcBJGzhsrfi7Yh9/5He9Wf/Z3KSxpKPkuHDUZ0XDO3YKkEpVJgJ5Lh1mKZqknXJtxvRXk/Cj0L35tYsa12S0wBIOzKAJBRpCPdj/2vlF3DfUwxsXRsPr5j+457ALZDoiNyWZLlNlEzNio+KED4KVPTdiJHDkwg6tqqNa6S7b4yD8Ym0NwPx5hvKAvbxLWpBGVIfEf2Qh0hdpSLwwEWiCE3oaMZTIL1ohBh/JxqHezcrKQwqom0CEqBh6r7Zad4WEXodeqCbDmTLRgzKEByIDDy0H+9pc+zURzVgXjXizxh0UzsKgD4AfVU5pjLCNHXkh7P4HPiQaUWOSoofYikFM9Jp6NmmFWmRrdslib60XxmrFtLGcc6KJmDpmM/l10CdIpJu8oywgtGkuq/JlbqXer+g08b8HLJ7hzDKCQ1Ra1g2TWSFDeBq5UY7h7UrQxcsTSlJbCWCFemG0GGKAX6tDvf1uJbm6tuG1xJh0IyIlf1OxMLYuNB49yBLudd65kRVv1zGipCpaLegwvcmNq5pZP3n1ll4P19dhrue56u4ab+Vp1+t1VlGWQgQGZ3WVvf5EoEc6vHwMv6N6w1I9ET19vXQrxjqFjbF945iKQic0lNLHGwXfaPjgs+RKhrw8TDqcbyqMbLgM+l6vqLlRb5yx2lvIl69BsbX0qcX7orCIuCplDX9iqoYeRgHnlIB3X2nDoWy4wrSLXSgl8mka590Av03VVVVgsnQHmIGCM0z4GKbx9poV5F/ACzvMiSQ6hZMybo5nFjwuZPFLwpoV1qSEvDTH+7AI/bJmlqBNrtltcjvHt4sD9nqVH/E1lahe7xscuwyueoJcubjyk5vDhGftxUeDX1Zm/eQnywll9D/9mQZySw10ZhRNEdFo="
+DOTENV_VAULT_DEVELOPMENT="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"
 
 # production
-DOTENV_VAULT_PRODUCTION="4BFQgRhU3SYuBALDHNspd83+JFm/D1Vmj7blXP/a35X6DqFCTzFHW+ygEqNgMoAQq8ml4T7QCKN1x0pJx3/URZsGvyyptPkm5e+swP5cvhOq+yz08wD1GWaXB18H2erABMQvYZjTrijTQ826uKNhVgKFU+h6i5O9L7bZsBviR72+q8TkLOMT+v1atA5ZrFHudim7aEVD4Im+Sz+G9YiBJ7QWd+NvfpH/Rj11jVW66tifjhy1XM9JJaje0eKd0QtY5T0cKV6kNyMFfB3S2xj5hLTljcvgWiW3gg/qhO9WvbFbdjvCrTGafwbXinJQMhI5CZkdce6tT7ZbN1rsM8DvMtzt5GK5o5XVeh0qPGQCdQzNGuMgz5zE778Uv+zyF8PFjHbE6t9Gdj2vkI0Ak+afpLcbk2HTci5a5Hyg1/y2aiY7WTgQ2NhR4TsvJKYBdFuBSbdZ/IssuTNwMSYwGoMrLWyN4LF4mUdoYzsy2eu991LUS7I/KVbBPrFCir7g1//WdYu4l99aVVQQB6CBHpb207idLUizXLEfDFf9E+hVx/HAG7Y6mz+GuJghCsTOgH9HAFBQezbZouKuz2cQk+qi8TxctgPUiBfzdLibMqIcpTO60VJKsHg+amDkPKMDDWYW4HcwES8yKYUb5Q8iN4yY4aXihyzxQ4cM0tjMi0tDG5+cE2+Y4Ee0WKnJoiC/qxOJqmudNpW71KSp6NP0SdW2SXLFQjHee/eeJpTQl4FliIgvVZgNEixIVNNPOb92CBy6WmgLc6AYFvbn4XcuOtWHO/b5RphozpGbnKivPG9vWS14AYP/BV1N4iDs59o8+Drp6JaI+HwDPBXpbz+99QFkjGmA3B4U1GlmfBtQcbe+vGCGsCPgIec4BU/oVbMr6Q/n89OZToaa7sSNEnyExQtDV41ee2y2JETPVKGqdeDUeZ3xwaIdO2RRxv84kYzPOCmlx/vvHOFZgHbjkh2G3WVZe+yMMKAM8UOyoZV9syZmb/9fXTHZSBcQqL7tVoKKtcNaRSeU1WPsFWX70Sz2VZmcLGkxSIwsTn0mlFjSFj4kghzDdPlMVwIHbP/mOlK68JIvNpZ9AqroMKDnD/Uruh7rMUXwGrrpyPw4XQ0Df5R/ipGkkvIWVfOjmJvpUc35c/G68iYciJ0Bi9YEPO6WxVSaQ0FK7hM98IBA8aCIoT33r9YHrHvzYw/qcvszxTDH+iTX/5xwxAjNZHOys24l8TRV8K9NymyAWebKJ5WQiv4b3f9ErB39D0urYcKy6x+CMqtTJMI7hplg0P+9U80nmOCnkLwfSgSApZNLvhEZjNK7oWFVbZCQu5aisCWuBSFx+f70dj5zGOQn1BmwVbykslE5DcQUWfLhaa4mRVWFfEyA5ZSq+E78JHXXDDzyezebQdvw3bXoc86jh5hDICvk5Yd41U6FemNtMWdFvZuJqI2fXP1K0gOFsY8ly24lje2YAWXa/oU9vAfx9s/zvED+INS6fE1F/opAm0ML/0Fcto6q1P6WELBO8i51zxhL0Dy1R9V/SIN+rvP/34H6Pi8Se/CmKS+jia//I2FM+K4tQHkCXhshYR3EWA4YxrA5hAitkbzENBtYR9Ai0576ZQMfSihwRRTYb+e+9DnQLJQFdUvAmOqUDUs+rVNdBbjo+nplSavSvFkpONpyZUL7qVq0Hl5mMMlhePdci6XEvc7MKQjR6ND0+i4s/A25p26OeHxNZ2IkULbHLGKeUXdD7zerRDgbipSkYrGJqSAMhYS6j0pMzewNWPaJ0Gjyk9pskIaBS8ior6mZVmxPU0FRjZo8pv3jZiAB2DdIAwPWyF6hF8URR1MCnbMCbLGjciHtUPo4DrbXdLFZc6HBNuNJFfJDqK8YscHLuQ=="
+DOTENV_VAULT_PRODUCTION="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"
 
 # test
-DOTENV_VAULT_TEST="HDj98Ycxd2SLI7bc07GGRSORUyHP3iwT8TByqX7J4wccL3nlBassF+ho+8WctLGHxZpTihbaJrjSOqekpiXazUhJkEEc+To3twACH2uJV7P/NGw/C/j+S1KuKth2BPzXuUbswsMdsXiIwTTHJgxO3CgR4ePlUzaBM1vAHare4ZQZ/6Tx955x+2+lSNjbeHMZGxZ0Pr/i3NtYQeJnImSbptwFz0KZm3TbzVMReIo4b9y0dexHqPK990nfixgXq6/qRFxPsPz+eDV9Ybed006y6fpsYsIj+AgUn+wDFtgWNep1P0btRDAr7VbVVl15aaiO5MkxozrQFEBc/jF94AtwUywRWdG/ED7da28n48iHoy0l09DtmbfF5B/UMG8VOk6mnF0QWRbOA6E67nuVNYgV48XWUqUArr2Y/bC8If4tyUCHhjOD29eacqnneD8txC54Z7OtdOtkgwSr/92ela96tJLwfP4CSJ0rJT+t71im0YGLjT7PdW4tQtjuKDWC7HY22XMeSRanRWsvgQ/S5EmY58qTwanIfo9o9vSlZN9fYuRbWVBPG5nPtgiah/6BT9QHdoTgvSKzylEI6atYunGqpnZbAVx/HSailQjE1PvrEW+14oS2Zjfr3/DnAc6DnKe7NvliYywVzmXZeM1d+8g1F28w+Gn+Zg+x4JJtxzzJ4lqNWeLlQ7xUxLP2x9li57pTOplAlicLUldjs+dA/AKneRP/CTXtXw3xLDLnK5um+NCN9vmUbUavJCil4Fyaxfw3rJ2k6AayqrcRXQw3ESMJUDNW5gCANbz2hGkMuH7V35e1uVDQBe++eYF5H8JXpki3VfA9u01NpqAIx1I3NIkl4sV6p8DPCTtj7KxvAMJpTz5EKD0sX1yuDxS3odUwbaL42B44Qo7zKuJbzoFHBn6ztNTC7OVDqu3RNt37JVBoiM+QLWTzbFszwoHkyMm4k+BDLDu+VXPZFXn+r/MjfbHuiey7anh8U7B7F4itDpyV6ZKeJc8/Im8ftaNdg6DkIJ3/6OQ8CWYx8HkwjEQTZggcF0lVULtIne4FRMwT2XvJSVS5Jqb1TG2hgqbC5hpkyNn4ng6R8KHrLx0EaJHRZpdwXfTnlm1GvbMgqDzOPBzK/aPxHBLCLXF45ZE/9Og2GuqsQf3iQwWlLX/sbY/XwdYbzo6wfIpV6uifNUBJeAUbeNzo5nM8rGwDfvORXY8sKx5ePqIJhS9ZZya8q5ZdW3N+WxaYBGdQjmDqYJAnfiBWTTS4jCqzAxcpqpm+imdz0jbdsG32S19KBbKI0mGIkDHWUPfhoPZH4rO8vs5QneOFJp5mccmmF/D/69ATj7CK2TmA8KIeIIF/+mi1I4QCHjV9b/Oy/BpYAtI00xYTSArMI3LUVfDe8MLKiSkptf7WK5O+OL2cOiklxUe4mLMbPQr3if+61RGyS/+TIrO6YEhHsAwsrH3bHIBvbITEtBI9Ei7RfWoWP0lJDfcE4AM9VIbXa8W01cDHOMaddiSqA7sHxOwg3stQODJPnIfu5npHX17GV4/zgI+zl6RrZtTGVkmaxNdErZK35Y5xWKgJWEl55Ef/zLMISnR2sBFau/EvO/z6t93cxXUL/TqicwoIcaaXjLdDfs6KMbK8CP+8K2vID9GATVFAbsLzCHi895uXrHhv3BrXYgTh/IP1ilcHRmBXBfrsSzQeK6KGqQTDxGaJ+OA9ohd8/6NWOCtDQtM7GfzGuRmNvWwZ1gSd20ST2jk2X+39N6v0OX2exwNdczwG0fUQy2NGaTkZoPtroSD4jgoPf9ZrESuPNGFCdDmzrw=="
+DOTENV_VAULT_TEST="UOFUKfanyEJ2B5NEfTu+Pe/I6LVCyXx2UC5Q87/eOocfxq6htZHVrno5Nq0Vjmv/aN2MvSELDwiqweccwno2s90JOhNe2/efrqLl3rEkJuqT8M0AJOfPAgc8Dr0RNx2J9rDl6WrD+I3V7Qs/8H7FuzVcbf4rFbE230D4UrIcD655AH6sqIijjgstUAq++YCiKtOXjQxFjx0uQ50O+NkXpzlI0swy7Fxn2+Fz5Q1mP7yv/lvwlUGeq7T2O4DdbVo8r2XXtmGnXIdgrLBcdHcpObrrZrBcCBD9EI5yNtOszkXjiHH1wXsLkjbr2iiU+fzmvRz8OQMprMdbcRJe8GULxxErOZY7z7c1uiy5HfCXWy2jiAdezxsNqscWiNAQL4LJIBFvCF/CvTdTOYTBZtjn9jiBaErFRY/Kmblf2LbtBaF5bTnaN92IwPpw/ifvgCShN28ZmCBUULxLL9T+rZP6ItjEzZ7kBspwQLKUbUGnYB4IwxWkFG3P/n4puKKSXLxfalOPIvIxnuDJm/hM8qfS6TV2VVq1BDZRgsj+WsAjiX8IpuddC2WL11SPoV5pf6n5zfddQ64pUz7J7fh1jR/1z+CZaKAAtiVvG8ittV8mGAR7l1GCG1x0p6qsN/2bToSQfpUuWhdnXVPiXYYwZpp61rFLVpBxSu2iE11IF65/QJtc/X0JnfCfRA+T8BhRoWPt3gp5dyRAkXJUHzTeLXW3LOM1ACmh4LYaZk5iDIzxGWtcF3wJZFzfBNw1Ggqpugt7o9l1QgWn05Tlwfw1hB0u+GnvgI7hkGGb18yHk1XOQSviDm/vTYuWm7g6WJ4rSITzDqQrqDtdudEqc4YNA1olpPKqoeEkLiahn/WpG2zaBYaQHRMocACw2t7om0lGEU7cOiYeugbtQ4xErX6xxkAm8QDnukj/Kj/U2o72JhdUGSW5taO3PYpoWUyUXnr0SyKs9d257NvfDtvLR6jNwhhA9DuVh3OjPdFIPyznI4hTcNX991baLF1OPG5i7pfb+AGGtJCMUp40k+WAj76YIw/VcgQuTSXLAV8/vHH4nQnS/HX6MNL9/cF0j6m7puBjhBiJqqZLwMrc3aGHV/YKvg3//d5l1F2tOxhXOFWbMrNHHuta7nx0Go1HTHd61JmKr/GsMb4s4jcG4vozusRPMFIEDH6rvbl2AxBCHnEKEJ7wGTM1mTvVBkfJGGYIdBJT7DHUiP+fJowL4ps+iwvFww4xumUXVYU0nW+5Qm1kIH2/wxiMK1n/v2P765Vsl23WbX3jLoE5iZTDbI+fgikZF132A8YqNa2aon6zzzKMdaLChg0k8dTmSdU/b7nL/i9J6RgUdWXvOZwKNBEDpdVgg+FOujW6fe3EpkRXV9aWjnAd5Y4QydPIm13uQisqQs73zxUA+qion6/rGJepkvVv9hpSNGvSWivbJK6ZzRrCqgYL38zvHaRfbDz55/JwwSSqxaqSWPHp+TLYeAgDgO1jJ071m7S8tirhKTn7Ur0tHUotyF5kfhx3wKhOyiLy6oh2a0f7Px9ukTNMGGwD2gu92LXGwS5QXvcY5ac+hm9Wy3iKMzApG4V+kQ880NE5zDwG3CZynQ6SjNqZVW3jWpzrIXCqMwOkWa34rB+aWGR/z/OrVBn2qKaPur+H/1Wy08I/H62o6NrVKW6/n8HrvreRUxtCGBz+3q5f9XewthUm5ahlQRKciIumD1kD4GRm361Fco/yPkfqgZrzipJVqC7v9BMrIla8TWzuXicchslhgOc8o99mXpRV3CiHHHD0UCffZ5vbqxwbY4084KWf0AhBV2PeB8wqlA9GtrVDjXbDeXsuGDxXdaOp9+jAf3J4CFbDAQgctJUKeWJLJ9tdRiy8nPFzdOZIjzaeC67/iYCMDvNhm0Z6vM3uq0rrgEfX4Wz7MVA3LYPPqjhWy71g5Svra5kuYBiSRA5El7LW3UhZmTSG"
 
diff --git a/NodeApp/src/commander/CommanderApp.ts b/NodeApp/src/commander/CommanderApp.ts
index 1f3619e55f76e4d40af303dc9fa0f39969521f03..56d33f5654dc604fbf597944227a40ee23215db5 100644
--- a/NodeApp/src/commander/CommanderApp.ts
+++ b/NodeApp/src/commander/CommanderApp.ts
@@ -11,6 +11,8 @@ import Config              from '../config/Config';
 import CompletionCommand   from './completion/CompletionCommand';
 import AuthCommand         from './auth/AuthCommand';
 import SessionCommand      from './auth/SessionCommand';
+import UpgradeCommand      from './UpgradeCommand';
+import TextStyle           from '../types/TextStyle';
 
 
 class CommanderApp {
@@ -77,8 +79,8 @@ class CommanderApp {
     private warnDevelopmentVersion() {
         if ( !SharedConfig.production ) {
             console.log(boxen(`This is a development (unstable) version of the DojoCLI.
-If you want to use the stable version, please install the package from the following url: 
-https://gitedu.hesge.ch/dojo_project/projects/ui/dojocli/-/releases/Latest`, {
+If you want to use the stable version, please execute this command: 
+${ TextStyle.CODE(' dojo upgrade ') }`, {
                 title         : 'Warning',
                 titleAlignment: 'center',
                 borderColor   : 'red',
@@ -95,8 +97,9 @@ https://gitedu.hesge.ch/dojo_project/projects/ui/dojocli/-/releases/Latest`, {
             const latestDojoCliVersion = stateConfigFile.getParam('latestDojoCliVersion') as string | null || '0.0.0';
             const latestDojoCliVersionNotification = stateConfigFile.getParam('latestDojoCliVersionNotification') as number | null || 0;
             if ( semver.lt(version, latestDojoCliVersion) && (new Date()).getTime() - latestDojoCliVersionNotification >= Config.versionUpdateInformationPeriodHours * 60 * 60 * 1000 ) {
-                console.log(boxen(`The ${ latestDojoCliVersion } version of the DojoCLI is available: 
-https://gitedu.hesge.ch/dojo_project/projects/ui/dojocli/-/releases/Latest`, {
+                console.log(boxen(`The ${ latestDojoCliVersion } version of the DojoCLI is available.
+You can upgrade the DojoCLI by executing this command: 
+${ TextStyle.CODE(' dojo upgrade ') }`, {
                     title         : 'Information',
                     titleAlignment: 'center',
                     borderColor   : 'blue',
@@ -116,6 +119,7 @@ https://gitedu.hesge.ch/dojo_project/projects/ui/dojocli/-/releases/Latest`, {
         AssignmentCommand.registerOnCommand(this.program);
         ExerciseCommand.registerOnCommand(this.program);
         CompletionCommand.registerOnCommand(this.program);
+        UpgradeCommand.registerOnCommand(this.program);
     }
 }
 
diff --git a/NodeApp/src/commander/UpgradeCommand.ts b/NodeApp/src/commander/UpgradeCommand.ts
new file mode 100644
index 0000000000000000000000000000000000000000..432fa315aafa5f1cada800746f645f9eeef1cbba
--- /dev/null
+++ b/NodeApp/src/commander/UpgradeCommand.ts
@@ -0,0 +1,63 @@
+import CommanderCommand from './CommanderCommand';
+import ora              from 'ora';
+import Config           from '../config/Config';
+import TextStyle        from '../types/TextStyle';
+import os               from 'os';
+import { spawn }        from 'child_process';
+
+
+class UpgradeCommand extends CommanderCommand {
+    protected commandName: string = 'upgrade';
+
+    protected defineCommand() {
+        this.command.description('upgrade the DojoCLI.')
+            .option('--pre-alpha', 'upgrade to the latest pre-alpha (dev) version. Attention it\'s an unstable version without support.')
+            .option('-o, --instructions', 'only display upgrade instructions.')
+            .action(this.commandAction.bind(this));
+    }
+
+    private displayInstructions(upgradeCommand: string, preAlpha: boolean) {
+        upgradeCommand = TextStyle.CODE(` ${ upgradeCommand } `);
+        
+        console.log(TextStyle.BLOCK(`You can upgrade DojoCLI on ${ os.platform() === 'darwin' ? 'macOS' : 'Linux' }:`));
+        ora().start().info(`By executing this command: ${ upgradeCommand }`);
+        console.log('or');
+        ora().start().info(`By downloading the release from: ${ preAlpha ? Config.gitlab.cliPreAlphaReleasePage : Config.gitlab.cliReleasePage }`);
+    }
+
+    private upgrade(upgradeCommand: string) {
+        const upgradeSpinner = ora().start('DojoCLI upgrade is in progress. Please wait...');
+
+        const upgradeProcess = spawn(upgradeCommand, {
+            shell: true
+        });
+
+        upgradeProcess.on('exit', code => {
+            code === null || code !== 0 ? upgradeSpinner.fail('DojoCLI upgrade failed... Please try again manually.') : upgradeSpinner.succeed('DojoCLI upgrade is successful.');
+        });
+    }
+
+    protected async commandAction(options: { preAlpha: boolean, instructions: boolean }): Promise<void> {
+        if ( os.platform() === 'win32' ) {
+            if ( !options.instructions ) {
+                ora().start().warn('Automatic upgrade is not supported on Windows. \n');
+            }
+
+            console.log(TextStyle.BLOCK('You can upgrade DojoCLI on Windows:'));
+            ora().start().info(`By downloading the release from: ${ options.preAlpha ? Config.gitlab.cliPreAlphaReleasePage : Config.gitlab.cliReleasePage }`);
+
+            return;
+        }
+
+        const upgradeCommand = `curl -L "https://dojo.isc-hesge.ch/installer.sh" | sh /dev/stdin${ options.preAlpha ? ' installer=pre-alpha' : '' }`;
+
+        if ( options.instructions ) {
+            this.displayInstructions(upgradeCommand, options.preAlpha);
+        } else {
+            this.upgrade(upgradeCommand);
+        }
+    }
+}
+
+
+export default new UpgradeCommand();
\ No newline at end of file
diff --git a/NodeApp/src/commander/completion/subcommands/CompletionScriptCommand.ts b/NodeApp/src/commander/completion/subcommands/CompletionScriptCommand.ts
index 45c5f3e52a167b0eb76c370e5010d75959f2e56e..a72d6223505872a28b67f59d058c1d309a1fb6bd 100644
--- a/NodeApp/src/commander/completion/subcommands/CompletionScriptCommand.ts
+++ b/NodeApp/src/commander/completion/subcommands/CompletionScriptCommand.ts
@@ -6,7 +6,7 @@ class CompletionScriptCommand extends CommanderCommand {
     protected commandName: string = 'script';
 
     protected defineCommand() {
-        this.command.description('generate script completion')
+        this.command.description('generate shell script completion')
             .addArgument(new Argument('<shell>', 'shell completion format').choices([ 'bash', 'zsh' ]))
             .action(this.commandAction.bind(this));
     }
diff --git a/NodeApp/src/config/Config.ts b/NodeApp/src/config/Config.ts
index 375f0cf22034eb73d958b8d711efe8fa9af9eb72..615a36942e83d11b0e63d3de6a89e8ff74944d5c 100644
--- a/NodeApp/src/config/Config.ts
+++ b/NodeApp/src/config/Config.ts
@@ -10,6 +10,7 @@ class Config {
 
     public readonly gitlab: {
         cliReleasePage: string
+        cliPreAlphaReleasePage: string
     };
 
     public readonly login: {
@@ -42,7 +43,8 @@ class Config {
         this.versionUpdateInformationPeriodHours = Number(process.env.VERSION_UPDATE_INFORMATION_PERIOD_HOURS || 24);
 
         this.gitlab = {
-            cliReleasePage: process.env.GITLAB_CLI_RELEASE_PAGE || ''
+            cliReleasePage        : process.env.GITLAB_CLI_RELEASE_PAGE || '',
+            cliPreAlphaReleasePage: process.env.GITLAB_CLI_PREALPHA_RELEASE_PAGE || ''
         };
 
         this.login = {
diff --git a/NodeApp/src/managers/HttpManager.ts b/NodeApp/src/managers/HttpManager.ts
index 38462759e0596492c2231f2ad291810e2af8a1e1..a28fc2162edd5ad3aa5082a33328d4eeb9bcf8d7 100644
--- a/NodeApp/src/managers/HttpManager.ts
+++ b/NodeApp/src/managers/HttpManager.ts
@@ -7,9 +7,9 @@ import { version }                                                    from '../c
 import DojoBackendResponse                                            from '../shared/types/Dojo/DojoBackendResponse';
 import DojoStatusCode                                                 from '../shared/types/Dojo/DojoStatusCode';
 import boxen                                                          from 'boxen';
-import Config                                                         from '../config/Config';
 import SharedConfig                                                   from '../shared/config/SharedConfig';
 import { stateConfigFile }                                            from '../config/ConfigFiles';
+import TextStyle                                                      from '../types/TextStyle';
 
 
 class HttpManager {
@@ -72,7 +72,7 @@ class HttpManager {
                     this.requestError('Client not recognized by the server. Please contact the administrator.');
                     break;
                 case DojoStatusCode.CLIENT_VERSION_NOT_SUPPORTED:
-                    this.requestError(`CLI version not anymore supported by the server. Please update the CLI.\nYou can download the latest stable version on this page:\n${ Config.gitlab.cliReleasePage }`);
+                    this.requestError(`CLI version not anymore supported by the server. Please update the CLI by executing this command:\n${ TextStyle.CODE(' dojo upgrade ') }`);
                     break;
                 default:
                     break;
diff --git a/NodeApp/src/types/TextStyle.ts b/NodeApp/src/types/TextStyle.ts
index d7fd0031614d80f943a61dcf3a6ab99a5f1bba6f..e3f82ea36ea530bd395a1282dc3100f370d5a7e3 100644
--- a/NodeApp/src/types/TextStyle.ts
+++ b/NodeApp/src/types/TextStyle.ts
@@ -3,7 +3,7 @@ import chalk from 'chalk';
 
 class TextStyle {
     public readonly BLOCK = chalk.cyan;
-    public readonly CODE = chalk.bgHex('F7F7F7').grey;
+    public readonly CODE = chalk.bgHex('F7F7F7').grey.italic;
     public readonly LIST_ITEM_NAME = chalk.magenta;
     public readonly URL = chalk.blue.underline;
     public readonly WARNING = chalk.red;