diff --git a/Examples/xx-messenger/Package.swift b/Examples/xx-messenger/Package.swift
index 1db1bdf62c119ef786cc5770b2a74e2525ef59f7..74bda195db87f33a04093b8c46e28554bf7b2b4d 100644
--- a/Examples/xx-messenger/Package.swift
+++ b/Examples/xx-messenger/Package.swift
@@ -71,6 +71,7 @@ let package = Package(
         .target(name: "HomeFeature"),
         .target(name: "RegisterFeature"),
         .target(name: "RestoreFeature"),
+        .target(name: "UserSearchFeature"),
         .target(name: "WelcomeFeature"),
         .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
         .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
@@ -91,6 +92,7 @@ let package = Package(
       dependencies: [
         .target(name: "AppCore"),
         .target(name: "RegisterFeature"),
+        .target(name: "UserSearchFeature"),
         .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
         .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
         .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
diff --git a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
index 19f1b7f5a750f278ca41ff031acf08409cccaa02..1fc08a8cd576f898f440d6347f2ab3aaf0472b33 100644
--- a/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
+++ b/Examples/xx-messenger/Sources/AppFeature/AppEnvironment+Live.swift
@@ -3,6 +3,7 @@ import Foundation
 import HomeFeature
 import RegisterFeature
 import RestoreFeature
+import UserSearchFeature
 import WelcomeFeature
 import XXMessengerClient
 import XXModels
@@ -44,6 +45,9 @@ extension AppEnvironment {
               mainQueue: mainQueue,
               bgQueue: bgQueue
             )
+          },
+          userSearch: {
+            UserSearchEnvironment()
           }
         )
       }
diff --git a/Examples/xx-messenger/Sources/HomeFeature/HomeFeature.swift b/Examples/xx-messenger/Sources/HomeFeature/HomeFeature.swift
index 0a019179b2d45f23a41e54ecb084ac7ec835fe2d..51083ea0ccea39c7bf13abdd0ff0566dac623529 100644
--- a/Examples/xx-messenger/Sources/HomeFeature/HomeFeature.swift
+++ b/Examples/xx-messenger/Sources/HomeFeature/HomeFeature.swift
@@ -4,6 +4,7 @@ import ComposableArchitecture
 import ComposablePresentation
 import Foundation
 import RegisterFeature
+import UserSearchFeature
 import XXClient
 import XXMessengerClient
 
@@ -14,13 +15,15 @@ public struct HomeState: Equatable {
     networkNodesReport: NodeRegistrationReport? = nil,
     isDeletingAccount: Bool = false,
     alert: AlertState<HomeAction>? = nil,
-    register: RegisterState? = nil
+    register: RegisterState? = nil,
+    userSearch: UserSearchState? = nil
   ) {
     self.failure = failure
     self.isNetworkHealthy = isNetworkHealthy
     self.isDeletingAccount = isDeletingAccount
     self.alert = alert
     self.register = register
+    self.userSearch = userSearch
   }
 
   public var failure: String?
@@ -29,6 +32,7 @@ public struct HomeState: Equatable {
   public var isDeletingAccount: Bool
   public var alert: AlertState<HomeAction>?
   public var register: RegisterState?
+  public var userSearch: UserSearchState?
 }
 
 public enum HomeAction: Equatable {
@@ -58,7 +62,10 @@ public enum HomeAction: Equatable {
   case deleteAccount(DeleteAccount)
   case didDismissAlert
   case didDismissRegister
+  case userSearchButtonTapped
+  case didDismissUserSearch
   case register(RegisterAction)
+  case userSearch(UserSearchAction)
 }
 
 public struct HomeEnvironment {
@@ -67,13 +74,15 @@ public struct HomeEnvironment {
     db: DBManagerGetDB,
     mainQueue: AnySchedulerOf<DispatchQueue>,
     bgQueue: AnySchedulerOf<DispatchQueue>,
-    register: @escaping () -> RegisterEnvironment
+    register: @escaping () -> RegisterEnvironment,
+    userSearch: @escaping () -> UserSearchEnvironment
   ) {
     self.messenger = messenger
     self.db = db
     self.mainQueue = mainQueue
     self.bgQueue = bgQueue
     self.register = register
+    self.userSearch = userSearch
   }
 
   public var messenger: Messenger
@@ -81,6 +90,7 @@ public struct HomeEnvironment {
   public var mainQueue: AnySchedulerOf<DispatchQueue>
   public var bgQueue: AnySchedulerOf<DispatchQueue>
   public var register: () -> RegisterEnvironment
+  public var userSearch: () -> UserSearchEnvironment
 }
 
 extension HomeEnvironment {
@@ -89,7 +99,8 @@ extension HomeEnvironment {
     db: .unimplemented,
     mainQueue: .unimplemented,
     bgQueue: .unimplemented,
-    register: { .unimplemented }
+    register: { .unimplemented },
+    userSearch: { .unimplemented }
   )
 }
 
@@ -219,11 +230,19 @@ public let homeReducer = Reducer<HomeState, HomeAction, HomeEnvironment>
     state.register = nil
     return .none
 
+  case .userSearchButtonTapped:
+    state.userSearch = UserSearchState()
+    return .none
+
+  case .didDismissUserSearch:
+    state.userSearch = nil
+    return .none
+
   case .register(.finished):
     state.register = nil
     return Effect(value: .messenger(.start))
 
-  case .register(_):
+  case .register(_), .userSearch(_):
     return .none
   }
 }
@@ -234,3 +253,10 @@ public let homeReducer = Reducer<HomeState, HomeAction, HomeEnvironment>
   action: /HomeAction.register,
   environment: { $0.register() }
 )
+.presenting(
+  userSearchReducer,
+  state: .keyPath(\.userSearch),
+  id: .notNil(),
+  action: /HomeAction.userSearch,
+  environment: { $0.userSearch() }
+)
diff --git a/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift b/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift
index ce8aac42ab93d9578770f7cb606b7090a6fb6082..e52e8d1b7fb94004fc29b4cb82041400467dbe8c 100644
--- a/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift
+++ b/Examples/xx-messenger/Sources/HomeFeature/HomeView.swift
@@ -2,6 +2,7 @@ import ComposableArchitecture
 import ComposablePresentation
 import RegisterFeature
 import SwiftUI
+import UserSearchFeature
 import XXClient
 
 public struct HomeView: View {
@@ -86,6 +87,20 @@ public struct HomeView: View {
             Text("Network")
           }
 
+          Section {
+            Button {
+              viewStore.send(.userSearchButtonTapped)
+            } label: {
+              HStack {
+                Text("Search users")
+                Spacer()
+                Image(systemName: "chevron.forward")
+              }
+            }
+          } header: {
+            Text("Contacts")
+          }
+
           Section {
             Button(role: .destructive) {
               viewStore.send(.deleteAccount(.buttonTapped))
@@ -108,6 +123,16 @@ public struct HomeView: View {
           store.scope(state: \.alert),
           dismiss: HomeAction.didDismissAlert
         )
+        .background(NavigationLinkWithStore(
+          store.scope(
+            state: \.userSearch,
+            action: HomeAction.userSearch
+          ),
+          onDeactivate: {
+            viewStore.send(.didDismissUserSearch)
+          },
+          destination: UserSearchView.init(store:)
+        ))
       }
       .navigationViewStyle(.stack)
       .task { viewStore.send(.messenger(.start)) }
diff --git a/Examples/xx-messenger/Tests/HomeFeatureTests/HomeFeatureTests.swift b/Examples/xx-messenger/Tests/HomeFeatureTests/HomeFeatureTests.swift
index c7168d5b4537564a69ac82145b433c6ab22c65ff..aa309016c08c4a75e62c6ecd5cf47e32191832e1 100644
--- a/Examples/xx-messenger/Tests/HomeFeatureTests/HomeFeatureTests.swift
+++ b/Examples/xx-messenger/Tests/HomeFeatureTests/HomeFeatureTests.swift
@@ -1,5 +1,6 @@
 import ComposableArchitecture
 import RegisterFeature
+import UserSearchFeature
 import XCTest
 import XXClient
 import XXMessengerClient
@@ -437,4 +438,30 @@ final class HomeFeatureTests: XCTestCase {
       $0.register = nil
     }
   }
+
+  func testUserSearchButtonTapped() {
+    let store = TestStore(
+      initialState: HomeState(),
+      reducer: homeReducer,
+      environment: .unimplemented
+    )
+
+    store.send(.userSearchButtonTapped) {
+      $0.userSearch = UserSearchState()
+    }
+  }
+
+  func testDidDismissUserSearch() {
+    let store = TestStore(
+      initialState: HomeState(
+        userSearch: UserSearchState()
+      ),
+      reducer: homeReducer,
+      environment: .unimplemented
+    )
+
+    store.send(.didDismissUserSearch) {
+      $0.userSearch = nil
+    }
+  }
 }