diff --git a/NodeApp/src/commander/CommanderApp.ts b/NodeApp/src/commander/CommanderApp.ts
index 7cb5952408f98e02b73517ca53746c41dc13c3ab..11a70b035680f25752044a352b054e5d91a20e65 100644
--- a/NodeApp/src/commander/CommanderApp.ts
+++ b/NodeApp/src/commander/CommanderApp.ts
@@ -13,6 +13,7 @@ import AuthCommand         from './auth/AuthCommand.js';
 import SessionCommand      from './auth/SessionCommand.js';
 import UpgradeCommand      from './UpgradeCommand.js';
 import TextStyle           from '../types/TextStyle.js';
+import TagCommand from './tags/TagCommand';
 
 
 class CommanderApp {
@@ -118,6 +119,7 @@ ${ TextStyle.CODE(' dojo upgrade ') }`, {
         SessionCommand.registerOnCommand(this.program);
         AssignmentCommand.registerOnCommand(this.program);
         ExerciseCommand.registerOnCommand(this.program);
+        TagCommand.registerOnCommand(this.program);
         CompletionCommand.registerOnCommand(this.program);
         UpgradeCommand.registerOnCommand(this.program);
     }
diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts
index 8c8a5a9685c1ab1fb2cabbfc4740f2914b54beae..2235ffdd4fbdc088ebe67576b1f6f30bb5e5da41 100644
--- a/NodeApp/src/managers/DojoBackendManager.ts
+++ b/NodeApp/src/managers/DojoBackendManager.ts
@@ -249,6 +249,21 @@ class DojoBackendManager {
             return false;
         }
     }
+    public async addTag(name : string, type: string) : Promise<User> {
+        return (await axios.post<DojoBackendResponse<User>>(this.getApiUrl(ApiRoute.ADD_TAG).replace('{{tageName}}', name).replace('{{tagType}}', type))).data.data;
+    }
+    public async deleteTag(name : string) : Promise<User> {
+        return (await axios.delete<DojoBackendResponse<User>>(this.getApiUrl(ApiRoute.DELETE_TAG).replace('{{tageName}}', name))).data.data;
+    }
+    public async getProposeTag(name : string) : Promise<User> {
+        return (await axios.get<DojoBackendResponse<User>>(this.getApiUrl(ApiRoute.PROPOSE_TAG).replace('{{tageName}}', name))).data.data;
+    }
+    public async postProposeTag(name : string, type: string) : Promise<User> {
+        return (await axios.post<DojoBackendResponse<User>>(this.getApiUrl(ApiRoute.PROPOSE_TAG).replace('{{tageName}}', name).replace('{{tagType}}', type))).data.data;
+    }
+    public async answerProposeTag(name : string) : Promise<User> {
+        return (await axios.patch<DojoBackendResponse<User>>(this.getApiUrl(ApiRoute.ANSWER_TAG_PROPOSAL).replace('{{tageName}}', name))).data.data;
+    }
 }
 
 
diff --git a/NodeApp/src/sharedByClients b/NodeApp/src/sharedByClients
index 55a94e77db69635e1ca837a52de29cb04d0b4138..60ce3995edec4f907f62dd03a32cc24660de51b1 160000
--- a/NodeApp/src/sharedByClients
+++ b/NodeApp/src/sharedByClients
@@ -1 +1 @@
-Subproject commit 55a94e77db69635e1ca837a52de29cb04d0b4138
+Subproject commit 60ce3995edec4f907f62dd03a32cc24660de51b1