Setting up Circuit¶
Setting up Circuit is a breeze! Just add the following to your build:
Installation¶
The simplest way to get up and running is with the circuit-foundation
dependency, which includes all the core Circuit artifacts.
dependencies {
implementation("com.slack.circuit:circuit-foundation:<version>")
}
Setup¶
Create a Circuit
instance. This controls all your common configuration, Presenter/Ui factories, etc.
val circuit = Circuit.Builder()
.addUiFactory(AddFavoritesUiFactory())
.addPresenterFactory(AddFavoritesPresenterFactory())
.build()
This configuration can be rebuilt via newBuilder()
and usually would live in your program’s DI graph.
Once you have a configuration ready, the simplest way to get going with Circuit is via CircuitCompositionLocals
. This automatically exposes the config to all child Circuit composables and allows you to get off the ground quickly with CircuitContent
, NavigableCircuitContent
, etc.
CircuitCompositionLocals(circuit) {
CircuitContent(AddFavoritesScreen())
}
See the docs for CircuitContent
and NavigableCircuitContent
for more information.
Granular Artifacts¶
Circuit is split into a few different artifacts to allow for more granular control over your dependencies. The following table shows the available artifacts and their purpose:
Artifact ID | Dependencies |
---|---|
circuit-backstack |
Circuit’s backstack implementation. |
circuit-runtime |
Common runtime components like Screen , Navigator , etc. |
circuit-runtime-presenter |
The Presenter API, depends on circuit-runtime . |
circuit-runtime-ui |
The Ui API, depends on circuit-runtime . |
circuit-foundation |
The Circuit foundational APIs like Circuit , CircuitContent , etc. Depends on the first three. |
circuit-test |
First-party test APIs for testing navigation, state emissions, and event sinks. |
circuit-overlay |
Optional Overlay APIs. |
circuit-retained |
Optional rememberRetained() APIs. |
Platform Support¶
Circuit is a multiplatform library, but not all features are available on all platforms. The following table shows which features are available on which platforms:
- ✅ Available
- ❌ Not available
- – Not applicable
Feature | Android | JVM | iOS | JS | Notes |
---|---|---|---|---|---|
Backstack |
✅ | ✅ | ✅ | ✅ | |
CircuitContent |
✅ | ✅ | ✅ | ✅ | |
ContentWithOverlays |
✅ | ✅ | ✅ | ✅ | |
NavigableCircuitContent |
✅ | ✅ | ✅ | ✅ | |
Navigator |
✅ | ✅ | ✅ | ✅ | |
SaveableBackstack |
✅ | ✅ | ✅ | ✅ | Saveable is a no-op on non-android. |
rememberCircuitNavigator |
✅ | ✅ | ✅ | ✅ | |
rememberRetained |
✅ | ✅ | ✅ | ✅ | |
TestEventSink |
✅ | ✅ | ✅ | ✅ | On JS you must use asEventSinkFunction() . |