README.md

July 13, 2026 · View on GitHub

Nucleus

Gradle Plugin Portal Maven Central Pre Merge Checks License: MIT Kotlin Platform

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.

Java evolved into Kotlin. JavaScript evolved into TypeScript. Desktop development is going through the same shift: Electron was the pioneer — Kotlin + Compose + Nucleus is what comes next.

Read Why Nucleus for how it compares to Electron and Tauri.

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.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.

Requirements

Nucleus builds on Compose Multiplatform and requires:

RequirementVersionNote
JDK17+ (25+ for AOT cache)JBR 25 recommended
Kotlin2.0+Compose Multiplatform requires Kotlin 2.x
Gradle8.0+Bundled wrapper is sufficient

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:

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 OS

The full quickstart walks through each step.

Resources for learning Nucleus

What Nucleus provides

Ship everywhere — 18 packaging formats (DMG, PKG, NSIS, MSI, AppX/MSIX, Portable, DEB, RPM, 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 (~0.5s cold start, 100–150 MB RAM) with automatic reachability metadata; or run 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.core-runtimePlatform detection, single instance, deep links, executable type
nucleus.aot-runtimeAOT cache mode detection
nucleus.updater-runtimeAuto-update engine with GitHub/S3, progress tracking, SHA-512
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-taoRust-native windowing backend (Tao)
nucleus.decorated-window-jewelJewel (IntelliJ theme) integration
nucleus.decorated-window-material2Material 2 integration
nucleus.decorated-window-material3Material 3 integration
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.taskbar-progressCross-platform taskbar progress bar & attention requests
nucleus.global-hotkeySystem-wide keyboard shortcuts
nucleus.energy-managerEnergy efficiency & screen-awake APIs
nucleus.autolaunchStart the app at user login across all platforms
nucleus.native-sslOS trust store integration
nucleus.native-httpHTTP client with native SSL
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