Nucleus
Window & toolkits

Design systems natifs

macOS 26, Fluent, Yaru, Jewel et Material restylent la même fenêtre Nucleus pour le langage de design de chaque bureau.

Nucleus ouvre la fenêtre OS ; les design systems stylent le chrome et les widgets. macOS 26, Fluent et Yaru sont des bibliothèques Compose Multiplatform open-source séparées sur Maven Central, chacune avec une fenêtre décorée basée sur Nucleus pour le desktop. Jewel et Material restent dans le dépôt Nucleus.

Les toolkits

ToolkitNatif surArtefacts / moduleStatut
macOS 26macOS Tahoedev.nucleusframework:compose-macos-uiDisponible (v1.0.0)
FluentWindows 11dev.nucleusframework.composefluent:fluent + decorated-window-fluentDisponible (v1.0.0)
YaruUbuntu / GNOMEdev.nucleusframework.yarucompose:yaru + yaru-decorated-windowDisponible (v1.0.1)
JewelMultiplateformenucleus.decorated-window-jewelDisponible (avec Nucleus)
Material 2Replinucleus.decorated-window-material2Disponible (avec Nucleus)
Material 3Replinucleus.decorated-window-material3Disponible (avec Nucleus)

Les trois dépôts de design system sont versionnés indépendamment de Nucleus. Épinglez-les séparément ; ils dépendent de Nucleus 2.2+ pour la fenêtre Tao sur desktop.

Galeries live :

Choisir un 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 + composants à l'intérieur du contenu de la fenêtre
        App()
    }
}

Voir toolkit macOS 26 et le README du dépôt.

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

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

Voir toolkit Fluent et compose-fluent-ui.

build.gradle.kts
dependencies {
    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 = "Paramètres") {
        // YaruTheme doit être dans le contenu de la fenêtre
        App()
    }
}

Voir toolkit Yaru et yaru-compose-ui.

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

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

Comment ça marche

macOS, Fluent et Yaru sont des design systems complets (widgets, thème, icônes) plus un module de fenêtre desktop optionnel qui enveloppe le DecoratedWindow / Tao de Nucleus. Jewel et Material dans ce dépôt sont uniquement des adaptateurs de chrome — vous choisissez toujours la bibliothèque de widgets.

Sur desktop, placez le Theme du design system à l'intérieur du contenu de la fenêtre décorée pour que les surfaces natives (verre, caption, Mica) suivent le thème de l'app.

Pour une mise en page plein fenêtre sans pack de design system, utilisez WindowScaffold sur Tao.

Et ensuite