On this page
Overview
Circuit is a Compose-driven application framework for Kotlin and Android. Screens are keyed by Screen objects, while Presenter and Ui communicate through state and events in a unidirectional data flow.
Features and best fit
Based on official documentation; not hands-on tested · Content checked:
Key features
Connect Presenter and Ui only through state and events
Presenter and Ui do not directly reference one another. They communicate through CircuitUiState and events while presenters can use Compose runtime APIs to produce state.
Sources: [2]
Provide shared configuration, content, navigation, and retained state
Circuit.Builder configures factories and shared behavior, while CircuitCompositionLocals and CircuitContent run screens. Navigation, backstack, testing, retained state, and serialization are available as granular artifacts.
Sources: [3]
Best fit
Before adoption
Check the Kotlin, Compose, and AGP toolchain required by 0.39.0
Circuit 0.39.0 updates to Kotlin 2.4.20, Compose Multiplatform 1.12.0, AndroidX Compose 1.12.1, and AGP 9.4.0, so existing build tooling should be checked before adoption.
Sources: [4]
Official sources
- [1]slackhq/circuit — GitHub repository(2026-10-06)
- [2]Circuit 0.39.0 — Overview(2026-10-06)
- [3]Circuit 0.39.0 — Setup(2026-10-06)
- [4]Circuit 0.39.0 release(2026-10-06)
- [5]Circuit Apache-2.0 license(2026-10-06)
Supplemental curator note
Circuit uses Compose runtime concepts in presenters as well as UI. Decide how much existing dependency injection, navigation, and state management should move into Circuit, then evaluate it screen by screen.
Try it in 3 steps
- 1
Add Circuit Foundation 0.39.0
Add the foundation artifact that bundles the core Presenter, Ui, Screen, and navigation APIs.
implementation("com.slack.circuit:circuit-foundation:0.39.0") - 2
Register Ui and Presenter factories
Follow the setup guide and register factories that know how to handle the target Screen.
val circuit = Circuit.Builder() .addUiFactory(AddFavoritesUiFactory()) .addPresenterFactory(AddFavoritesPresenterFactory()) .build() - 3
Run the Screen from the Compose hierarchy
Provide the Circuit configuration and confirm the matching Presenter and Ui are connected for the Screen.
CircuitCompositionLocals(circuit) { CircuitContent(AddFavoritesScreen()) }
Growth
Growth trends · Last 30 days
1,857 Stars
Trend data is still being collected.
Development activity
Last 90 days · weekly
- Commits (last 30 days)
- 40
- Open PRs
- 7
Development activity is still being collected.
Built with
Categories and tags
Categories
GitHub data
GitHub dataView detailed GitHub data
GitHub Topics
- architecture
- compose
- kotlin
- android
- mvi
- udf
- Stars
- 1,857
- Forks
- 122
- Watchers
- 20
- Open issues
- 5
- Contributors
- 46
- Owner type
- Organization
- Primary language
- Kotlin
- License
- Apache-2.0
- Repository last updated
- Oct 5, 2026
Related information
Write a related articleShare a guide or use case for this OSS in Markdown. Articles are published after administrator approval.
Explore next
- Avalonia31,625 Stars
2 shared tag(s) · 2 shared category(s)
build cross-platform C# and XAML interfaces for desktop, mobile, and WebAssembly from one .NET UI framework
C# - Kotlin53,479 Stars
2 shared tag(s) · 1 shared category(s) · Same language
keep Java interoperability while extending one language from JVM to Android, iOS, desktop, and web
Kotlin - LeakCanary30,005 Stars
2 shared tag(s) · 1 shared category(s) · Same language
trace retained Android objects to the references causing memory leaks
Kotlin - Mavericks5,926 Stars
4 shared tag(s) · 2 shared category(s) · Same language
organize Android screen updates around immutable State and ViewModel-driven unidirectional flow
Kotlin - Horologist699 Stars
4 shared tag(s) · 2 shared category(s) · Same language
fill common Wear OS gaps with libraries for media, volume, pickers, DataLayer, and more
Kotlin - Compose Multiplatform19,405 Stars
4 shared tag(s) · 1 shared category(s) · Same language
A declarative Kotlin framework for sharing UI code across Android, iOS, desktop, and web
Kotlin
Report incorrect information
Tell us if any listing information is incorrect or outdated.