Skip to content

Latest commit

History

2,372 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Nucleus

Gradle Plugin PortalMaven CentralPre Merge ChecksLicense: MITKotlinPlatform

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.

Project status

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.

Used by

Showcase

Installation

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.

Requirements

Nucleus builds on Compose Multiplatform and requires:

RequirementVersionNote
JDK17+ (25+ for AOT cache)JBR 25 recommended
Kotlin2.4+This repo builds with Kotlin 2.4.0
Gradle9.0+Bundled wrapper is Gradle 9.4.0

Platform support

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.
  • Windowsx64 and arm64.
  • Linuxx64 and arm64, with Wayland and X11 support.

Getting started

Create src/main/kotlin/com/example/Main.kt:

packagecom.exampleimportandroidx.compose.foundation.layout.Boximportandroidx.compose.foundation.layout.fillMaxSizeimportandroidx.compose.material.Textimportandroidx.compose.ui.Modifierimportdev.nucleusframework.application.DecoratedWindowimportdev.nucleusframework.application.nucleusApplicationfunmain(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 OS

The full quickstart walks through each step.

Resources for learning Nucleus

What Nucleus provides

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.

Runtime modules

Each module is published independently to Maven Central — use them together or standalone.

ModuleDescription
nucleus.nucleus-applicationnucleusApplication, backend-agnostic DecoratedWindow / HostedWindow
nucleus.core-runtimePlatform detection, single instance, deep links, NucleusApp metadata
nucleus.aot-runtimeAOT cache mode detection
nucleus.updater-runtimeAuto-update (GitHub/S3), SHA-512, delta/blockmap, progress
nucleus.darkmode-detectorReactive OS dark mode detection
nucleus.system-colorReactive accent color & high contrast detection
nucleus.system-infoCPU, memory, GPU (NVIDIA/AMD/Intel), temperature, network, processes
nucleus.decorated-window-taoRecommended windowing backend (Rust tao, no AWT)
nucleus.decorated-window-coreShared window types, layout, chrome (design-system agnostic)
nucleus.decorated-window-awtAWT chrome shared by the JBR/JNI backends
nucleus.decorated-window-jbrLegacy JBR backend (maintenance only)
nucleus.decorated-window-jniLegacy JNI/AWT backend (maintenance only)
nucleus.decorated-window-jewelJewel (IntelliJ theme) integration
nucleus.decorated-window-material2Material 2 integration
nucleus.decorated-window-material3Material 3 integration
nucleus.notification-commonCross-platform notification DSL with per-platform option blocks
nucleus.notification-macosmacOS User Notifications
nucleus.notification-windowsWindows Toast Notifications
nucleus.notification-linuxFreedesktop Desktop Notifications
nucleus.launcher-macosmacOS Dock API — badge, menus
nucleus.launcher-windowsWindows taskbar — badges, jump lists, overlay icons, thumbnail toolbar
nucleus.launcher-linuxUnity Launcher — badge, progress, urgency, quicklist
nucleus.media-controlOS media controls — MPRIS (Linux), Now Playing (macOS), SMTC (Windows)
nucleus.menu-macosNative macOS menu bar
nucleus.freedesktop-iconsType-safe freedesktop icon naming constants
nucleus.sf-symbolsType-safe SF Symbols catalog
nucleus.taskbar-progressCross-platform taskbar progress bar & attention requests
nucleus.taskbar-progress-taoTaskbar progress on the Tao backend
nucleus.global-hotkeySystem-wide keyboard shortcuts
nucleus.energy-managerEnergy efficiency & screen-awake APIs
nucleus.autolaunchStart the app at user login across all platforms
nucleus.schedulerOS-scheduled background tasks (Task Scheduler / launchd / systemd)
nucleus.scheduler-testingTest doubles for scheduler
nucleus.fs-watcherNative filesystem watcher
nucleus.service-management-macosmacOS SMAppService — login items, launch agents, daemons
nucleus.native-sslOS trust store integration
nucleus.native-httpHTTP client with native SSL
nucleus.native-http-okhttpOkHttp engine on native-http
nucleus.native-http-ktorKtor engine on native-http
nucleus.linux-hidpiNative HiDPI scale detection on Linux
nucleus.graalvm-runtimeNative-image bootstrap, font fixes, automatic resource inclusion

Documentation

Full documentation is available at nucleusframework.dev (English and French).

Community

Ask questions, report bugs, and share what you're building on GitHub Discussions and the issue tracker.

License

MIT

About

Native desktop platform for the JVM. Compose Multiplatform apps with real OS integration — native window decorations, notifications, taskbar and dock, code signing, installers, auto-update — packaged for macOS, Windows and Linux from a single Gradle DSL. Runs on the JVM or as a GraalVM native image.

Topics

Resources

Stars

334 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Contributors

Languages