Nucleus
Window & toolkits

Yaru design system

Ubuntu Yaru widgets and themes for Compose Multiplatform, with a Nucleus-backed YaruDecoratedWindow.

yaru-compose-ui ports yaru.dart to Compose Multiplatform: 50+ widgets, accent variants, light/dark/high-contrast themes, and a GNOME-style YaruDecoratedWindow on Nucleus Tao. Versioned independently of Nucleus (current release 1.0.1).

Live gallery: nucleusframework.github.io/yaru-compose-ui.

Add the dependency

Design system only (no native windowing):

build.gradle.kts
dependencies {
    implementation("dev.nucleusframework.yarucompose:yaru:1.0.1")
}

Desktop window (pulls yaru + Nucleus Tao transitively):

build.gradle.kts
dependencies {
    implementation("dev.nucleusframework.yarucompose:yaru-decorated-window:1.0.1")
}

Open a Yaru window

import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.yarucompose.themes.YaruTheme
import dev.nucleusframework.yarucompose.themes.YaruVariant
import dev.nucleusframework.yarucompose.window.YaruDecoratedWindow

fun main() = nucleusApplication {
    YaruDecoratedWindow(onCloseRequest = ::exitApplication, title = "Settings") {
        YaruTheme(isDark = false, variant = YaruVariant.Orange) {
            App()
        }
    }
}

YaruTheme must sit inside the window content so chrome tracks the resolved colour scheme and layout direction (including RTL).

How it works

yaru is design-only and talks to windowing through optional composition locals. yaru-decorated-window fulfils those contracts with Nucleus and ships the native binaries; leave it out if you draw into a plain Compose Window or a non-JVM target.

What's next