A Compose Multiplatform component library driven by Figma M3 Expressive tokens
Browse the components, their props, and code snippets. Targets Android (API 24+) and iOS (16.0+). Same token vocabulary as the Svelte library — switch platforms without learning a new system.
Install
Justin is currently consumed via a Gradle project reference. Maven publishing is wired but the artifact is not yet pushed to a public feed.
// settings.gradle.kts
include(":justinShared")
project(":justinShared").projectDir = file("../path/to/justin/packages/kmp/shared")
// composeApp/build.gradle.kts
commonMain.dependencies {
implementation(project(":justinShared"))
}Usage
Wrap your composable tree in AppTheme once at the root. Every Justin composable then
picks up tokens, typography and light/dark mode automatically.
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import com.davidhorn.justin.theme.AppTheme
import com.davidhorn.justin.components.button.DhButton
@Composable
fun App() {
AppTheme(darkTheme = isSystemInDarkTheme()) {
DhButton(text = "Save", onClick = { /* ... */ })
}
}Components
Input
Navigation
- DhTabs Underline-indicator tab strip for switching between sibling views. Variant (primary/secondary/tertiary/error) × alignment (start/center/end/stretch) × scrollable. Renders only the strip — caller owns selectedIndex and the content below. Draft
- DhPillTabs Segmented pill chip group for switching between sibling views. Same selectedIndex / variant / alignment contract as DhTabs; selected chip is variant-filled, unselected chips show a surfaceBright border on the page surface. Draft