diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 41f85254f6..c766c9b538 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -7,8 +7,9 @@ androidx-compose-ui = "1.5.4"
jbCompose = "1.5.11"
lint = "31.2.0"
zipline = "1.7.0"
-coil = "2.5.0"
+coil = "3.0.0-alpha01"
okio = "3.7.0"
+ktor = "2.3.7"
[libraries]
kotlin-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler", version.ref = "kotlin" }
@@ -75,8 +76,10 @@ zipline-gradlePlugin = { module = "app.cash.zipline:zipline-gradle-plugin", vers
zipline-loader = { module = "app.cash.zipline:zipline-loader", version.ref = "zipline" }
paparazzi-gradlePlugin = { module = "app.cash.paparazzi:paparazzi-gradle-plugin", version = "1.3.1" }
jimfs = "com.google.jimfs:jimfs:1.3.0"
-coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
-coil-core = { module = "io.coil-kt:coil", version.ref = "coil" }
+coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
+coil-core = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }
+coil-network = { module = "io.coil-kt.coil3:coil-network", version.ref = "coil" }
+ktor-engine-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
turbine = "app.cash.turbine:turbine:1.0.0"
ktlint = "com.pinterest.ktlint:ktlint-cli:1.1.0"
googleJavaFormat = "com.google.googlejavaformat:google-java-format:1.19.1"
diff --git a/samples/emoji-search/android-composeui/build.gradle b/samples/emoji-search/android-composeui/build.gradle
index 68b98557a8..a42a66c8a0 100644
--- a/samples/emoji-search/android-composeui/build.gradle
+++ b/samples/emoji-search/android-composeui/build.gradle
@@ -21,6 +21,8 @@ android {
dependencies {
implementation libs.coil.compose
+ implementation libs.coil.network
+ implementation libs.ktor.engine.okhttp
implementation libs.google.material
implementation libs.kotlinx.coroutines.android
implementation projects.samples.emojiSearch.launcher
diff --git a/samples/emoji-search/android-composeui/src/main/AndroidManifest.xml b/samples/emoji-search/android-composeui/src/main/AndroidManifest.xml
index 46143f4f27..2f7f8fd4ed 100644
--- a/samples/emoji-search/android-composeui/src/main/AndroidManifest.xml
+++ b/samples/emoji-search/android-composeui/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
Unit> {
diff --git a/samples/emoji-search/android-composeui/src/main/kotlin/com/example/redwood/emojisearch/android/composeui/EmojiSearchApplication.kt b/samples/emoji-search/android-composeui/src/main/kotlin/com/example/redwood/emojisearch/android/composeui/EmojiSearchApplication.kt
new file mode 100644
index 0000000000..73fad3907f
--- /dev/null
+++ b/samples/emoji-search/android-composeui/src/main/kotlin/com/example/redwood/emojisearch/android/composeui/EmojiSearchApplication.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2024 Square, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.redwood.emojisearch.android.composeui
+
+import android.app.Application
+import coil3.ImageLoader
+import coil3.PlatformContext
+import coil3.SingletonImageLoader
+import coil3.fetch.NetworkFetcher
+
+class EmojiSearchApplication : Application(), SingletonImageLoader.Factory {
+ override fun newImageLoader(context: PlatformContext): ImageLoader {
+ return ImageLoader.Builder(context)
+ .components {
+ add(NetworkFetcher.Factory())
+ }
+ .build()
+ }
+}
diff --git a/samples/emoji-search/android-views/build.gradle b/samples/emoji-search/android-views/build.gradle
index 19e4017b33..d691b9cb49 100644
--- a/samples/emoji-search/android-views/build.gradle
+++ b/samples/emoji-search/android-views/build.gradle
@@ -20,6 +20,8 @@ android {
dependencies {
implementation libs.coil.core
+ implementation libs.coil.network
+ implementation libs.ktor.engine.okhttp
implementation libs.google.material
implementation libs.kotlinx.coroutines.android
implementation projects.samples.emojiSearch.launcher
diff --git a/samples/emoji-search/android-views/src/main/AndroidManifest.xml b/samples/emoji-search/android-views/src/main/AndroidManifest.xml
index 4a1469c40b..2d61af955c 100644
--- a/samples/emoji-search/android-views/src/main/AndroidManifest.xml
+++ b/samples/emoji-search/android-views/src/main/AndroidManifest.xml
@@ -22,6 +22,7 @@