Le backend Tao
Tao est un backend de fenêtre natif en Rust qui exécute Compose Desktop sans AWT et ajoute Wayland natif, le multi-touch et le stylet.
Tao est la crate de fenêtrage Rust qui propulse aussi Tauri 2. Nucleus l'expose comme backend de fenêtre : Compose Desktop dessine dans une fenêtre native de l'OS, donc il n'y a pas d'Event-Dispatch Thread Swing ni de repli XWayland. Tao est le backend des apps Nucleus. Le backend AWT historique est déprécié et sera retiré dans une prochaine version — voir migration depuis JBR.
Ajouter la dépendance
dependencies {
implementation("dev.nucleusframework:nucleus.nucleus-application:2.0.7")
implementation("dev.nucleusframework:nucleus.decorated-window-core:2.0.7")
implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.0.7")
}Le plugin Gradle Nucleus détecte decorated-window-tao sur le classpath et sélectionne Tao
au runtime. Pour le choisir explicitement, passez NucleusBackend.Tao :
nucleusApplication(backend = NucleusBackend.Tao) {
// …
}Créer une fenêtre
import dev.nucleusframework.application.DecoratedWindow
import dev.nucleusframework.application.NucleusBackend
import dev.nucleusframework.application.nucleusApplication
import dev.nucleusframework.window.TitleBar
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.rememberWindowState
fun main() = nucleusApplication(backend = NucleusBackend.Tao) {
DecoratedWindow(
onCloseRequest = ::exitApplication,
state = rememberWindowState(size = DpSize(1024.dp, 720.dp)),
title = "Hello Tao",
) {
TitleBar { state -> /* barre de titre personnalisée */ }
MyContent()
}
}DecoratedWindow et TitleBar sont les mêmes Composables entre backends : votre code UI ne
change pas quand vous changez de backend.
Comment ça marche
Tao ouvre directement une fenêtre native de l'OS : une NSWindow sur macOS, un HWND sur
Windows, une wl_surface (ou une fenêtre X11) sur Linux. Compose dessine dans cette surface
via Skiko — Metal sur macOS, WGL sur Windows, EGL sur Linux. Rien ne passe par l'Event-Dispatch
Thread de Swing.
Le SwingPanel de Compose Desktop ne fonctionne pas sur le backend Tao et fait planter l'app
au runtime : il exige une hiérarchie de fenêtre AWT/Swing que Tao ne crée jamais. Embarquez du
contenu natif avec NativeView à la place, ou gardez le backend AWT
pour les fenêtres qui ont encore besoin d'interop Swing.
La boucle d'événements de l'OS tourne sur le thread principal du processus, donc le lanceur
macOS a besoin de -XstartOnFirstThread. Le plugin Gradle Nucleus l'ajoute automatiquement
pour run et les distributions packagées. Les builds GraalVM native-image
démarrent sur le thread principal par défaut.
L'entrée nucleusApplication { } masque le choix du backend au code UI. Sur le backend Tao,
la même fenêtre expose en dessous un handle impératif TaoWindow, que vous atteignez via
nucleusWindow.unsafe.taoWindow quand vous devez appeler directement la crate native.
Référence de l'API
L'API propre à Tao vit dans dev.nucleusframework.window.tao :
taoApplication { }— entrée directe. PréféreznucleusApplicationpour la portabilité entre backends.TaoWindow— handle impératif de la fenêtre. Atteignez-le viaLocalTaoWindowounucleusWindow.unsafe.taoWindow.NativeView— embarque une vue SwiftUI, WebView2 ou GTK dans Compose.MacOSStyle— chrome de fenêtre sur macOS :Auto(chrome moderne Tahoe sur macOS 26+, chrome classique sinon),Classic(la valeur par défaut) ouModern.TaoCursorIcon,TaoTrackpadGesture,TaoTrackpadPhase,TaoMouseButton,TaoEventCode— constantes d'entrée.TaoDeepLinkBridge.setSink { uri -> … }— réception des deep links.
decorated-window-jbr et decorated-window-jni sont dépréciés et seront retirés dans une
future version de Nucleus. Gardez-en un sur le classpath et sélectionnez le backend avec
NucleusBackend.Awt uniquement si vous avez encore besoin d'interop Swing / AWT pendant votre
migration. Voir migration depuis JBR.
Et ensuite
- La fenêtre décorée — les Composables
DecoratedWindowetTitleBarsur Tao. - Multi-touch et gestes — événements trackpad et tactiles depuis
TaoWindow. - Wayland — comportement Wayland natif et détection.
- Quickstart — construisez et lancez votre première app Nucleus.