Android Compose bindings catalog
Native Android Jetpack Compose surface for Koder Design — the set of `@Composable` widgets, theming primitives, and packaging artifacts that mirror Koder's canonical components 1:1 for apps that want a native Android build (not via Flutter). Material parity (`/develop/android/jetpack-compose`).
Spec — Android Compose bindings catalog
Facet *evelop*of Koder Design. Material parity: https://m3.material.io/develop/android/jetpack-compose.
Surface: native Android Jetpack Compose. Catalog page: https://kds.koder.dev/{locale}/develop/android-compose/.
Why a native Compose surface
Flutter covers most Koder targets, but native Android apps benefit from:
- Better integration with Android system APIs (WorkManager, custom
tile services, ML Kit, etc.)
- Lighter package size when the app is Android-only
- Compose ecosystem reuse (existing in-house Compose codebases)
Koder Design Compose is *ept feature-parity*with the canonical component specs. A Compose-only app should look indistinguishable from a Flutter-based app on the same preset.
Package layout
| Package | Maven coordinate | Purpose |
|---|---|---|
koder-design-compose |
dev.koder:design-compose:<version> |
Core widgets + theme |
koder-design-compose-icons |
dev.koder:design-compose-icons:<version> |
Icon set |
koder-design-compose-fonts |
dev.koder:design-compose-fonts:<version> |
Self-hosted woff2 assets adapted to Android font resources |
Published to Maven Central + Koder Hub (hub.koder.dev/maven/).
R1 — Catalog page contents
For each canonical component (wave 1 + wave 2 + future waves):
| Section | Contents |
|---|---|
| Composable signature | @Composable fun KoderButton(...) parameters |
| Theme tokens consumed | List of --kds-* tokens read via KoderDesignTheme |
| Variant matrix | Compose parameter combinations → canonical spec variants |
| Code sample | Idiomatic snippet with proper imports |
| State preview | Side@Preview |
| Accessibility | Modifier.semantics { … } recommendations |
| Cross-link | Link to the canonical specs/components/<slug>.kmd |
R2 — KoderDesignTheme composable
Wraps the entire app:
@Composable
fun KoderDesignTheme(
preset: KoderPreset = KoderPreset.Material3,
darkTheme: Boolean = isSystemInDarkTheme(),
seedColor: Color? = null,
density: KoderDensity = KoderDensity.Default,
content: @Composable () -> Unit,
)Internally:
- Derives the 18
role palette per `themes/colordynamic.kmd` - Maps to
MaterialTheme.colorSchemefor composability with existingMaterial widgets (escape hatch)
- Provides
LocalKoderTokens,LocalKoderDensity, etc.
R3 — Composable naming
| Canonical component | Compose name |
|---|---|
| Button (filled) | KoderButton(variant = Filled, …) |
| Button (tonal) | KoderButton(variant = Tonal, …) |
| Button (icon-only) | KoderIconButton(...) |
| Card | KoderCard(...) |
| Text field | KoderTextField(...) |
| Dialog | KoderDialog(...) |
| Navigation bar / drawer / rail | KoderNavigationBar(...) / Drawer / Rail |
| Snackbar | KoderSnackbar(...) |
| Tabs | KoderTabRow(...) + KoderTab(...) |
Pattern: Koder<ComponentName> for top-level, with variants exposed as enums.
R4 — Density propagation
KoderDensity.Compact / Default / Comfortable flows via LocalKoderDensity. Each Composable reads it and adjusts its padding / size per specs/foundations/customization.kmd.
R5 — Per-preset adaptation
Same composable can render with different presets via the preset parameter on KoderDesignTheme. Switching presets at runtime is supported (palette + density + shape recompose without lifecycle restart).
R6 — Accessibility
- Every Koder composable exposes
Modifierparameter for the callerto extend
- Internal semantics conform to canonical specs (e.g.,
KoderCheckboxaddsRole.Checkbox+ state) - Auto
contentdescription for icon-only buttons viacontentDescriptionparameter
- TalkBack tested per release
R7 — Versioning
Compose surface follows Koder Design semver:
- Major: breaking spec change (R-rule removal, signature break)
- Minor: spec additions (new component, new variant)
- Patch: bug fix, no surface change
Each release tagged engines/sdk/koder-design-compose/v* and published to Maven Central + Hub.
R8 — Out of scope
- ❌ Material 2 Compose support (Material 2 deprecated; not back-ported)
- ❌ View
based (onlyandroid.view.View) bindings — Compose - ❌ Custom build flavor per preset (preset is runtime, not buildtime)
R9 — Forbidden patterns
- ❌ Compose composable that bypasses
KoderDesignTheme(always wraps an app)
- ❌ Hardcoded color hex in composables (use tokens)
- ❌ Composable that ships strings (use
stringResourceperi18n/contract.kmd) - ❌ Composable that doesn't accept
Modifierparameter
Cross-link
- `themes