diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift
index 688d224427828cafd5f220a0c4d0fd6c4061c356..c864b65ae011a37f81518206f61a791e5e93ec04 100644
--- a/Examples/xx-messenger/Package.swift
+++ b/Examples/xx-messenger/Package.swift
@@ -67,6 +67,7 @@ let package = Package(
     .target(
       name: "AppCore",
       dependencies: [
+        .product(name: "Pulse", package: "Pulse"),
         .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
         .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
         .product(name: "XXDatabase", package: "client-ios-db"),
diff --git a/Examples/xx-messenger/Sources/AppCore/Logger/Logger.swift b/Examples/xx-messenger/Sources/AppCore/Logger/Logger.swift
new file mode 100644
index 0000000000000000000000000000000000000000..6766d98d4f6ef506112e5cee8d6efa060ec9b214
--- /dev/null
+++ b/Examples/xx-messenger/Sources/AppCore/Logger/Logger.swift
@@ -0,0 +1,45 @@
+import Foundation
+import Pulse
+import XCTestDynamicOverlay
+
+public struct Logger {
+  public enum Message: Equatable {
+    case error(NSError)
+  }
+
+  public var run: (Message, String, String, UInt) -> Void
+
+  public func callAsFunction(
+    _ msg: Message,
+    file: String = #file,
+    function: String = #function,
+    line: UInt = #line
+  ) {
+    run(msg, file, function, line)
+  }
+}
+
+extension Logger {
+  public static func live() -> Logger {
+    Logger { msg, file, function, line in
+      switch msg {
+      case .error(let error):
+        LoggerStore.shared.storeMessage(
+          label: "xx-messenger",
+          level: .error,
+          message: error.localizedDescription,
+          metadata: [:],
+          file: file,
+          function: function,
+          line: line
+        )
+      }
+    }
+  }
+}
+
+extension Logger {
+  public static let unimplemented = Logger(
+    run: XCTUnimplemented("\(Self.self).error")
+  )
+}