Intégration OS
Atteins chaque API d'OS dont un dev desktop a besoin — notifications, tray, dock, mode sombre, raccourcis globaux, contrôles média, couleur d'accent — depuis du Kotlin idiomatique.
Une app desktop se distingue par la finesse de son intégration au système. Nucleus expose la surface native de macOS, Windows et Linux sous forme de petits modules Kotlin ciblés — sans JNI à écrire, sans pont FFI à assembler, sans pièges JNA. On choisit ce qu'on utilise, le reste reste sur l'étagère.
En bref
- Une API Kotlin par fonctionnalité OS — même forme sur macOS, Windows, Linux.
- Backends natifs : AppKit, WinRT, FreeDesktop / D-Bus, MPRIS, SMTC, AppIndicator, NSUserNotificationCenter — chacun emballé par un pont JNI fourni et chargé par Nucleus.
- À la carte. Chaque module est un artefact Gradle indépendant.
- Réactif là où il faut : le mode sombre, la couleur d'accent et les menus du tray participent à la recomposition Compose.
Matrice de couverture
| Fonctionnalité | Module | macOS | Windows | Linux |
|---|---|---|---|---|
| Notifications cross-plateforme | notification-common | oui | oui | oui |
| Notifications natives (par OS) | notification-macos / -windows / -linux | oui | oui | oui |
| System tray + apps ancrées au tray | composenativetray | oui | oui | oui |
| Raccourcis globaux | global-hotkey | oui | oui | oui |
| Contrôles média (Now Playing / SMTC / MPRIS) | media-control | oui | oui | oui |
| Mode sombre (réactif) | darkmode-detector | oui | oui | oui |
| Couleur d'accent et contraste élevé | system-color | oui | oui | oui |
| Infos matériel / OS | system-info | oui | oui | oui |
| Barre de menus macOS | menu-macos | oui | — | — |
| Noms d'icônes FreeDesktop | freedesktop-icons | — | — | oui |
Philosophie
Toutes les pages de cette section suivent la même règle : si l'OS expose une capacité dont une app desktop sérieuse a besoin, Nucleus la rend disponible en Kotlin — typée, idiomatique, prête à livrer. Pas de repli Swing bancal, pas de cross-plateforme "à peu près" qui se fait passer pour natif.
Les façades cross-plateformes (notification-common, media-control, darkmode-detector) couvrent l'intersection des capacités. Quand on veut la longue traîne — barres de progression toast Windows, niveaux d'interruption macOS, volume MPRIS sous Linux — on descend au module spécifique sans réécrire le app.
Pour continuer
- Notifications cross-plateforme — écris une fois, sonne partout.
- System tray — icônes rendues par Compose, menus réactifs.
- Global hotkey — capte les touches même hors focus.
- Mode sombre — un vrai listener réactif, pas une lecture unique.
Material 2 & Material 3
Le toolkit de repli cross-plateforme — le DecoratedWindow stylé à partir de n'importe quel ColorScheme Material.
Notifications cross-plateforme
Envoie une notification sur macOS, Windows et Linux depuis un seul DSL Kotlin — titre, message, image, boutons d'action, callbacks de cycle de vie.