diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift
index 69578afe9138193e3bfe17509ed00af4eae07d81..411e8e2dcea75f6f5d6996ce29ae025403a13541 100644
--- a/Examples/xx-messenger/Package.swift
+++ b/Examples/xx-messenger/Package.swift
@@ -82,6 +82,7 @@ let package = Package(
       name: "AppCoreTests",
       dependencies: [
         .target(name: "AppCore"),
+        .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
         .product(name: "CustomDump", package: "swift-custom-dump"),
       ],
       swiftSettings: swiftSettings
diff --git a/Examples/xx-messenger/Sources/AppCore/AppDependecies.swift b/Examples/xx-messenger/Sources/AppCore/AppDependecies.swift
new file mode 100644
index 0000000000000000000000000000000000000000..d5a173cb03d121d3535be72b453498b6df291bf3
--- /dev/null
+++ b/Examples/xx-messenger/Sources/AppCore/AppDependecies.swift
@@ -0,0 +1,96 @@
+import ComposableArchitecture
+import Foundation
+import XCTestDynamicOverlay
+import XXMessengerClient
+
+public struct AppDependencies {
+  public var dbManager: DBManager
+  public var messenger: Messenger
+  public var authHandler: AuthCallbackHandler
+  public var backupStorage: BackupStorage
+  public var mainQueue: AnySchedulerOf<DispatchQueue>
+  public var bgQueue: AnySchedulerOf<DispatchQueue>
+  public var now: () -> Date
+  public var sendMessage: SendMessage
+  public var sendImage: SendImage
+  public var messageListener: MessageListenerHandler
+  public var receiveFileHandler: ReceiveFileHandler
+  public var log: Logger
+  public var loadData: URLDataLoader
+}
+
+extension AppDependencies {
+  public static func live() -> AppDependencies {
+    let dbManager = DBManager.live()
+    let messengerEnv = MessengerEnvironment.live()
+    let messenger = Messenger.live(messengerEnv)
+    let now: () -> Date = Date.init
+
+    return AppDependencies(
+      dbManager: dbManager,
+      messenger: messenger,
+      authHandler: .live(
+        messenger: messenger,
+        handleRequest: .live(db: dbManager.getDB, now: now),
+        handleConfirm: .live(db: dbManager.getDB),
+        handleReset: .live(db: dbManager.getDB)
+      ),
+      backupStorage: .onDisk(),
+      mainQueue: DispatchQueue.main.eraseToAnyScheduler(),
+      bgQueue: DispatchQueue.global(qos: .background).eraseToAnyScheduler(),
+      now: now,
+      sendMessage: .live(
+        messenger: messenger,
+        db: dbManager.getDB,
+        now: now
+      ),
+      sendImage: .live(
+        messenger: messenger,
+        db: dbManager.getDB,
+        now: now
+      ),
+      messageListener: .live(
+        messenger: messenger,
+        db: dbManager.getDB
+      ),
+      receiveFileHandler: .live(
+        messenger: messenger,
+        db: dbManager.getDB,
+        now: now
+      ),
+      log: .live(),
+      loadData: .live
+    )
+  }
+
+  public static let unimplemented = AppDependencies(
+    dbManager: .unimplemented,
+    messenger: .unimplemented,
+    authHandler: .unimplemented,
+    backupStorage: .unimplemented,
+    mainQueue: .unimplemented,
+    bgQueue: .unimplemented,
+    now: XCTestDynamicOverlay.unimplemented(
+      "\(Self.self)",
+      placeholder: Date(timeIntervalSince1970: 0)
+    ),
+    sendMessage: .unimplemented,
+    sendImage: .unimplemented,
+    messageListener: .unimplemented,
+    receiveFileHandler: .unimplemented,
+    log: .unimplemented,
+    loadData: .unimplemented
+  )
+}
+
+private enum AppDependenciesKey: DependencyKey {
+  static let liveValue: AppDependencies = .live()
+  static let testValue: AppDependencies = .unimplemented
+}
+
+extension DependencyValues {
+  public var appDependencies: AppDependencies {
+    get { self[AppDependenciesKey.self] }
+    set { self[AppDependenciesKey.self] = newValue }
+  }
+}