A app-driven remote compose framework for driving a side-car / companion desktop app for debugging your Android application.
Livewire embeds a small client in your app that serves remote compose driven debugging tools such as database browsing, network inspection, and more, as a stream of UI over the wire. The desktop host app discovers running clients on connected devices, connects, and renders that UI live.
- Client: a library you add to your app. It broadcasts itself for discovery and streams plugin UI to the host.
- Host: a desktop app you run on your machine. It finds clients over ADB (Android), USB (iOS), or localhost (Desktop), and renders whatever they serve.
// build.gradle.kts
dependencies {
// Core SDK for integrating into your app
implementation("com.livewire-kt.livewire:client:<version>")
// SQLite Database Viewer
implementation("com.livewire-kt.livewire:plugin-database:<version>")
// Network Viewer
implementation("com.livewire-kt.livewire:plugin-network-core:<version>")
implementation("com.livewire-kt.livewire:plugin-network-ktor:<version>")
implementation("com.livewire-kt.livewire:plugin-network-okhttp:<version>")
// Preferences Viewer (SharedPreferences, DataStore, NSUserDefaults)
implementation("com.livewire-kt.livewire:plugin-preferences:<version>")
// Compose Recomposition Viewer
implementation("com.livewire-kt.livewire:plugin-recomposition:<version>")
}Create a client, install the plugins you want, and start it:
val livewireClient = LivewireClient {
install(DatabasePlugin(context))
install(NetworkPlugin())
install(PreferencesPlugin(context))
}
livewireClient.start()macOS:
brew install --cask livewire-kt/tap/livewireor
brew tap livewire-kt/tap
brew install --cask livewireUntil publishing is configured for other platforms, you may run the host app from source:
./gradlew :host:runNative installers can also be built with Compose Desktop packaging:
./gradlew :host:packageDistributionForCurrentOS # .dmg / .msi / .debWith your app running on a connected device, emulator, or the same machine, the host discovers it automatically, just select it to connect.
Check it out in-action here!
// build.gradle.kts
dependencies {
implementation("com.livewire-kt.livewire:plugin-database:<version>")
}// build.gradle.kts
dependencies {
implementation("com.livewire-kt.livewire:plugin-network-core:<version>")
// Plus…
implementation("com.livewire-kt.livewire:plugin-network-ktor:<version>")
// or…
implementation("com.livewire-kt.livewire:plugin-network-okhttp:<version>")
}// build.gradle.kts
dependencies {
implementation("com.livewire-kt.livewire:plugin-preferences:<version>")
}// build.gradle.kts
dependencies {
implementation("com.livewire-kt.livewire:plugin-recomposition:<version>")
}Making it easy to build custom plugins was the driving factor for developing Livewire. Read about how to build your own in the docs.
Copyright 2026 livewire-kt
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.






