Nucleus
Window & toolkits

Quatre looks natifs

Les modules de toolkit Nucleus restylent le même DecoratedWindow pour coller au langage de design de chaque bureau.

Nucleus dessine le chrome de la fenêtre — la barre de titre, les boutons de contrôle et les effets de bord — via des modules de toolkit. Chaque toolkit restyle le même DecoratedWindow pour un langage de design de bureau différent. Vous choisissez le look en ajoutant un module, pas en modifiant votre UI.

Les toolkits

ToolkitNatif surModuleStatut
macOS 26macOS Tahoenucleus.decorated-window-macos26Prochainement
FluentWindows 11nucleus.decorated-window-fluentProchainement
YaruUbuntu / GNOMEnucleus.decorated-window-yaruProchainement
JewelMultiplateformenucleus.decorated-window-jewelDisponible
Material 2Replinucleus.decorated-window-material2Disponible
Material 3Replinucleus.decorated-window-material3Disponible

Les packs macOS, Fluent et Yaru arrivent prochainement et ne sont pas encore publiés. Les artifact ids ci-dessus sont provisoires et peuvent changer à la sortie. Jewel, Material 2 et Material 3 sont disponibles aujourd'hui.

Choisir un toolkit

Ajoutez le module de toolkit à côté de nucleus-application et d'un backend, puis enveloppez votre contenu dans le DecoratedWindow du toolkit.

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()
    }
}

Le module Material 3 se trouve dans le package dev.nucleusframework.window.material, pas window.material3. Pour changer de toolkit, remplacez la dépendance et l'import. Le contenu de la fenêtre reste identique.

Matrice de couverture

CapacitémacOS 26FluentYaruJewelMaterial 3
Look natif sur l'OS hôtemacOSWindowsUbuntuN'importe (IDE)N'importe
Translucidité / effetsLiquid GlassMica / AcryliclibadwaitaSuit le thèmeTons de surface
Boutons de barre de titreTraffic lightsMin/Max/CloseHeaderbar GNOMEIntelliJMaterial
Suit le mode sombre de l'OSOuiOuiOuiOuiOui
BackendTaoTaoTaoTaoTao

Fonctionnement

Chaque module de toolkit enveloppe le même DecoratedWindow de nucleus-application et fournit ses propres TitleBarStyle et DecoratedWindowStyle. Les Composables de vos écrans ne changent pas ; seul le wrapper en haut de l'arbre change. Changer de toolkit ne touche donc que le chrome de la fenêtre : un build Fluent pour les captures d'écran et un build natif pour les utilisateurs partagent le même contenu.

Les styles sont de simples data classes de decorated-window-core, dans le package dev.nucleusframework.window.styling : TitleBarStyle et TitleBarColors, DecoratedWindowStyle et DecoratedWindowMetrics. Chaque toolkit les dérive de sa propre source de vérité. Jewel expose rememberJewelWindowStyle() et rememberJewelTitleBarStyle() ; Material 3 expose rememberMaterialWindowStyle(colorScheme) et rememberMaterialTitleBarStyle(colorScheme). Material 2 mappe ses Colors en interne.

Les toolkits stylent le chrome de la fenêtre. Les widgets à l'intérieur — boutons, listes, champs texte — restent à votre choix : Material 3, Jewel, ou votre propre design system.

Et ensuite