The Nucleus framework lets you write cross-platform desktop applications using Kotlin. It is based on Compose Multiplatform and adds native window decorations, deep operating-system integration, code signing, and native installers — all configured through a single Gradle DSL. Your app runs either as a GraalVM Native Image or on the JVM.
It targets the gap between "a Compose Desktop window" and "an application the operating system treats as its own" — the work that is normally spread across a dozen half-maintained libraries and a hand-written packaging pipeline. Every OS integration is a real platform API behind a Kotlin one: no AWT dependency on the Tao backend, and the accessibility layer is verified against AT-SPI, UI Automation, and macOS AX in CI on all three platforms.
Read Why Nucleus for how it compares to Electron and Tauri.
Nucleus is under active development and moves fast. The decorated-window-tao backend runs
in explicit-API mode with its public surface locked by a binary-compatibility dump; the other
runtime modules are not API-frozen yet and can change between minor releases, so pin exact
versions. The Tao backend is the recommended one for new projects — decorated-window-jni
and decorated-window-jbr are kept for existing users and receive fixes only.
Nucleus ships as a Gradle plugin. Apply it alongside the Kotlin and Compose plugins in
your module's build.gradle.kts:
plugins {
kotlin("jvm") version "2.4.0"
id("org.jetbrains.compose") version "1.11.1"
id("dev.nucleusframework") version "2.0.0"
}
repositories {
mavenCentral()
google()
}
dependencies {
implementation(compose.desktop.currentOs)
// Entry point — provides nucleusApplication and DecoratedWindow
implementation("dev.nucleusframework:nucleus.nucleus-application:2.0.0")
// Tao backend — Rust-native windowing
implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.0.0")
}For more installation options, see the install guide and project setup.
Nucleus builds on Compose Multiplatform and requires:
| Requirement | Version | Note |
|---|---|---|
| JDK | 17+ (25+ for AOT cache) | JBR 25 recommended |
| Kotlin | 2.0+ | Compose Multiplatform requires Kotlin 2.x |
| Gradle | 8.0+ | Bundled wrapper is sufficient |
Each build can compile, run, and package for macOS, Windows, and Linux from a single codebase.
- macOS — Intel (
x64) and Apple Silicon (arm64), shipped as a universal binary. Liquid Glass on macOS 26. - Windows —
x64andarm64. - Linux —
x64andarm64, with Wayland and X11 support.
Create 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.ui.Modifier
import dev.nucleusframework.application.DecoratedWindow
import dev.nucleusframework.application.NucleusBackend
import dev.nucleusframework.application.nucleusApplication
fun main() = nucleusApplication(backend = NucleusBackend.Tao) {
DecoratedWindow(
onCloseRequest = ::exitApplication,
title = "MyApp",
) {
Box(Modifier.fillMaxSize()) {
Text("Hello from Nucleus")
}
}
}Then configure packaging in build.gradle.kts:
nucleus.application {
mainClass = "com.example.MainKt"
nativeDistributions {
packageName = "MyApp"
packageVersion = "1.0.0"
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
}
}./gradlew run # Run locally in a native Tao window
./gradlew packageDistributionForCurrentOS # Build an installer for your OSThe full quickstart walks through each step.
- nucleusframework.dev/en/docs — all of Nucleus's documentation
- Quickstart — build and package your first app
- Architecture — the layered model behind the framework
- examples/ — demo and sample applications, including the flagship
nucleus-demo
Ship everywhere — 18 packaging formats (DMG, PKG, EXE, MSI, NSIS, NSIS-Web, Portable, AppX, DEB, RPM, Pacman, AppImage, raw AppImage, Snap, Flatpak, ZIP, TAR, 7Z), store publishing (Mac App Store, Microsoft Store, Snapcraft, Flathub), code signing and notarization, built-in auto-update, deep links, and file associations.
Feel native — Decorated windows with native controls, notifications, taskbar/dock badges and menus, media controls (MPRIS, Now Playing, SMTC), dark mode, accent colors, global hotkeys, and system tray — all behind clean Kotlin APIs.
Perform — GraalVM Native Image compiles your app to a standalone binary with automatic reachability metadata; a typical Compose UI cold-starts in about half a second and settles around 100–150 MB of RAM. Or stay on the JVM with an AOT cache (JDK 25+) and ProGuard-optimized release builds.
Each module is published independently to Maven Central — use them together or standalone.
| Module | Description |
|---|---|
nucleus.core-runtime |
Platform detection, single instance, deep links, executable type |
nucleus.aot-runtime |
AOT cache mode detection |
nucleus.updater-runtime |
Auto-update engine with GitHub/S3, progress tracking, SHA-512 |
nucleus.darkmode-detector |
Reactive OS dark mode detection |
nucleus.system-color |
Reactive accent color & high contrast detection |
nucleus.system-info |
CPU, memory, GPU (NVIDIA/AMD/Intel), temperature, network, processes |
nucleus.decorated-window-tao |
Rust-native windowing backend (Tao) |
nucleus.decorated-window-jewel |
Jewel (IntelliJ theme) integration |
nucleus.decorated-window-material2 |
Material 2 integration |
nucleus.decorated-window-material3 |
Material 3 integration |
nucleus.notification-common |
Cross-platform notification DSL with per-platform (linux/macos/windows) option blocks |
nucleus.notification-macos |
macOS User Notifications |
nucleus.notification-windows |
Windows Toast Notifications |
nucleus.notification-linux |
Freedesktop Desktop Notifications |
nucleus.launcher-macos |
macOS Dock API — badge, menus |
nucleus.launcher-windows |
Windows taskbar — badges, jump lists, overlay icons, thumbnail toolbar |
nucleus.launcher-linux |
Unity Launcher — badge, progress, urgency, quicklist |
nucleus.media-control |
OS media controls — MPRIS (Linux), Now Playing (macOS), SMTC (Windows) |
nucleus.menu-macos |
Native macOS menu bar |
nucleus.freedesktop-icons |
Type-safe freedesktop icon naming constants |
nucleus.taskbar-progress |
Cross-platform taskbar progress bar & attention requests |
nucleus.global-hotkey |
System-wide keyboard shortcuts |
nucleus.energy-manager |
Energy efficiency & screen-awake APIs |
nucleus.autolaunch |
Start the app at user login across all platforms |
nucleus.native-ssl |
OS trust store integration |
nucleus.native-http |
HTTP client with native SSL |
nucleus.linux-hidpi |
Native HiDPI scale detection on Linux |
nucleus.graalvm-runtime |
Native-image bootstrap, font fixes, automatic resource inclusion |
Full documentation is available at nucleusframework.dev (English and French).
Ask questions, report bugs, and share what you're building on GitHub Discussions and the issue tracker.
