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
| Toolkit | Native to | Artifacts / module | Status |
|---|---|---|---|
| macOS 26 | macOS Tahoe | dev.nucleusframework:compose-macos-ui | Available (v1.0.0) |
| Fluent | Windows 11 | dev.nucleusframework.composefluent:fluent + decorated-window-fluent | Available (v1.0.0) |
| Yaru | Ubuntu / GNOME | dev.nucleusframework.yarucompose:yaru + yaru-decorated-window | Available (v1.0.1) |
| Jewel | Cross-platform | nucleus.decorated-window-jewel | Available (with Nucleus) |
| Material 2 | Fallback | nucleus.decorated-window-material2 | Available (with Nucleus) |
| Material 3 | Fallback | nucleus.decorated-window-material3 | Available (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
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.
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.
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.
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()
}
}
}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
Window & toolkits
How Nucleus opens native desktop windows from Compose through the DecoratedWindow composable, the TitleBar slot, and the toolkit modules that restyle them.
Context menus
Replace Compose-drawn context menus with the OS-looking menu — NSMenu on macOS, a Fluent flyout on Windows, and Adwaita or Breeze on Linux.