Jenga
Jenga is a Kotlin Multiplatform + Compose Multiplatform design system: brandable design tokens and ready-made Jenga* blocks that render identically on Android, iOS, Desktop (JVM) and the Web (Wasm). Jenga is Swahili for "to build": you build screens out of Jenga blocks rather than raw Compose or Material primitives.
The public API is entirely JengaTheme.* (tokens) and Jenga* (blocks). Material 3 is bridged internally and never leaks into the surface.
Getting started
Wrap your UI once in io.github.joelkanyi.jenga.theme.JengaTheme, then read tokens and use blocks below it:
JengaTheme(
content = {
JengaScaffold(
topBar = {
JengaTopAppBar(
title = "Events",
)
},
content = { padding ->
JengaStack(
modifier = Modifier.padding(
paddingValues = padding,
),
content = {
JengaText(
text = "Tonight",
style = JengaTheme.typography.headingMedium,
)
JengaButton(
text = "Scan a ticket",
onClick = { },
)
},
)
},
)
},
)The three layers are tokens → blocks → patterns: primitive palette to semantic roles to each block's *Defaults, then organisms composed from blocks.
Packages
The color system: the generated primitive palette, the semantic JengaColors roles (brand, surface, textPrimary, success…) that flip for dark mode, and withBrand, a lower-level helper that rebrands a single palette (prefer jengaBrand(seed = …) to brand a whole light+dark theme).
The elevation ladder (JengaElevation).
Durations and easing (JengaMotion).
Corner radii (JengaShapes).
Touch targets, icon sizes and control heights (JengaSizing).
The spacing scale (JengaSpacing).
The Outfit-based type scale (JengaTypography) and rememberJengaFontFamily. Swap the family to re-theme typography while keeping the scale.
The theme entry point. JengaTheme wraps content, exposes every token set (JengaTheme.colors / typography / spacing / shapes / sizing / elevation / motion) through CompositionLocals, and bridges to Material 3 internally. Brand and typeface are injected here: brand the whole theme from one seed with JengaTheme(brand = jengaBrand(seed = Color(0xFF6D28D9))).