Nucleus
Window & toolkits

Native design systems

macOS 26, Fluent, Yaru, Jewel and Material restyle the same Nucleus window for each desktop design language.

Nucleus opens the OS window; design systems style the chrome and the widgets. macOS 26, Fluent and Yaru ship as separate open-source Compose Multiplatform libraries on Maven Central, each with a Nucleus-backed decorated window for desktop. Jewel and Material adapters stay inside the Nucleus repository.

The toolkits

ToolkitNative toArtifacts / moduleStatus
macOS 26macOS Tahoedev.nucleusframework:compose-macos-uiAvailable (v1.0.0)
FluentWindows 11dev.nucleusframework.composefluent:fluent + decorated-window-fluentAvailable (v1.0.0)
YaruUbuntu / GNOMEdev.nucleusframework.yarucompose:yaru + yaru-decorated-windowAvailable (v1.0.1)
JewelCross-platformnucleus.decorated-window-jewelAvailable (with Nucleus)
Material 2Fallbacknucleus.decorated-window-material2Available (with Nucleus)
Material 3Fallbacknucleus.decorated-window-material3Available (with Nucleus)

The three design-system repos version independently of Nucleus. Pin them separately; they depend on Nucleus 2.2+ for the Tao window on desktop.

Live galleries:

Choose a toolkit

build.gradle.kts
plugins {
    id("dev.nucleusframework")
}
dependencies {
    implementation("dev.nucleusframework:compose-macos-ui:1.0.0")
}
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.macoscompose.window.MacosDecoratedWindow

fun main() = nucleusApplication {
    MacosDecoratedWindow(onCloseRequest = ::exitApplication, title = "Mail") {
        // MacosTheme + components live inside the window content
        App()
    }
}

See the macOS 26 toolkit page and the repo README.

build.gradle.kts
dependencies {
    implementation("dev.nucleusframework.composefluent:fluent:1.0.0")
    implementation("dev.nucleusframework.composefluent:decorated-window-fluent:1.0.0")
}
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.window.fluent.FluentDecoratedWindow
import dev.nucleusframework.window.fluent.FluentTitleBar
import io.github.composefluent.FluentTheme

fun main() = nucleusApplication {
    FluentTheme {
        FluentDecoratedWindow(onCloseRequest = ::exitApplication, title = "Settings") {
            FluentTitleBar { /* … */ }
            App()
        }
    }
}

See the Fluent toolkit page and compose-fluent-ui.

build.gradle.kts
dependencies {
    // Pulls yaru + Nucleus Tao transitively.
    implementation("dev.nucleusframework.yarucompose:yaru-decorated-window:1.0.1")
}
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.yarucompose.window.YaruDecoratedWindow

fun main() = nucleusApplication {
    YaruDecoratedWindow(onCloseRequest = ::exitApplication, title = "Settings") {
        // YaruTheme must be inside the window content
        App()
    }
}

See the Yaru toolkit page and yaru-compose-ui.

build.gradle.kts
dependencies {
    implementation("dev.nucleusframework:nucleus.nucleus-application:2.5.15")
    implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.5.15")
    implementation("dev.nucleusframework:nucleus.decorated-window-jewel:2.5.15")
}
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.darkmodedetector.isSystemInDarkMode
import dev.nucleusframework.window.jewel.JewelDecoratedWindow
import dev.nucleusframework.window.jewel.JewelTitleBar
import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme

fun main() = nucleusApplication {
    IntUiTheme(isDark = isSystemInDarkMode()) {
        JewelDecoratedWindow(onCloseRequest = ::exitApplication, title = "Tools") {
            JewelTitleBar { state -> /* … */ }
            MyContent()
        }
    }
}
build.gradle.kts
dependencies {
    implementation("dev.nucleusframework:nucleus.nucleus-application:2.5.15")
    implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.5.15")
    implementation("dev.nucleusframework:nucleus.decorated-window-material3:2.5.15")
}
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.window.material.MaterialDecoratedWindow
import dev.nucleusframework.window.material.MaterialTitleBar

fun main() = nucleusApplication {
    MaterialDecoratedWindow(onCloseRequest = ::exitApplication, title = "App") {
        MaterialTitleBar { state -> /* … */ }
        MyContent()
    }
}

How it works

macOS, Fluent and Yaru are full design systems (widgets, theme, icons) plus an optional desktop window module that wraps Nucleus DecoratedWindow / Tao. Jewel and Material in this repo are window chrome adapters only — you still pick the widget library yourself.

Where the theme goes depends on the pack. Fluent, Jewel and Material derive the window chrome from the ambient theme, so wrap the window call — FluentTheme { FluentDecoratedWindow { … } } — and they re-provide the theme inside the content themselves. JewelDecoratedWindow reads JewelTheme.globalColors and throws without a provider. The macOS 26 and Yaru wrappers take their theme inside the window content instead.

For full-window layouts and custom chrome without a design-system pack, use WindowScaffold on Tao.

What's next