diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml
index cda5be48d4..e344898855 100644
--- a/common/config/rush/pnpm-lock.yaml
+++ b/common/config/rush/pnpm-lock.yaml
@@ -61,10 +61,10 @@ dependencies:
     version: 1.49.1
   '@rush-temp/account':
     specifier: file:./projects/account.tgz
-    version: file:projects/account.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2)
+    version: file:projects/account.tgz(@types/node@20.11.19)(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2)
   '@rush-temp/account-service':
     specifier: file:./projects/account-service.tgz
-    version: file:projects/account-service.tgz
+    version: file:projects/account-service.tgz(snappy@7.2.2)
   '@rush-temp/activity':
     specifier: file:./projects/activity.tgz
     version: file:projects/activity.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2)
@@ -109,7 +109,7 @@ dependencies:
     version: file:projects/attachment-resources.tgz(@types/node@20.11.19)(esbuild@0.24.2)(postcss-load-config@4.0.2)(postcss@8.4.35)(ts-node@10.9.2)
   '@rush-temp/auth-providers':
     specifier: file:./projects/auth-providers.tgz
-    version: file:projects/auth-providers.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2)
+    version: file:projects/auth-providers.tgz(@types/node@20.11.19)(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2)
   '@rush-temp/backup-service':
     specifier: file:./projects/backup-service.tgz
     version: file:projects/backup-service.tgz(esbuild@0.24.2)(ts-node@10.9.2)
@@ -166,7 +166,7 @@ dependencies:
     version: file:projects/collaboration.tgz(esbuild@0.24.2)(ts-node@10.9.2)
   '@rush-temp/collaborator':
     specifier: file:./projects/collaborator.tgz
-    version: file:projects/collaborator.tgz(@tiptap/pm@2.6.6)(bufferutil@4.0.8)(utf-8-validate@6.0.4)(y-protocols@1.0.6)
+    version: file:projects/collaborator.tgz(@tiptap/pm@2.6.6)(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)(y-protocols@1.0.6)
   '@rush-temp/collaborator-client':
     specifier: file:./projects/collaborator-client.tgz
     version: file:projects/collaborator-client.tgz(ts-node@10.9.2)
@@ -580,7 +580,7 @@ dependencies:
     version: file:projects/model-workbench.tgz
   '@rush-temp/mongo':
     specifier: file:./projects/mongo.tgz
-    version: file:projects/mongo.tgz(esbuild@0.24.2)(ts-node@10.9.2)
+    version: file:projects/mongo.tgz(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2)
   '@rush-temp/notification':
     specifier: file:./projects/notification.tgz
     version: file:projects/notification.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2)
@@ -613,19 +613,19 @@ dependencies:
     version: file:projects/platform-rig.tgz(@typescript-eslint/eslint-plugin@6.21.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(svelte@4.2.19)
   '@rush-temp/pod-account':
     specifier: file:./projects/pod-account.tgz
-    version: file:projects/pod-account.tgz
+    version: file:projects/pod-account.tgz(snappy@7.2.2)
   '@rush-temp/pod-ai-bot':
     specifier: file:./projects/pod-ai-bot.tgz
-    version: file:projects/pod-ai-bot.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)(zod@3.23.8)
+    version: file:projects/pod-ai-bot.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)(zod@3.23.8)
   '@rush-temp/pod-analytics-collector':
     specifier: file:./projects/pod-analytics-collector.tgz
-    version: file:projects/pod-analytics-collector.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)
+    version: file:projects/pod-analytics-collector.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)
   '@rush-temp/pod-backup':
     specifier: file:./projects/pod-backup.tgz
     version: file:projects/pod-backup.tgz
   '@rush-temp/pod-calendar':
     specifier: file:./projects/pod-calendar.tgz
-    version: file:projects/pod-calendar.tgz(bufferutil@4.0.8)(ts-node@10.9.2)(utf-8-validate@6.0.4)
+    version: file:projects/pod-calendar.tgz(bufferutil@4.0.8)(snappy@7.2.2)(ts-node@10.9.2)(utf-8-validate@6.0.4)
   '@rush-temp/pod-collaborator':
     specifier: file:./projects/pod-collaborator.tgz
     version: file:projects/pod-collaborator.tgz
@@ -637,10 +637,10 @@ dependencies:
     version: file:projects/pod-fulltext.tgz
   '@rush-temp/pod-github':
     specifier: file:./projects/pod-github.tgz
-    version: file:projects/pod-github.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)(y-prosemirror@1.2.12)
+    version: file:projects/pod-github.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)(y-prosemirror@1.2.12)
   '@rush-temp/pod-gmail':
     specifier: file:./projects/pod-gmail.tgz
-    version: file:projects/pod-gmail.tgz(ts-node@10.9.2)
+    version: file:projects/pod-gmail.tgz(snappy@7.2.2)(ts-node@10.9.2)
   '@rush-temp/pod-love':
     specifier: file:./projects/pod-love.tgz
     version: file:projects/pod-love.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)
@@ -655,19 +655,19 @@ dependencies:
     version: file:projects/pod-ses.tgz
   '@rush-temp/pod-sign':
     specifier: file:./projects/pod-sign.tgz
-    version: file:projects/pod-sign.tgz
+    version: file:projects/pod-sign.tgz(snappy@7.2.2)
   '@rush-temp/pod-stats':
     specifier: file:./projects/pod-stats.tgz
     version: file:projects/pod-stats.tgz
   '@rush-temp/pod-telegram':
     specifier: file:./projects/pod-telegram.tgz
-    version: file:projects/pod-telegram.tgz(bufferutil@4.0.8)(ts-node@10.9.2)(utf-8-validate@6.0.4)
+    version: file:projects/pod-telegram.tgz(bufferutil@4.0.8)(snappy@7.2.2)(ts-node@10.9.2)(utf-8-validate@6.0.4)
   '@rush-temp/pod-telegram-bot':
     specifier: file:./projects/pod-telegram-bot.tgz
-    version: file:projects/pod-telegram-bot.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)
+    version: file:projects/pod-telegram-bot.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)
   '@rush-temp/pod-workspace':
     specifier: file:./projects/pod-workspace.tgz
-    version: file:projects/pod-workspace.tgz
+    version: file:projects/pod-workspace.tgz(snappy@7.2.2)
   '@rush-temp/postgres':
     specifier: file:./projects/postgres.tgz
     version: file:projects/postgres.tgz(esbuild@0.24.2)(ts-node@10.9.2)
@@ -958,7 +958,7 @@ dependencies:
     version: file:projects/server-token.tgz(esbuild@0.24.2)(ts-node@10.9.2)
   '@rush-temp/server-tool':
     specifier: file:./projects/server-tool.tgz
-    version: file:projects/server-tool.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2)
+    version: file:projects/server-tool.tgz(@types/node@20.11.19)(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2)
   '@rush-temp/server-tracker':
     specifier: file:./projects/server-tracker.tgz
     version: file:projects/server-tracker.tgz(esbuild@0.24.2)(ts-node@10.9.2)
@@ -1090,7 +1090,7 @@ dependencies:
     version: file:projects/time-resources.tgz(@tiptap/core@2.6.6)(@tiptap/pm@2.6.6)(@types/node@20.11.19)(esbuild@0.24.2)(postcss-load-config@4.0.2)(postcss@8.4.35)(ts-node@10.9.2)
   '@rush-temp/tool':
     specifier: file:./projects/tool.tgz
-    version: file:projects/tool.tgz
+    version: file:projects/tool.tgz(snappy@7.2.2)
   '@rush-temp/tracker':
     specifier: file:./projects/tracker.tgz
     version: file:projects/tracker.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2)
@@ -1235,6 +1235,9 @@ dependencies:
   '@tiptap/extension-text-align':
     specifier: ~2.11.0
     version: 2.11.0(@tiptap/core@2.6.6)
+  '@tiptap/extension-text-style':
+    specifier: ~2.11.0
+    version: 2.11.0(@tiptap/core@2.6.6)
   '@tiptap/extension-typography':
     specifier: ^2.6.6
     version: 2.6.6(@tiptap/core@2.6.6)
@@ -1373,6 +1376,9 @@ dependencies:
   '@types/sharp':
     specifier: ~0.32.0
     version: 0.32.0
+  '@types/snappyjs':
+    specifier: ^0.7.1
+    version: 0.7.1
   '@types/tar-stream':
     specifier: ^3.1.3
     version: 3.1.3
@@ -1735,7 +1741,7 @@ dependencies:
     version: 8.0.0
   mongodb:
     specifier: ^6.12.0
-    version: 6.12.0
+    version: 6.12.0(snappy@7.2.2)
   morgan:
     specifier: ^1.10.0
     version: 1.10.0
@@ -1844,6 +1850,12 @@ dependencies:
   smee-client:
     specifier: ^1.2.3
     version: 1.2.5
+  snappy:
+    specifier: ^7.2.2
+    version: 7.2.2
+  snappyjs:
+    specifier: ^0.7.0
+    version: 0.7.0
   style-loader:
     specifier: ^3.3.1
     version: 3.3.4(webpack@5.97.1)
@@ -4921,6 +4933,123 @@ packages:
     dev: false
     optional: true
 
+  /@napi-rs/snappy-android-arm-eabi@7.2.2:
+    resolution: {integrity: sha512-H7DuVkPCK5BlAr1NfSU8bDEN7gYs+R78pSHhDng83QxRnCLmVIZk33ymmIwurmoA1HrdTxbkbuNl+lMvNqnytw==}
+    engines: {node: '>= 10'}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-android-arm64@7.2.2:
+    resolution: {integrity: sha512-2R/A3qok+nGtpVK8oUMcrIi5OMDckGYNoBLFyli3zp8w6IArPRfg1yOfVUcHvpUDTo9T7LOS1fXgMOoC796eQw==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-darwin-arm64@7.2.2:
+    resolution: {integrity: sha512-USgArHbfrmdbuq33bD5ssbkPIoT7YCXCRLmZpDS6dMDrx+iM7eD2BecNbOOo7/v1eu6TRmQ0xOzeQ6I/9FIi5g==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-darwin-x64@7.2.2:
+    resolution: {integrity: sha512-0APDu8iO5iT0IJKblk2lH0VpWSl9zOZndZKnBYIc+ei1npw2L5QvuErFOTeTdHBtzvUHASB+9bvgaWnQo4PvTQ==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-freebsd-x64@7.2.2:
+    resolution: {integrity: sha512-mRTCJsuzy0o/B0Hnp9CwNB5V6cOJ4wedDTWEthsdKHSsQlO7WU9W1yP7H3Qv3Ccp/ZfMyrmG98Ad7u7lG58WXA==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-linux-arm-gnueabihf@7.2.2:
+    resolution: {integrity: sha512-v1uzm8+6uYjasBPcFkv90VLZ+WhLzr/tnfkZ/iD9mHYiULqkqpRuC8zvc3FZaJy5wLQE9zTDkTJN1IvUcZ+Vcg==}
+    engines: {node: '>= 10'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-linux-arm64-gnu@7.2.2:
+    resolution: {integrity: sha512-LrEMa5pBScs4GXWOn6ZYXfQ72IzoolZw5txqUHVGs8eK4g1HR9HTHhb2oY5ySNaKakG5sOgMsb1rwaEnjhChmQ==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-linux-arm64-musl@7.2.2:
+    resolution: {integrity: sha512-3orWZo9hUpGQcB+3aTLW7UFDqNCQfbr0+MvV67x8nMNYj5eAeUtMmUE/HxLznHO4eZ1qSqiTwLbVx05/Socdlw==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-linux-x64-gnu@7.2.2:
+    resolution: {integrity: sha512-jZt8Jit/HHDcavt80zxEkDpH+R1Ic0ssiVCoueASzMXa7vwPJeF4ZxZyqUw4qeSy7n8UUExomu8G8ZbP6VKhgw==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-linux-x64-musl@7.2.2:
+    resolution: {integrity: sha512-Dh96IXgcZrV39a+Tej/owcd9vr5ihiZ3KRix11rr1v0MWtVb61+H1GXXlz6+Zcx9y8jM1NmOuiIuJwkV4vZ4WA==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-win32-arm64-msvc@7.2.2:
+    resolution: {integrity: sha512-9No0b3xGbHSWv2wtLEn3MO76Yopn1U2TdemZpCaEgOGccz1V+a/1d16Piz3ofSmnA13HGFz3h9NwZH9EOaIgYA==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-win32-ia32-msvc@7.2.2:
+    resolution: {integrity: sha512-QiGe+0G86J74Qz1JcHtBwM3OYdTni1hX1PFyLRo3HhQUSpmi13Bzc1En7APn+6Pvo7gkrcy81dObGLDSxFAkQQ==}
+    engines: {node: '>= 10'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: false
+    optional: true
+
+  /@napi-rs/snappy-win32-x64-msvc@7.2.2:
+    resolution: {integrity: sha512-a43cyx1nK0daw6BZxVcvDEXxKMFLSBSDTAhsFD0VqSKcC7MGUBMaqyoWUcMiI7LBSz4bxUmxDWKfCYzpEmeb3w==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: false
+    optional: true
+
   /@nodelib/fs.scandir@2.1.5:
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     engines: {node: '>= 8'}
@@ -6920,13 +7049,6 @@ packages:
       '@types/koa': 2.15.0
     dev: false
 
-  /@types/koa-morgan@1.0.8:
-    resolution: {integrity: sha512-2GredUi+iA3V0XrbzdsOAYgwj4F6+FnN+f5YjoKjessIE2lrMkqnc06YQQnzbMG75hRsXjyD+p6d5vlI70s1vg==}
-    dependencies:
-      '@types/koa': 2.14.0
-      '@types/morgan': 1.9.9
-    dev: false
-
   /@types/koa-passport@6.0.3:
     resolution: {integrity: sha512-9iV8aiSICfBZpqkkzUshqxN2wTuoj4HGRRH0Idv3lHhXV9rZRCOyDdJSg+vZ6RHSQg0ZeBeAdIL4r/l8bR4SPA==}
     dependencies:
@@ -6947,19 +7069,6 @@ packages:
       '@types/koa': 2.15.0
     dev: false
 
-  /@types/koa@2.14.0:
-    resolution: {integrity: sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==}
-    dependencies:
-      '@types/accepts': 1.3.7
-      '@types/content-disposition': 0.5.8
-      '@types/cookies': 0.9.0
-      '@types/http-assert': 1.5.5
-      '@types/http-errors': 2.0.4
-      '@types/keygrip': 1.0.6
-      '@types/koa-compose': 3.2.8
-      '@types/node': 20.11.19
-    dev: false
-
   /@types/koa@2.15.0:
     resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==}
     dependencies:
@@ -7194,6 +7303,10 @@ packages:
       sharp: 0.32.6
     dev: false
 
+  /@types/snappyjs@0.7.1:
+    resolution: {integrity: sha512-OxjzJ6cQZstysMh6PEwZWmK9qlKZyezHJKOkcUkZDooSFuog2votUEKkxMaTq51UQF3cJkXKQ+XGlj4FSl8JQQ==}
+    dev: false
+
   /@types/sockjs@0.3.36:
     resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
     dependencies:
@@ -15095,12 +15208,6 @@ packages:
       koa-compose: 4.1.0
     dev: false
 
-  /koa-morgan@1.0.1:
-    resolution: {integrity: sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==}
-    dependencies:
-      morgan: 1.10.0
-    dev: false
-
   /koa-passport@6.0.0:
     resolution: {integrity: sha512-bgcrQN7Ylfgi1PVr5l6hHYkr38RHUzx+ty3m7e/xoTte8MR0zbDt6+pvP3/nuF/yXL6Ba7IzX1rSqmCy6OrrIw==}
     engines: {node: '>= 4'}
@@ -16207,7 +16314,7 @@ packages:
       whatwg-url: 13.0.0
     dev: false
 
-  /mongodb@6.12.0:
+  /mongodb@6.12.0(snappy@7.2.2):
     resolution: {integrity: sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA==}
     engines: {node: '>=16.20.1'}
     peerDependencies:
@@ -16237,6 +16344,7 @@ packages:
       '@mongodb-js/saslprep': 1.1.9
       bson: 6.10.1
       mongodb-connection-string-url: 3.0.0
+      snappy: 7.2.2
     dev: false
 
   /mongodb@6.3.0:
@@ -19009,6 +19117,29 @@ packages:
       - supports-color
     dev: false
 
+  /snappy@7.2.2:
+    resolution: {integrity: sha512-iADMq1kY0v3vJmGTuKcFWSXt15qYUz7wFkArOrsSg0IFfI3nJqIJvK2/ZbEIndg7erIJLtAVX2nSOqPz7DcwbA==}
+    engines: {node: '>= 10'}
+    optionalDependencies:
+      '@napi-rs/snappy-android-arm-eabi': 7.2.2
+      '@napi-rs/snappy-android-arm64': 7.2.2
+      '@napi-rs/snappy-darwin-arm64': 7.2.2
+      '@napi-rs/snappy-darwin-x64': 7.2.2
+      '@napi-rs/snappy-freebsd-x64': 7.2.2
+      '@napi-rs/snappy-linux-arm-gnueabihf': 7.2.2
+      '@napi-rs/snappy-linux-arm64-gnu': 7.2.2
+      '@napi-rs/snappy-linux-arm64-musl': 7.2.2
+      '@napi-rs/snappy-linux-x64-gnu': 7.2.2
+      '@napi-rs/snappy-linux-x64-musl': 7.2.2
+      '@napi-rs/snappy-win32-arm64-msvc': 7.2.2
+      '@napi-rs/snappy-win32-ia32-msvc': 7.2.2
+      '@napi-rs/snappy-win32-x64-msvc': 7.2.2
+    dev: false
+
+  /snappyjs@0.7.0:
+    resolution: {integrity: sha512-u5iEEXkMe2EInQio6Wv9LWHOQYRDbD2O9hzS27GpT/lwfIQhTCnHCTqedqHIHe9ZcvQo+9au6vngQayipz1NYw==}
+    dev: false
+
   /sockjs@0.3.24:
     resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
     dependencies:
@@ -21793,8 +21924,9 @@ packages:
     resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
     dev: false
 
-  file:projects/account-service.tgz:
+  file:projects/account-service.tgz(snappy@7.2.2):
     resolution: {integrity: sha512-oAW0UD+ThGbtuXdyaoWJoe93XY7bLO0K2uZneePiHsI3KZM3z9st9fjxSbJE4wmC9iE2wmzNYTN6AHrcFxvRrQ==, tarball: file:projects/account-service.tgz}
+    id: file:projects/account-service.tgz
     name: '@rush-temp/account-service'
     version: 0.0.0
     dependencies:
@@ -21802,7 +21934,6 @@ packages:
       '@types/jest': 29.5.12
       '@types/koa': 2.15.0
       '@types/koa-bodyparser': 4.3.12
-      '@types/koa-morgan': 1.0.8
       '@types/koa-router': 7.4.8
       '@types/koa__cors': 5.0.0
       '@types/node': 20.11.19
@@ -21818,9 +21949,8 @@ packages:
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       koa: 2.15.3
       koa-bodyparser: 4.4.1
-      koa-morgan: 1.0.1
       koa-router: 12.0.1
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
@@ -21843,7 +21973,7 @@ packages:
       - supports-color
     dev: false
 
-  file:projects/account.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2):
+  file:projects/account.tgz(@types/node@20.11.19)(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2):
     resolution: {integrity: sha512-aFUxA1twR0m+7sDVFXyKoeVQtVLMrr973LpLK6LHrRa+PD010X6+AyoOkkyVJKFN0Q6zu2Oqz88PsEt50Z2Mjg==, tarball: file:projects/account.tgz}
     id: file:projects/account.tgz
     name: '@rush-temp/account'
@@ -21859,7 +21989,7 @@ packages:
       eslint-plugin-n: 15.7.0(eslint@8.56.0)
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       otp-generator: 4.0.1
       postgres: 3.4.5
       prettier: 3.2.5
@@ -22383,7 +22513,7 @@ packages:
       - ts-node
     dev: false
 
-  file:projects/auth-providers.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2):
+  file:projects/auth-providers.tgz(@types/node@20.11.19)(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2):
     resolution: {integrity: sha512-jUJhz8FiPT3x0ybVjdPysK9HBA/E1UzU+QraBxLurUXjwKzqnob4Jw112MUJzyHjAiAmYQGYq7jEePiav6nnMQ==, tarball: file:projects/auth-providers.tgz}
     id: file:projects/auth-providers.tgz
     name: '@rush-temp/auth-providers'
@@ -22410,7 +22540,7 @@ packages:
       koa-passport: 6.0.0
       koa-router: 12.0.1
       koa-session: 6.4.0
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       openid-client: 5.7.0
       passport-custom: 1.1.1
       passport-github2: 0.1.12
@@ -22904,12 +23034,13 @@ packages:
     dev: false
 
   file:projects/client-resources.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2):
-    resolution: {integrity: sha512-zqTNrWtf8+kFkWdM9yok0EgXP9QsxCFomNW1HWyBp0arKXDQMjgA6UJ5qviDhYPjFzQzJil5DRax82wZfvVSkw==, tarball: file:projects/client-resources.tgz}
+    resolution: {integrity: sha512-s2VP7YDaXR6VMITb2/kgWe69RxM1XaTdNHQJfliJfFaV88egZSK6JNmB40FoA/QY0Vvf7SmJH/Ld+bvjZqGpWA==, tarball: file:projects/client-resources.tgz}
     id: file:projects/client-resources.tgz
     name: '@rush-temp/client-resources'
     version: 0.0.0
     dependencies:
       '@types/jest': 29.5.12
+      '@types/snappyjs': 0.7.1
       '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3)
       eslint: 8.56.0
@@ -22919,6 +23050,7 @@ packages:
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       prettier: 3.2.5
+      snappyjs: 0.7.0
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       typescript: 5.3.3
     transitivePeerDependencies:
@@ -22999,13 +23131,14 @@ packages:
     dev: false
 
   file:projects/cloud-transactor.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(ts-node@10.9.2)(utf-8-validate@6.0.4):
-    resolution: {integrity: sha512-6kBv/3KfTsOvsDrfVXQvQwtLM72ltx4oPHc3cJ9xtG82XLeQLLpeJmCy6CNDVOtXaqnagwF5TKm/zCw4sc/dFQ==, tarball: file:projects/cloud-transactor.tgz}
+    resolution: {integrity: sha512-sLn0+hzDxI1PlNcx3XiLzwU9xU+mui2QodGtjpn7oS5NWnGWM42fbnwfVP35akfki8kKOZ3pE5CcMKQ6ffjUzg==, tarball: file:projects/cloud-transactor.tgz}
     id: file:projects/cloud-transactor.tgz
     name: '@rush-temp/cloud-transactor'
     version: 0.0.0
     dependencies:
       '@cloudflare/workers-types': 4.20241022.0
       '@types/jest': 29.5.12
+      '@types/snappyjs': 0.7.1
       '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.6.2)
       '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.6.2)
       esbuild: 0.24.2
@@ -23017,6 +23150,7 @@ packages:
       itty-router: 5.0.18
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       prettier: 3.2.5
+      snappyjs: 0.7.0
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.6.2)
       typescript: 5.6.2
       wrangler: 3.97.0(@cloudflare/workers-types@4.20241022.0)(bufferutil@4.0.8)(utf-8-validate@6.0.4)
@@ -23097,7 +23231,7 @@ packages:
       - ts-node
     dev: false
 
-  file:projects/collaborator.tgz(@tiptap/pm@2.6.6)(bufferutil@4.0.8)(utf-8-validate@6.0.4)(y-protocols@1.0.6):
+  file:projects/collaborator.tgz(@tiptap/pm@2.6.6)(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)(y-protocols@1.0.6):
     resolution: {integrity: sha512-5wz+fFNfftwF7QP2u/dvfT2DYB7xFgplfhalPFYz8sLmXJ0NPVsXcr7qve637Vw8tjwjf4zzk3MJpfeJRcWLXQ==, tarball: file:projects/collaborator.tgz}
     id: file:projects/collaborator.tgz
     name: '@rush-temp/collaborator'
@@ -23127,7 +23261,7 @@ packages:
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       express: 4.21.2
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
@@ -26821,7 +26955,7 @@ packages:
       - ts-node
     dev: false
 
-  file:projects/mongo.tgz(esbuild@0.24.2)(ts-node@10.9.2):
+  file:projects/mongo.tgz(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2):
     resolution: {integrity: sha512-aqU57iG6awiTX9qWSrzXMKyHSbt0V8mKAutQjE3uCx9FdPpnGiZjJflWsMS5PaZ4MdNazv2vUg4XPDHKCc4A/A==, tarball: file:projects/mongo.tgz}
     id: file:projects/mongo.tgz
     name: '@rush-temp/mongo'
@@ -26838,7 +26972,7 @@ packages:
       eslint-plugin-n: 15.7.0(eslint@8.56.0)
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       typescript: 5.3.3
@@ -27209,8 +27343,9 @@ packages:
       - ts-node
     dev: false
 
-  file:projects/pod-account.tgz:
+  file:projects/pod-account.tgz(snappy@7.2.2):
     resolution: {integrity: sha512-DCZlxY22Z2TNo08v2hcwz+2yg0HfoH2psDkdlVGlzX5KwZt6knEzAUZeb+MiOb7KpGSQoKp4jJDcydUcC+QsVQ==, tarball: file:projects/pod-account.tgz}
+    id: file:projects/pod-account.tgz
     name: '@rush-temp/pod-account'
     version: 0.0.0
     dependencies:
@@ -27234,9 +27369,8 @@ packages:
       koa: 2.15.3
       koa-bodyparser: 4.4.1
       koa-router: 12.0.1
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
-      prettier-plugin-svelte: 3.2.1(prettier@3.2.5)(svelte@4.2.11)
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
       typescript: 5.3.3
@@ -27258,7 +27392,7 @@ packages:
       - supports-color
     dev: false
 
-  file:projects/pod-ai-bot.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)(zod@3.23.8):
+  file:projects/pod-ai-bot.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)(zod@3.23.8):
     resolution: {integrity: sha512-R2ByQWsnvxxBGk/Ql7z8CK8NRb4XXREC0rndthdpfqw1dhwofuHiHpU2sb7L+OTHiz0do16L5gOLb7R1CbMecw==, tarball: file:projects/pod-ai-bot.tgz}
     id: file:projects/pod-ai-bot.tgz
     name: '@rush-temp/pod-ai-bot'
@@ -27269,7 +27403,6 @@ packages:
       '@types/express': 4.17.21
       '@types/jest': 29.5.12
       '@types/node': 20.11.19
-      '@types/node-fetch': 2.6.11
       '@types/uuid': 8.3.4
       '@types/ws': 8.5.11
       '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
@@ -27288,8 +27421,7 @@ packages:
       form-data: 4.0.0
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       js-tiktoken: 1.0.14
-      mongodb: 6.12.0
-      node-fetch: 2.7.0
+      mongodb: 6.12.0(snappy@7.2.2)
       openai: 4.56.0(zod@3.23.8)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
@@ -27319,7 +27451,7 @@ packages:
       - zod
     dev: false
 
-  file:projects/pod-analytics-collector.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4):
+  file:projects/pod-analytics-collector.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4):
     resolution: {integrity: sha512-KuE4/ZuLMoEOqY2QyXv7AD0uPt5J7Uwt6jP70iWXcR2oET1+BhD2QTm/9MNsgOsnfiqp0Tdv06pfu7fb2A2Gcw==, tarball: file:projects/pod-analytics-collector.tgz}
     id: file:projects/pod-analytics-collector.tgz
     name: '@rush-temp/pod-analytics-collector'
@@ -27330,7 +27462,6 @@ packages:
       '@types/express': 4.17.21
       '@types/jest': 29.5.12
       '@types/node': 20.11.19
-      '@types/ws': 8.5.11
       '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3)
       cors: 2.8.5
@@ -27344,13 +27475,12 @@ packages:
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       express: 4.21.2
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       puppeteer: 22.14.0(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@6.0.4)
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
       typescript: 5.3.3
-      ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
     transitivePeerDependencies:
       - '@aws-sdk/credential-providers'
       - '@babel/core'
@@ -27407,7 +27537,7 @@ packages:
       - supports-color
     dev: false
 
-  file:projects/pod-calendar.tgz(bufferutil@4.0.8)(ts-node@10.9.2)(utf-8-validate@6.0.4):
+  file:projects/pod-calendar.tgz(bufferutil@4.0.8)(snappy@7.2.2)(ts-node@10.9.2)(utf-8-validate@6.0.4):
     resolution: {integrity: sha512-THWVQC4htKDjD5lYArV/wgfiwaIoY+a82QlSzT2zRDoJwCzs0ivWxnl+eeCGMgTwb3YA5sbhu9afg3P1MWjNpQ==, tarball: file:projects/pod-calendar.tgz}
     id: file:projects/pod-calendar.tgz
     name: '@rush-temp/pod-calendar'
@@ -27437,7 +27567,7 @@ packages:
       googleapis: 122.0.0
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       jwt-simple: 0.5.6
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node-dev: 2.0.0(@types/node@20.11.19)(typescript@5.3.3)
@@ -27586,7 +27716,7 @@ packages:
       - supports-color
     dev: false
 
-  file:projects/pod-github.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4)(y-prosemirror@1.2.12):
+  file:projects/pod-github.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4)(y-prosemirror@1.2.12):
     resolution: {integrity: sha512-VO1ipLvo8rWOvJVHMLOW5Xl6JkxWOw7wKEpGWweoJDdrYUIK+od4eVqaGDy2YgyXfQOxmJFTGOZ0l84+PcS3hw==, tarball: file:projects/pod-github.tgz}
     id: file:projects/pod-github.tgz
     name: '@rush-temp/pod-github'
@@ -27646,7 +27776,7 @@ packages:
       graphql-binding: 2.5.2
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       markdown-it: 14.0.0
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       octokit: 3.2.1
       prettier: 3.2.5
       smee-client: 1.2.5
@@ -27675,7 +27805,7 @@ packages:
       - y-prosemirror
     dev: false
 
-  file:projects/pod-gmail.tgz(ts-node@10.9.2):
+  file:projects/pod-gmail.tgz(snappy@7.2.2)(ts-node@10.9.2):
     resolution: {integrity: sha512-/NcwrUow5fptRQxcxnzc5ZT/wtBBdlWQRT+IglOudqZbVoN/aSwAXaKd4BoPTyGOPW0D0M2SLYFXZlPvhV4BjQ==, tarball: file:projects/pod-gmail.tgz}
     id: file:projects/pod-gmail.tgz
     name: '@rush-temp/pod-gmail'
@@ -27687,7 +27817,6 @@ packages:
       '@types/jest': 29.5.12
       '@types/node': 20.11.19
       '@types/uuid': 8.3.4
-      '@types/ws': 8.5.11
       '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3)
       cors: 2.8.5
@@ -27707,7 +27836,7 @@ packages:
       googleapis: 122.0.0
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       jwt-simple: 0.5.6
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node-dev: 2.0.0(@types/node@20.11.19)(typescript@5.3.3)
@@ -27826,7 +27955,7 @@ packages:
     dev: false
 
   file:projects/pod-server.tgz(utf-8-validate@6.0.4):
-    resolution: {integrity: sha512-4gQfkwfde44+kJ+YPimPEoDHtgdMRy0+J2xk/Uum9wWjKHCe8tQsQZUJxp6S5BU3DPBMaVsC0h9N0jxHpWK49A==, tarball: file:projects/pod-server.tgz}
+    resolution: {integrity: sha512-U7wNYw+h8a6hEV6fwXYJFStTk5noW4LAsL1G4JCJjyQ7PVzlmXZqGncFe+bq5EqgYgbOewZ2tR+T8rB8HWi9Cw==, tarball: file:projects/pod-server.tgz}
     id: file:projects/pod-server.tgz
     name: '@rush-temp/pod-server'
     version: 0.0.0
@@ -27849,6 +27978,8 @@ packages:
       msgpackr: 1.11.2
       msgpackr-extract: 3.0.3
       prettier: 3.2.5
+      snappy: 7.2.2
+      snappyjs: 0.7.0
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
       typescript: 5.3.3
@@ -27907,8 +28038,9 @@ packages:
       - supports-color
     dev: false
 
-  file:projects/pod-sign.tgz:
+  file:projects/pod-sign.tgz(snappy@7.2.2):
     resolution: {integrity: sha512-2CvZ6MihYZ/0DXWllTffUrvNyRjLJvvUkcT36EpVmgydo2F4guxAhrnsyaivxNPNwP8NuSy7JJ4uXXOYNeXCQg==, tarball: file:projects/pod-sign.tgz}
+    id: file:projects/pod-sign.tgz
     name: '@rush-temp/pod-sign'
     version: 0.0.0
     dependencies:
@@ -27921,7 +28053,6 @@ packages:
       '@types/express': 4.17.21
       '@types/jest': 29.5.12
       '@types/node': 20.11.19
-      '@types/ws': 8.5.11
       '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3)
       cors: 2.8.5
@@ -27935,7 +28066,7 @@ packages:
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       express: 4.21.2
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       node-forge: 1.3.1
       pdf-lib: 1.17.1
       prettier: 3.2.5
@@ -28000,7 +28131,7 @@ packages:
       - supports-color
     dev: false
 
-  file:projects/pod-telegram-bot.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.4):
+  file:projects/pod-telegram-bot.tgz(bufferutil@4.0.8)(snappy@7.2.2)(utf-8-validate@6.0.4):
     resolution: {integrity: sha512-QcNX6QCVKgZ6cV4ZkPBzdPH0Nu1F1sQ7yIMYQ4ikoR/BWWBB2U4E/YWd10I3c34QV3DUbKo3CID8EtkzrXadYQ==, tarball: file:projects/pod-telegram-bot.tgz}
     id: file:projects/pod-telegram-bot.tgz
     name: '@rush-temp/pod-telegram-bot'
@@ -28012,7 +28143,6 @@ packages:
       '@types/express': 4.17.21
       '@types/jest': 29.5.12
       '@types/node': 20.11.19
-      '@types/node-fetch': 2.6.11
       '@types/otp-generator': 4.0.2
       '@types/ws': 8.5.11
       '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
@@ -28029,8 +28159,7 @@ packages:
       express: 4.21.2
       htmlparser2: 9.1.0
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
-      mongodb: 6.12.0
-      node-fetch: 2.7.0
+      mongodb: 6.12.0(snappy@7.2.2)
       otp-generator: 4.0.1
       prettier: 3.2.5
       telegraf: 4.16.3
@@ -28059,7 +28188,7 @@ packages:
       - utf-8-validate
     dev: false
 
-  file:projects/pod-telegram.tgz(bufferutil@4.0.8)(ts-node@10.9.2)(utf-8-validate@6.0.4):
+  file:projects/pod-telegram.tgz(bufferutil@4.0.8)(snappy@7.2.2)(ts-node@10.9.2)(utf-8-validate@6.0.4):
     resolution: {integrity: sha512-FAYbl5GmRCS3fOR5eUXKNS8KmwnwB+7ZZ68vDi5lfeH4hkJky/VdR5yq4dX5SzOB35e7hz9JWriDGxfjUcx6Wg==, tarball: file:projects/pod-telegram.tgz}
     id: file:projects/pod-telegram.tgz
     name: '@rush-temp/pod-telegram'
@@ -28090,7 +28219,7 @@ packages:
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       jwt-simple: 0.5.6
       mime: 3.0.0
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       telegram: 2.22.2
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
@@ -28120,8 +28249,9 @@ packages:
       - utf-8-validate
     dev: false
 
-  file:projects/pod-workspace.tgz:
+  file:projects/pod-workspace.tgz(snappy@7.2.2):
     resolution: {integrity: sha512-6wRqrWl0oZUzQ2CZBpPK09doQpYepraNAwCO3OcPDaRnDfQo0WBwLvfWOdDVW3REunCCh/DHMxGpuiLnaQX4KQ==, tarball: file:projects/pod-workspace.tgz}
+    id: file:projects/pod-workspace.tgz
     name: '@rush-temp/pod-workspace'
     version: 0.0.0
     dependencies:
@@ -28137,7 +28267,7 @@ packages:
       eslint-plugin-n: 15.7.0(eslint@8.56.0)
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
@@ -31217,7 +31347,7 @@ packages:
       - ts-node
     dev: false
 
-  file:projects/server-tool.tgz(@types/node@20.11.19)(esbuild@0.24.2)(ts-node@10.9.2):
+  file:projects/server-tool.tgz(@types/node@20.11.19)(esbuild@0.24.2)(snappy@7.2.2)(ts-node@10.9.2):
     resolution: {integrity: sha512-G/gF05AF5jsncB4bMGt9HXus2GLzKjAwYPYPlanY7M4tavCE8gOstoBPgW8I/ETxaRI3oztLV7G5UoCHEGON3g==, tarball: file:projects/server-tool.tgz}
     id: file:projects/server-tool.tgz
     name: '@rush-temp/server-tool'
@@ -31237,7 +31367,7 @@ packages:
       fast-equals: 5.0.1
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       js-yaml: 4.1.0
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       prettier: 3.2.5
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       typescript: 5.3.3
@@ -31444,7 +31574,7 @@ packages:
     dev: false
 
   file:projects/server-ws.tgz(esbuild@0.24.2)(ts-node@10.9.2):
-    resolution: {integrity: sha512-Uw0sIkrmlc+pFs1pavpPYPTUS/SvzBIzXygFUw9PGViypnUo54AYq9QLGEXs1dg2HU8TNcPbgtdRx+4S8fTUMA==, tarball: file:projects/server-ws.tgz}
+    resolution: {integrity: sha512-9PP7kE8LXoZ+7r6OwLp26KT+JFAQtSwg5QP/awwXjcsV2t3yphDYKbdAJuVG5xlLfHW52Xn4NRbr0wFhfwS0sg==, tarball: file:projects/server-ws.tgz}
     id: file:projects/server-ws.tgz
     name: '@rush-temp/server-ws'
     version: 0.0.0
@@ -31469,6 +31599,7 @@ packages:
       express: 4.21.2
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       prettier: 3.2.5
+      snappy: 7.2.2
       ts-jest: 29.1.2(esbuild@0.24.2)(jest@29.7.0)(typescript@5.3.3)
       typescript: 5.3.3
       utf-8-validate: 6.0.4
@@ -32503,7 +32634,6 @@ packages:
       '@tiptap/extension-table-header': 2.6.6(@tiptap/core@2.6.6)
       '@tiptap/extension-table-row': 2.6.6(@tiptap/core@2.6.6)
       '@tiptap/extension-text-align': 2.11.0(@tiptap/core@2.6.6)
-      '@tiptap/extension-text-style': 2.11.0(@tiptap/core@2.6.6)
       '@tiptap/extension-typography': 2.6.6(@tiptap/core@2.6.6)
       '@tiptap/extension-underline': 2.6.6(@tiptap/core@2.6.6)
       '@tiptap/pm': 2.6.6
@@ -32867,8 +32997,9 @@ packages:
       - ts-node
     dev: false
 
-  file:projects/tool.tgz:
+  file:projects/tool.tgz(snappy@7.2.2):
     resolution: {integrity: sha512-Cw36G6uROkPkNIJDl7WeHjhHKmbQth6wmjMu4vBQGz+DfuPf9Eg63SFKq29rOssZ4LlJB1d22Y7XnxilCuXK5g==, tarball: file:projects/tool.tgz}
+    id: file:projects/tool.tgz
     name: '@rush-temp/tool'
     version: 0.0.0
     dependencies:
@@ -32893,11 +33024,10 @@ packages:
       eslint-plugin-n: 15.7.0(eslint@8.56.0)
       eslint-plugin-promise: 6.1.1(eslint@8.56.0)
       fast-equals: 5.0.1
-      got: 11.8.6
       jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
       libphonenumber-js: 1.10.56
       mime-types: 2.1.35
-      mongodb: 6.12.0
+      mongodb: 6.12.0(snappy@7.2.2)
       msgpackr: 1.11.2
       msgpackr-extract: 3.0.3
       postgres: 3.4.5
diff --git a/common/scripts/esbuild.js b/common/scripts/esbuild.js
index 440df6c532..26cba9a4c7 100644
--- a/common/scripts/esbuild.js
+++ b/common/scripts/esbuild.js
@@ -13,7 +13,7 @@ const defaultConfig = {
   keepNames: false,
   sourcemap: false,
   logLevel: 'error',
-  external: [],
+  external: ['snappy'],
   define: {},
 };
 
diff --git a/dev/tool/package.json b/dev/tool/package.json
index 75a12ab505..59a89b845e 100644
--- a/dev/tool/package.json
+++ b/dev/tool/package.json
@@ -14,7 +14,7 @@
     "_phase:bundle": "rushx bundle",
     "_phase:docker-build": "rushx docker:build",
     "_phase:docker-staging": "rushx docker:staging",
-    "bundle": "node ../../common/scripts/esbuild.js --entry=src/__start.ts --keep-names=true --sourcemap=external --define:MODEL_VERSION --define:GIT_REVISION",
+    "bundle": "node ../../common/scripts/esbuild.js --entry=src/__start.ts --keep-names=true --external=snappy --sourcemap=external --define:MODEL_VERSION --define:GIT_REVISION",
     "docker:build": "../../common/scripts/docker_build.sh hardcoreeng/tool",
     "docker:tbuild": "docker build -t hardcoreeng/tool . --platform=linux/amd64 && ../../common/scripts/docker_tag_push.sh hardcoreeng/tool",
     "docker:abuild": "docker build -t hardcoreeng/tool . --platform=linux/arm64 && ../../common/scripts/docker_tag_push.sh hardcoreeng/tool",
diff --git a/packages/importer/config/rig.json b/packages/importer/config/rig.json
new file mode 100644
index 0000000000..0110930f55
--- /dev/null
+++ b/packages/importer/config/rig.json
@@ -0,0 +1,4 @@
+{  
+  "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json",
+  "rigPackageName": "@hcengineering/platform-rig"
+}
diff --git a/plugins/client-resources/package.json b/plugins/client-resources/package.json
index 33627c63d8..02669b5767 100644
--- a/plugins/client-resources/package.json
+++ b/plugins/client-resources/package.json
@@ -34,14 +34,16 @@
     "typescript": "^5.3.3",
     "jest": "^29.7.0",
     "ts-jest": "^29.1.1",
-    "@types/jest": "^29.5.5"
+    "@types/jest": "^29.5.5",
+    "@types/snappyjs": "^0.7.1"
   },
   "dependencies": {
     "@hcengineering/analytics": "^0.6.0",
     "@hcengineering/platform": "^0.6.11",
     "@hcengineering/core": "^0.6.32",
     "@hcengineering/client": "^0.6.18",
-    "@hcengineering/rpc": "^0.6.5"
+    "@hcengineering/rpc": "^0.6.5",
+    "snappyjs": "^0.7.0"
   },
   "repository": "https://github.com/hcengineering/platform",
   "publishConfig": {
diff --git a/plugins/client-resources/src/connection.ts b/plugins/client-resources/src/connection.ts
index d55a8ec0db..9f9f5ae960 100644
--- a/plugins/client-resources/src/connection.ts
+++ b/plugins/client-resources/src/connection.ts
@@ -57,6 +57,7 @@ import platform, {
   broadcastEvent,
   getMetadata
 } from '@hcengineering/platform'
+import { uncompress } from 'snappyjs'
 
 import { HelloRequest, HelloResponse, RPCHandler, ReqId, type Response } from '@hcengineering/rpc'
 
@@ -89,6 +90,7 @@ class RequestPromise {
 class Connection implements ClientConnection {
   private websocket: ClientSocket | null = null
   binaryMode = false
+  compressionMode = false
   private readonly requests = new Map<ReqId, RequestPromise>()
   private lastId = 0
   private interval: number | undefined
@@ -107,7 +109,7 @@ class Connection implements ClientConnection {
 
   private pingResponse: number = Date.now()
 
-  private helloRecieved: boolean = false
+  private helloReceived: boolean = false
 
   private account: Account | undefined
 
@@ -205,7 +207,7 @@ class Connection implements ClientConnection {
   }
 
   isConnected (): boolean {
-    return this.websocket != null && this.websocket.readyState === ClientSocketReadyState.OPEN && this.helloRecieved
+    return this.websocket != null && this.websocket.readyState === ClientSocketReadyState.OPEN && this.helloReceived
   }
 
   delay = 0
@@ -289,9 +291,8 @@ class Connection implements ClientConnection {
       }
       if (resp.result === 'hello') {
         const helloResp = resp as HelloResponse
-        if (helloResp.binary) {
-          this.binaryMode = true
-        }
+        this.binaryMode = helloResp.binary
+        this.compressionMode = helloResp.useCompression ?? false
 
         // We need to clear dial timer, since we recieve hello response.
         clearTimeout(this.dialTimer)
@@ -307,7 +308,7 @@ class Connection implements ClientConnection {
           return
         }
         this.account = helloResp.account
-        this.helloRecieved = true
+        this.helloReceived = true
         if (this.upgrading) {
           // We need to call upgrade since connection is upgraded
           this.opt?.onUpgrade?.()
@@ -439,6 +440,7 @@ class Connection implements ClientConnection {
 
   private openConnection (ctx: MeasureContext, socketId: number): void {
     this.binaryMode = false
+    this.helloReceived = false
     // Use defined factory or browser default one.
     const clientSocketFactory =
       this.opt?.socketFactory ??
@@ -503,11 +505,28 @@ class Connection implements ClientConnection {
       }
       if (event.data instanceof Blob) {
         void event.data.arrayBuffer().then((data) => {
+          if (this.compressionMode && this.helloReceived) {
+            try {
+              data = uncompress(data)
+            } catch (err: any) {
+              // Ignore
+              console.error(err)
+            }
+          }
           const resp = this.rpcHandler.readResponse<any>(data, this.binaryMode)
           this.handleMsg(socketId, resp)
         })
       } else {
-        const resp = this.rpcHandler.readResponse<any>(event.data, this.binaryMode)
+        let data = event.data
+        if (this.compressionMode && this.helloReceived) {
+          try {
+            data = uncompress(data)
+          } catch (err: any) {
+            // Ignore
+            console.error(err)
+          }
+        }
+        const resp = this.rpcHandler.readResponse<any>(data, this.binaryMode)
         this.handleMsg(socketId, resp)
       }
     }
@@ -525,15 +544,14 @@ class Connection implements ClientConnection {
         return
       }
       const useBinary = this.opt?.useBinaryProtocol ?? getMetadata(client.metadata.UseBinaryProtocol) ?? true
-      const useCompression =
+      this.compressionMode =
         this.opt?.useProtocolCompression ?? getMetadata(client.metadata.UseProtocolCompression) ?? false
-      this.helloRecieved = false
       const helloRequest: HelloRequest = {
         method: 'hello',
         params: [],
         id: -1,
         binary: useBinary,
-        compression: useCompression
+        compression: this.compressionMode
       }
       ctx.withSync('send-hello', {}, () => this.websocket?.send(this.rpcHandler.serialize(helloRequest, false)))
     }
diff --git a/pods/fulltext/package.json b/pods/fulltext/package.json
index 5e3c6b1b80..3e4788376f 100644
--- a/pods/fulltext/package.json
+++ b/pods/fulltext/package.json
@@ -15,7 +15,7 @@
     "_phase:docker-build": "rushx docker:build",
     "_phase:docker-staging": "rushx docker:staging",
     "get-model": "node ../../common/scripts/esbuild.js --entry=src/get-model.ts --keep-names=true --bundle=true --define=MODEL_VERSION --define=VERSION --define=GIT_REVISION  && node ./bundle/bundle.js > ./bundle/model.json",
-    "bundle": "rushx get-model && node ../../common/scripts/esbuild.js --keep-names=true --bundle=true --external=*.node --sourcemap=external",
+    "bundle": "rushx get-model && node ../../common/scripts/esbuild.js --keep-names=true --bundle=true --external=*.node --external=snappy --sourcemap=external",
     "docker:build": "../../common/scripts/docker_build.sh hardcoreeng/fulltext",
     "docker:tbuild": "docker build -t hardcoreeng/fulltext . --platform=linux/amd64 && ../../common/scripts/docker_tag_push.sh hardcoreeng/fulltext",
     "docker:abuild": "docker build -t hardcoreeng/fulltext . --platform=linux/arm64 && ../../common/scripts/docker_tag_push.sh hardcoreeng/fulltext",
diff --git a/pods/server/package.json b/pods/server/package.json
index a3dc2127fe..ca61179794 100644
--- a/pods/server/package.json
+++ b/pods/server/package.json
@@ -17,7 +17,7 @@
     "_phase:docker-build": "rushx docker:build",
     "_phase:docker-staging": "rushx docker:staging",
     "get-model": "node ../../common/scripts/esbuild.js --entry=src/get-model.ts -keep-names=true --define=MODEL_VERSION --define=VERSION --define=GIT_REVISION --bundle=true && node ./bundle/bundle.js > ./bundle/model.json",
-    "bundle": "rushx get-model && node ../../common/scripts/esbuild.js --entry=src/__start.ts --keep-names=true --bundle=true --sourcemap=external --external=*.node --external=*.node --external=bufferutil --external=snappy --define=MODEL_VERSION --define=VERSION --define=GIT_REVISION --external=utf-8-validate --external=msgpackr-extract",
+    "bundle": "rushx get-model && node ../../common/scripts/esbuild.js --entry=src/__start.ts --keep-names=true --bundle=true --sourcemap=external --external=*.node --external=bufferutil --external=snappy --define=MODEL_VERSION --define=VERSION --define=GIT_REVISION --external=utf-8-validate --external=msgpackr-extract",
     "docker:build": "../../common/scripts/docker_build.sh hardcoreeng/transactor",
     "docker:tbuild": "docker build -t hardcoreeng/transactor . --platform=linux/amd64 && ../../common/scripts/docker_tag_push.sh hardcoreeng/transactor",
     "docker:abuild": "docker build -t hardcoreeng/transactor . --platform=linux/arm64 && ../../common/scripts/docker_tag_push.sh hardcoreeng/transactor",
@@ -51,7 +51,8 @@
     "jest": "^29.7.0",
     "ts-jest": "^29.1.1",
     "@types/jest": "^29.5.5",
-    "@hcengineering/model-all": "^0.6.0"
+    "@hcengineering/model-all": "^0.6.0",
+    "snappyjs": "^0.7.0"
   },
   "dependencies": {
     "@hcengineering/core": "^0.6.32",
@@ -77,6 +78,8 @@
     "bufferutil": "^4.0.8",
     "msgpackr": "^1.11.2",
     "msgpackr-extract": "^3.0.3",
-    "@hcengineering/postgres": "^0.6.0"
+    "@hcengineering/postgres": "^0.6.0",
+    "snappy": "^7.2.2",
+    "@hcengineering/rpc": "^0.6.5"
   }
 }
diff --git a/pods/server/src/__tests__/compression.spec.ts b/pods/server/src/__tests__/compression.spec.ts
new file mode 100644
index 0000000000..b20fa3594a
--- /dev/null
+++ b/pods/server/src/__tests__/compression.spec.ts
@@ -0,0 +1,23 @@
+import { readFile } from 'fs/promises'
+import { compress } from 'snappy'
+import { RPCHandler } from '@hcengineering/rpc'
+
+describe('compression-tests', () => {
+  it('check-snappy', async () => {
+    const modelJSON = (await readFile('./bundle/model.json')).toString()
+
+    const txes = JSON.parse(modelJSON)
+
+    const compressed = await compress(modelJSON)
+    console.log(modelJSON.length, compressed.length, compressed.length / modelJSON.length)
+    expect(compressed.length).toBeLessThan(modelJSON.length)
+
+    const rpc = new RPCHandler()
+
+    const jsonData = rpc.serialize(txes, true)
+
+    const compressed2 = await compress(jsonData)
+    console.log(jsonData.length, compressed2.length, compressed2.length / jsonData.length)
+    expect(compressed2.length).toBeLessThan(jsonData.length)
+  })
+})
diff --git a/server/core/src/types.ts b/server/core/src/types.ts
index 0b8a11fde8..f0214ce27f 100644
--- a/server/core/src/types.ts
+++ b/server/core/src/types.ts
@@ -709,7 +709,6 @@ export type ServerFactory = (
   ctx: MeasureContext,
   pipelineFactory: PipelineFactory,
   port: number,
-  enableCompression: boolean,
   accountsUrl: string,
   externalStorage: StorageAdapter
 ) => () => Promise<void>
diff --git a/server/rpc/src/rpc.ts b/server/rpc/src/rpc.ts
index f4afa6929c..9771af11ca 100644
--- a/server/rpc/src/rpc.ts
+++ b/server/rpc/src/rpc.ts
@@ -50,6 +50,7 @@ export interface HelloResponse extends Response<any> {
   lastTx?: string
   lastHash?: string // Last model hash
   account: Account
+  useCompression?: boolean
 }
 
 function replacer (key: string, value: any): any {
diff --git a/server/server/src/sessionManager.ts b/server/server/src/sessionManager.ts
index d02ca20355..64a9124cb6 100644
--- a/server/server/src/sessionManager.ts
+++ b/server/server/src/sessionManager.ts
@@ -117,7 +117,8 @@ class TSessionManager implements SessionManager {
       stop: () => Promise<string | undefined>
     }
     | undefined,
-    readonly accountsUrl: string
+    readonly accountsUrl: string,
+    readonly enableCompression: boolean
   ) {
     this.checkInterval = setInterval(() => {
       this.handleTick()
@@ -1082,7 +1083,7 @@ class TSessionManager implements SessionManager {
   ): Promise<void> {
     const hello = request as HelloRequest
     service.binaryMode = hello.binary ?? false
-    service.useCompression = hello.compression ?? false
+    service.useCompression = this.enableCompression ? hello.compression ?? false : false
 
     if (LOGGING_ENABLED) {
       ctx.info('hello happen', {
@@ -1109,7 +1110,8 @@ class TSessionManager implements SessionManager {
       serverVersion: this.serverVersion,
       lastTx: pipeline.context.lastTx,
       lastHash: pipeline.context.lastHash,
-      account: service.getRawAccount(pipeline)
+      account: service.getRawAccount(pipeline),
+      useCompression: service.useCompression
     }
     ws.send(requestCtx, helloResponse, false, false)
   }
@@ -1126,9 +1128,18 @@ export function createSessionManager (
     stop: () => Promise<string | undefined>
   }
   | undefined,
-  accountsUrl: string
+  accountsUrl: string,
+  enableCompression: boolean
 ): SessionManager {
-  return new TSessionManager(ctx, sessionFactory, timeouts, brandingMap ?? null, profiling, accountsUrl)
+  return new TSessionManager(
+    ctx,
+    sessionFactory,
+    timeouts,
+    brandingMap ?? null,
+    profiling,
+    accountsUrl,
+    enableCompression
+  )
 }
 
 /**
@@ -1160,7 +1171,8 @@ export function startSessionManager (
       reconnectTimeout: 500
     },
     opt.profiling,
-    opt.accountsUrl
+    opt.accountsUrl,
+    opt.enableCompression ?? false
   )
   return {
     shutdown: opt.serverFactory(
@@ -1171,7 +1183,6 @@ export function startSessionManager (
       ctx,
       opt.pipelineFactory,
       opt.port,
-      opt.enableCompression ?? false,
       opt.accountsUrl,
       opt.externalStorage
     ),
diff --git a/server/ws/package.json b/server/ws/package.json
index 242748c49a..253c6da9e6 100644
--- a/server/ws/package.json
+++ b/server/ws/package.json
@@ -51,6 +51,7 @@
     "express": "^4.21.2",
     "utf-8-validate": "^6.0.4",
     "ws": "^8.18.0",
-    "body-parser": "^1.20.2"
+    "body-parser": "^1.20.2",
+    "snappy": "^7.2.2"
   }
 }
diff --git a/server/ws/src/server_http.ts b/server/ws/src/server_http.ts
index 9018a7f476..5ba1be3b9a 100644
--- a/server/ws/src/server_http.ts
+++ b/server/ws/src/server_http.ts
@@ -45,7 +45,9 @@ import os from 'os'
 import { WebSocketServer, type RawData, type WebSocket } from 'ws'
 
 import 'bufferutil'
+import { compress } from 'snappy'
 import 'utf-8-validate'
+
 let profiling = false
 const rpcHandler = new RPCHandler()
 /**
@@ -60,14 +62,12 @@ export function startHttpServer (
   ctx: MeasureContext,
   pipelineFactory: PipelineFactory,
   port: number,
-  enableCompression: boolean,
   accountsUrl: string,
   externalStorage: StorageAdapter
 ): () => Promise<void> {
   if (LOGGING_ENABLED) {
     ctx.info('starting server on', {
       port,
-      enableCompression,
       accountsUrl,
       parallel: os.availableParallelism()
     })
@@ -324,27 +324,7 @@ export function startHttpServer (
   const httpServer = http.createServer(app)
   const wss = new WebSocketServer({
     noServer: true,
-    perMessageDeflate: enableCompression
-      ? {
-          zlibDeflateOptions: {
-            // See zlib defaults.
-            chunkSize: 32 * 1024,
-            memLevel: 1,
-            level: 1
-          },
-          zlibInflateOptions: {
-            chunkSize: 32 * 1024,
-            level: 1,
-            memLevel: 1
-          },
-          serverNoContextTakeover: true,
-          clientNoContextTakeover: true,
-          // Below options specified as default values.
-          concurrencyLimit: Math.max(10, os.availableParallelism()), // Limits zlib concurrency for perf.
-          threshold: 1024 // Size (in bytes) below which messages
-          // should not be compressed if context takeover is disabled.
-        }
-      : false,
+    perMessageDeflate: false,
     skipUTF8Validation: true,
     maxPayload: 250 * 1024 * 1024,
     clientTracking: false // We do not need to track clients inside clients.
@@ -566,7 +546,7 @@ function createWebsocketClientSocket (
       }
       ws.send(pongConst)
     },
-    send: (ctx: MeasureContext, msg, binary, compression) => {
+    send: (ctx: MeasureContext, msg, binary, _compression) => {
       const smsg = rpcHandler.serialize(msg, binary)
 
       ctx.measure('send-data', smsg.length)
@@ -574,15 +554,24 @@ function createWebsocketClientSocket (
       if (ws.readyState !== ws.OPEN || cs.isClosed) {
         return
       }
-      ws.send(smsg, { binary: true, compress: compression }, (err) => {
+
+      const handleErr = (err?: Error): void => {
+        ctx.measure('msg-send-delta', Date.now() - st)
         if (err != null) {
           if (!`${err.message}`.includes('WebSocket is not open')) {
             ctx.error('send error', { err })
             Analytics.handleError(err)
           }
         }
-        ctx.measure('msg-send-delta', Date.now() - st)
-      })
+      }
+
+      if (_compression) {
+        void compress(smsg).then((msg: any) => {
+          ws.send(msg, { binary: true }, handleErr)
+        })
+      } else {
+        ws.send(smsg, { binary: true }, handleErr)
+      }
     }
   }
   return cs
diff --git a/tests/docker-compose.yaml b/tests/docker-compose.yaml
index 6670b75034..0cfc98e922 100644
--- a/tests/docker-compose.yaml
+++ b/tests/docker-compose.yaml
@@ -139,6 +139,7 @@ services:
       - BRANDING_PATH=/var/cfg/branding.json
       - FULLTEXT_URL=http://fulltext:4710
       - STATS_URL=http://stats:4901
+      - ENABLE_COMPRESSION=true
   collaborator:
     image: hardcoreeng/collaborator
     links:
diff --git a/workers/transactor/package.json b/workers/transactor/package.json
index 46d7aa8974..8e70e70050 100644
--- a/workers/transactor/package.json
+++ b/workers/transactor/package.json
@@ -39,7 +39,8 @@
     "ts-jest": "^29.1.1",
     "typescript": "^5.3.3",
     "wrangler": "^3.97.0",
-    "esbuild": "^0.24.2"
+    "esbuild": "^0.24.2",
+    "@types/snappyjs": "^0.7.1"
   },
   "dependencies": {
     "@hcengineering/core": "^0.6.32",
@@ -54,6 +55,7 @@
     "@hcengineering/server-pipeline": "^0.6.0",
     "@hcengineering/server-token": "^0.6.11",
     "@hcengineering/storage": "^0.6.0",
-    "itty-router": "^5.0.18"
+    "itty-router": "^5.0.18",
+    "snappyjs": "^0.7.0"
   }
 }
diff --git a/workers/transactor/src/transactor.ts b/workers/transactor/src/transactor.ts
index d474090da5..b2e3798781 100644
--- a/workers/transactor/src/transactor.ts
+++ b/workers/transactor/src/transactor.ts
@@ -29,6 +29,7 @@ import serverPlugin, { decodeToken, type Token } from '@hcengineering/server-tok
 import { DurableObject } from 'cloudflare:workers'
 import { promisify } from 'util'
 import { gzip } from 'zlib'
+import { compress } from 'snappyjs'
 
 // Approach usefull only for separate build, after model-all bundle phase is executed.
 import { createPostgreeDestroyAdapter, createPostgresAdapter, createPostgresTxAdapter } from '@hcengineering/postgres'
@@ -111,7 +112,8 @@ export class Transactor extends DurableObject<Env> {
           reconnectTimeout: 3000
         },
         undefined,
-        this.accountsUrl
+        this.accountsUrl,
+        env.ENABLE_COMPRESSION === 'true'
       )
     })
   }
@@ -269,13 +271,18 @@ export class Transactor extends DurableObject<Env> {
         return rpcHandler.readRequest(buffer, binary)
       },
       data: () => data,
-      send: (ctx: MeasureContext, msg, binary, compression) => {
-        const smsg = rpcHandler.serialize(msg, binary)
+      send: (ctx: MeasureContext, msg, binary, _compression) => {
+        let smsg = rpcHandler.serialize(msg, binary)
 
         ctx.measure('send-data', smsg.length)
         if (ws.readyState !== WebSocket.OPEN || cs.isClosed) {
           return
         }
+
+        if (_compression) {
+          smsg = compress(smsg)
+        }
+
         ws.send(smsg)
       },
       sendPong: () => {
diff --git a/workers/transactor/worker-configuration.d.ts b/workers/transactor/worker-configuration.d.ts
index df2ca7ab0e..4cdf84b101 100644
--- a/workers/transactor/worker-configuration.d.ts
+++ b/workers/transactor/worker-configuration.d.ts
@@ -12,4 +12,6 @@ interface Env {
   DB_URL: string | undefined
 
   STATS_URL: string | undefined
+
+  ENABLE_COMPRESSION: string | undefined
 }