Quickstart
Cinq minutes entre un dossier vide et une app desktop native packagée, propulsée par Tao.
Une app Nucleus complète tient en deux fichiers : un script Gradle et un main Kotlin. À la fin de cette page on a une fenêtre qui tourne, puis un installateur signé pour le OS courant.
L'essentiel
- Un seul plugin :
id("dev.nucleusframework"). - Un seul point d'entrée :
nucleusApplication { … }. - Une seule commande :
./gradlew run. Une autre :./gradlew packageDistributionForCurrentOS.
1. build.gradle.kts
plugins {
kotlin("jvm") version "2.0.21"
id("org.jetbrains.compose") version "1.7.0"
id("dev.nucleusframework") version "2.0.0"
}
repositories {
mavenCentral()
google()
}
dependencies {
implementation(compose.desktop.currentOs)
// Optionnel : activer le backend Tao (fenêtrage natif Rust)
implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.0.0")
}
nucleus.application {
mainClass = "com.example.MainKt"
nativeDistributions {
packageName = "MyApp"
packageVersion = "1.0.0"
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
}
}2. src/main/kotlin/com/example/Main.kt
package com.example
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import dev.nucleusframework.nucleusapplication.DecoratedWindow
import dev.nucleusframework.nucleusapplication.NucleusBackend
import dev.nucleusframework.nucleusapplication.nucleusApplication
fun main() = nucleusApplication(backend = NucleusBackend.Tao) {
DecoratedWindow(
onCloseRequest = ::exitApplication,
title = "MyApp",
) {
Box(Modifier.fillMaxSize()) {
Text("Hello from Nucleus")
}
}
}Choix du backend
NucleusBackend.Auto (par défaut) prend Tao si decorated-window-tao est sur le classpath, sinon le backend AWT. Force-le explicitement avec NucleusBackend.Tao ou NucleusBackend.Awt. Voir Backends.
3. Lance-la
./gradlew runUne fenêtre native s'ouvre avec une title bar custom (Tao sous Linux/Windows ; native macOS sur macOS).
4. Package-la
./gradlew packageDistributionForCurrentOSL'installateur atterrit dans build/compose/binaries/main/<format>/. Sur macOS c'est un .dmg, sur Windows un .msi, sur Linux un .deb. Ajoute des formats en étendant targetFormats(...) — 16 sont supportés, voir Configuration.
Ce qu'on viens de livrer
- Une vraie fenêtre native, rendue GPU via Skia, décorée par le backend Tao.
- Tout le runtime Nucleus branché : lock single-instance, handler de deep link, détection du cache AOT, initialiseur GraalVM.
- Un pipeline d'installateur prêt à signer. Pour activer le signing et la notarisation sur macOS ou Authenticode sur Windows, configure les blocs
macOS { signing { … } }/windows { signing { … } }— voir Configuration.
Et ensuite ?
- Project setup — layout multi-module, propriétés Gradle, config JDK recommandée.
- Configuration — le DSL complet.
- Architecture — ce qui tourne vraiment sous le
main.