Nucleus
Window & toolkits

Four native looks

Nucleus toolkit modules restyle the same DecoratedWindow to match each desktop's design language.

Nucleus draws the window chrome — the title bar, window controls, and edge effects — through toolkit modules. Each toolkit restyles the same DecoratedWindow Composable for a different desktop design language. You pick the look by adding a module, not by changing your UI code.

The toolkits

ToolkitNative toModuleStatus
macOS 26macOS Tahoenucleus.decorated-window-macos26Coming soon
FluentWindows 11nucleus.decorated-window-fluentComing soon
YaruUbuntu / GNOMEnucleus.decorated-window-yaruComing soon
JewelCross-platformnucleus.decorated-window-jewelAvailable
Material 2Fallbacknucleus.decorated-window-material2Available
Material 3Fallbacknucleus.decorated-window-material3Available

The macOS, Fluent, and Yaru packs are coming soon and are not published yet. The artifact ids above are provisional and may change at release. Jewel, Material 2, and Material 3 are available today.

Choose a toolkit

Add the toolkit module alongside nucleus-application and a backend, then wrap your content in the toolkit's DecoratedWindow.

build.gradle.kts
dependencies {
    implementation("dev.nucleusframework:nucleus.nucleus-application:2.0.7")
    implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.0.7")
    implementation("dev.nucleusframework:nucleus.decorated-window-jewel:2.0.7")
}
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.window.jewel.JewelDecoratedWindow
import dev.nucleusframework.window.jewel.JewelTitleBar

fun main() = nucleusApplication {
    JewelDecoratedWindow(onCloseRequest = ::exitApplication, title = "Tools") {
        JewelTitleBar { state -> /* … */ }
        MyContent()
    }
}
build.gradle.kts
dependencies {
    implementation("dev.nucleusframework:nucleus.nucleus-application:2.0.7")
    implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.0.7")
    implementation("dev.nucleusframework:nucleus.decorated-window-material3:2.0.7")
}
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()
    }
}
build.gradle.kts
dependencies {
    implementation("dev.nucleusframework:nucleus.nucleus-application:2.0.7")
    implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.0.7")
    implementation("dev.nucleusframework:nucleus.decorated-window-material2:2.0.7")
}
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.window.material2.MaterialDecoratedWindow
import dev.nucleusframework.window.material2.MaterialTitleBar

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

The Material 3 module lives in the dev.nucleusframework.window.material package, not window.material3. To change toolkits, swap the dependency and the import. The window content stays the same.

Coverage matrix

FeaturemacOS 26FluentYaruJewelMaterial 3
Native look on host OSmacOSWindowsUbuntuAny (IDE)Any
Translucency / effectsLiquid GlassMica / AcryliclibadwaitaTheme-awareSurface tones
Title bar buttonsTraffic lightsMin/Max/CloseGNOME headerbarIntelliJMaterial
Follows OS dark modeYesYesYesYesYes
BackendTaoTaoTaoTaoTao

How it works

Every toolkit module wraps the same DecoratedWindow from nucleus-application and supplies its own TitleBarStyle and DecoratedWindowStyle. The Composables in your screens don't change; only the wrapper at the top of the tree does. Switching toolkits therefore changes the window chrome alone, so a Fluent build for screenshots and a native build for users share the same content.

The styles are plain data classes in decorated-window-core, under the dev.nucleusframework.window.styling package: TitleBarStyle and TitleBarColors, DecoratedWindowStyle and DecoratedWindowMetrics. Each toolkit derives them from its own source of truth. Jewel exposes rememberJewelWindowStyle() and rememberJewelTitleBarStyle(); Material 3 exposes rememberMaterialWindowStyle(colorScheme) and rememberMaterialTitleBarStyle(colorScheme). Material 2 maps its Colors internally.

Toolkits style the window chrome. The widgets inside — buttons, lists, text fields — are whatever you choose: Material 3, Jewel, or your own design system.

What's next