diff --git a/NodeApp/package-lock.json b/NodeApp/package-lock.json
index ed153abcf0d2bf7fc6adaac6804de00f39edb7a4..348f49dc0943f7978b4999de37c5f06c5b0199e7 100644
--- a/NodeApp/package-lock.json
+++ b/NodeApp/package-lock.json
@@ -1,12 +1,12 @@
 {
     "name": "dojo_cli",
-    "version": "3.1.0",
+    "version": "3.1.2",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
             "name": "dojo_cli",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "license": "AGPLv3",
             "dependencies": {
                 "ajv": "^8.12.0",
@@ -22,7 +22,7 @@
                 "inquirer": "^8.2.6",
                 "json5": "^2.2.3",
                 "jsonwebtoken": "^8.5.1",
-                "openurl": "^1.1.1",
+                "open": "^8.4.2",
                 "ora": "^5.4.1",
                 "tar-stream": "^3.1.6",
                 "winston": "^3.11.0",
@@ -36,7 +36,6 @@
                 "@types/inquirer": "^8.2.10",
                 "@types/jsonwebtoken": "^8.5.9",
                 "@types/node": "^18.19.2",
-                "@types/openurl": "^1.0.3",
                 "@types/tar-stream": "^3.1.3",
                 "@typescript-eslint/eslint-plugin": "^6.13.2",
                 "@typescript-eslint/parser": "^6.13.2",
@@ -857,15 +856,6 @@
                 "undici-types": "~5.26.4"
             }
         },
-        "node_modules/@types/openurl": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/@types/openurl/-/openurl-1.0.3.tgz",
-            "integrity": "sha512-rdWpxNve8iUBizep3BwjGzcdfk2XeXeeFiMwIgLN6dAKxCusfFC6H9XVvfPeNObRFpSgqI+HVmoG7UOB9HEnBQ==",
-            "dev": true,
-            "dependencies": {
-                "@types/node": "*"
-            }
-        },
         "node_modules/@types/semver": {
             "version": "7.5.6",
             "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
@@ -1719,6 +1709,14 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/define-lazy-prop": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+            "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/delayed-stream": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -2799,7 +2797,6 @@
             "version": "2.2.1",
             "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
             "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
-            "dev": true,
             "bin": {
                 "is-docker": "cli.js"
             },
@@ -2901,7 +2898,6 @@
             "version": "2.2.0",
             "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
             "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
-            "dev": true,
             "dependencies": {
                 "is-docker": "^2.0.0"
             },
@@ -3455,10 +3451,21 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/openurl": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
-            "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA=="
+        "node_modules/open": {
+            "version": "8.4.2",
+            "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+            "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+            "dependencies": {
+                "define-lazy-prop": "^2.0.0",
+                "is-docker": "^2.1.1",
+                "is-wsl": "^2.2.0"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
         },
         "node_modules/optionator": {
             "version": "0.9.3",
diff --git a/NodeApp/package.json b/NodeApp/package.json
index d98d45ada9f8d1e639e47080cb44cc2466294190..1b72e69833e4ed195b6c76fc52eb8c798cb2f0f7 100644
--- a/NodeApp/package.json
+++ b/NodeApp/package.json
@@ -1,7 +1,7 @@
 {
     "name"           : "dojo_cli",
     "description"    : "CLI of the Dojo project",
-    "version"        : "3.1.1",
+    "version"        : "3.1.2",
     "license"        : "AGPLv3",
     "author"         : "Michaƫl Minelli <dojo@minelli.me>",
     "main"           : "dist/app.js",
@@ -46,7 +46,7 @@
         "inquirer"         : "^8.2.6",
         "json5"            : "^2.2.3",
         "jsonwebtoken"     : "^8.5.1",
-        "openurl"          : "^1.1.1",
+        "open"             : "^8.4.2",
         "ora"              : "^5.4.1",
         "tar-stream"       : "^3.1.6",
         "winston"          : "^3.11.0",
@@ -57,7 +57,6 @@
         "@types/inquirer"                 : "^8.2.10",
         "@types/jsonwebtoken"             : "^8.5.9",
         "@types/node"                     : "^18.19.2",
-        "@types/openurl"                  : "^1.0.3",
         "@types/tar-stream"               : "^3.1.3",
         "@typescript-eslint/eslint-plugin": "^6.13.2",
         "@typescript-eslint/parser"       : "^6.13.2",
diff --git a/NodeApp/src/managers/SessionManager.ts b/NodeApp/src/managers/SessionManager.ts
index 9bbd640f523b04e530b5fcaadf591ee2b208e6e0..18f91796c6bf0075f4d5567af3ad4d16e714d924 100644
--- a/NodeApp/src/managers/SessionManager.ts
+++ b/NodeApp/src/managers/SessionManager.ts
@@ -12,7 +12,6 @@ import Config                    from '../config/Config';
 import ClientsSharedConfig       from '../sharedByClients/config/ClientsSharedConfig';
 import DojoGitlabCredentials     from '../sharedByClients/types/Dojo/DojoGitlabCredentials';
 import * as http                 from 'http';
-import * as openurl              from 'openurl';
 import EventEmitter              from 'events';
 import SharedConfig              from '../shared/config/SharedConfig';
 import chalk                     from 'chalk';
@@ -20,6 +19,7 @@ import inquirer                  from 'inquirer';
 import SharedGitlabManager       from '../shared/managers/SharedGitlabManager';
 import GitlabManager             from './GitlabManager';
 import GitlabToken               from '../shared/types/Gitlab/GitlabToken';
+import open                      from 'open';
 
 
 class LoginServer {
@@ -141,6 +141,11 @@ class SessionManager {
 
     private getGitlabCodeFromGraphicEnvironment(): Promise<string> {
         return new Promise<string>((resolve, reject) => {
+            ora({
+                    text  : 'GUI mode (for headless mode, use the --cli option)',
+                    indent: 4
+                }).start().info();
+
             let currentSpinner: ora.Ora = ora({
                                                   text  : 'Starting login server',
                                                   indent: 4
@@ -150,26 +155,10 @@ class SessionManager {
             loginServer.events.on('started', () => {
                 currentSpinner.succeed('Login server started');
                 currentSpinner = ora({
-                                         text  : 'Waiting for user to authorize the application in his web browser',
+                                         text  : `Waiting for user to authorize the application in his web browser. If the browser does not open automatically, please go to : ${ Config.login.gitlab.url.code }`,
                                          indent: 4
                                      }).start();
-                openurl.open(Config.login.gitlab.url.code, (error) => {
-                    if ( error ) {
-                        currentSpinner.warn('Error while opening the web browser. Attempting the login in CLI only mode (headless mode).');
-                        currentSpinner = ora({
-                                                 text  : 'Stopping login server',
-                                                 indent: 4
-                                             }).start();
-                        loginServer.events.on('stopped', () => {
-                            try {
-                                resolve(this.getGitlabCodeFromHeadlessEnvironment());
-                            } catch ( error ) {
-                                reject(error);
-                            }
-                        });
-                        loginServer.stop();
-                    }
-                });
+                open(Config.login.gitlab.url.code).then();
             });
             loginServer.events.on('error', (error: string) => {
                 currentSpinner.fail(`Login server error: ${ error }`);