Skip to content


JetTheme is a flexible theme provider for Jetpack Compose.

  • Change the theme and recompose the UI dynamically.
  • Save theme preference to local storage.
  • Build your own design system.


dependencies {
  // Use this if you want material design support (recommended)
  implementation "dev.lcdsmao.jettheme:jettheme-material:$latestVersion"
  // Use this if you want to build custom design system
  implementation "dev.lcdsmao.jettheme:jettheme:$latestVersion"

Quick Start

Provide Themes

Define your material themes themes using buildMaterialThemePack.

val AppTheme = buildMaterialThemePack {
    colors = lightColors(...),
    typography = Typography(...),
    shapes = Shapes(...),
    id = darkId,
    colors = darkColors(...),
    id = "other_theme",
    colors = otherColors(...),

For child components can correctly access defined AppTheme via MaterialTheme, wrap your child components in a ProvideAppMaterialTheme.

fun App() {
  ProvideAppMaterialTheme(AppTheme) {
    // children

Change Themes

You can retrieve current component tree’s ThemeController from ThemeControllerAmbient.

val themeController = ThemeControllerAmbient.current

To change current theme you can use the theme id strings.


Access Current Theme Values

You can access current theme values via MaterialTheme object (from androidx.compose.material):

Surface(color = MaterialTheme.colors.primary) {
  // children

Check out JetTheme’s full documentation here.


Feel free to open a issue or submit a pull request for any bugs/improvements.