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. All published runtime modules run in
Kotlin explicitApi() mode with their public surface locked by a binary-compatibility dump
(api/*.api, checked by apiCheck via kotlinx binary-compatibility-validator). Breaking
changes to a public FQN or signature fail CI. The one exception is decorated-window-jewel
(JVM 25 bytecode), which still uses explicitApi() but is not dumped until BCV can read
class-file major version 69. 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.
- AB Download Manager — packaging plugin
- Hammer
- OtakuWorld
- Husi
- Zayit
- GitVantage
- EdgeTranslator — offline AI translator
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.4.4"
}
repositories {
mavenCentral()
google()
}
dependencies {
implementation(compose.desktop.currentOs)
// Entry point — provides nucleusApplication and DecoratedWindow
implementation("dev.nucleusframework:nucleus.nucleus-application:2.4.4")
// Tao backend — Rust-native windowing
implementation("dev.nucleusframework:nucleus.decorated-window-tao:2.4.4")
}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.4+ | This repo builds with Kotlin 2.4.0 |
| Gradle | 9.0+ | Bundled wrapper is Gradle 9.4.0 |
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.nucleusApplication
fun main(args: Array<String>) = nucleusApplication(args) {
DecoratedWindow(
onCloseRequest = ::exitApplication,
title = "MyApp",
) {
Box(Modifier.fillMaxSize()) {
Text("Hello from Nucleus")
}
}
}nucleusApplication initializes GraalVM native-image support, takes the
single-instance lock, and primes autolaunch / Windows AUMID when those
modules are on the classpath. Pass the process args so deep links,
file associations, and "started at login" see the original command line.
The default backend is Auto (Tao if decorated-window-tao is present,
otherwise AWT). Inside the block you can call onDeepLink { } and
aotTraining(); plugin-injected metadata is NucleusApp, not a generated
constants object.
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.nucleus-application |
nucleusApplication, backend-agnostic DecoratedWindow / HostedWindow |
nucleus.core-runtime |
Platform detection, single instance, deep links, NucleusApp metadata |
nucleus.aot-runtime |
AOT cache mode detection |
nucleus.updater-runtime |
Auto-update (GitHub/S3), SHA-512, delta/blockmap, progress |
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 |
Recommended windowing backend (Rust tao, no AWT) |
nucleus.decorated-window-core |
Shared window types, layout, chrome (design-system agnostic) |
nucleus.decorated-window-awt |
AWT chrome shared by the JBR/JNI backends |
nucleus.decorated-window-jbr |
Legacy JBR backend (maintenance only) |
nucleus.decorated-window-jni |
Legacy JNI/AWT backend (maintenance only) |
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 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.sf-symbols |
Type-safe SF Symbols catalog |
nucleus.taskbar-progress |
Cross-platform taskbar progress bar & attention requests |
nucleus.taskbar-progress-tao |
Taskbar progress on the Tao backend |
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.scheduler |
OS-scheduled background tasks (Task Scheduler / launchd / systemd) |
nucleus.scheduler-testing |
Test doubles for scheduler |
nucleus.fs-watcher |
Native filesystem watcher |
nucleus.service-management-macos |
macOS SMAppService — login items, launch agents, daemons |
nucleus.native-ssl |
OS trust store integration |
nucleus.native-http |
HTTP client with native SSL |
nucleus.native-http-okhttp |
OkHttp engine on native-http |
nucleus.native-http-ktor |
Ktor engine on native-http |
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.
