Changelog¶
v1.3.6¶
Released: 2026-03-02
Bug Fixes¶
- Fix fullscreen button transitions and alignment
- Restore title bar appearance before fullscreen exit animation
- Fallback to default icon for GraalVM native image on Windows
- Update
latest-mac.ymlchecksums and file sizes after notarization - Remove
xvfb-runfrom test-graalvm workflow (Xvfb already started by setup-nucleus)
Documentation¶
- Add homepage requirement note for electron-builder DEB packaging
v1.3.5¶
Released: 2026-03-02
Bug Fixes¶
- Add
homepageto jewel-samplenativeDistributionsfor electron-builder DEB packaging
v1.3.4¶
Released: 2026-03-02
Bug Fixes¶
- Remove
xvfb-runfrom graalvm workflow (Xvfb already started by setup-nucleus)
v1.3.3¶
Released: 2026-03-02
New Features¶
- Add
graalvmoption tosetup-nucleuscomposite action - Configure Windows code signing for jewel-sample using shared certificate
Bug Fixes¶
- Add
libx11-devandlibdbus-1-devto graalvm release Linux dependencies - Configure jewel-sample
nativeDistributionswith icons, deb maintainer, and platform settings - Use
packageGraalvmDeb/Dmg/Nsistasks instead of raw native image output
CI/CD¶
- Simplify graalvm workflows with setup-nucleus graalvm option
v1.3.2¶
Released: 2026-03-02
No user-facing changes (tag only).
v1.3.1¶
Released: 2026-03-02
Bug Fixes¶
- Use
packageGraalvmDeb/Dmg/Nsistasks instead of raw native image output - Add missing native artifact downloads and
libx11-devto publish-plugin workflow - Pass repository to
gh releasecommands in graalvm workflow - Remove custom icons from jewel-sample, use default icons instead
CI/CD¶
- Configure jewel-sample
nativeDistributionswith icons, deb maintainer, and platform settings
v1.3.0¶
Released: 2026-03-02
New Features¶
- GraalVM Native Image support (experimental): compile Compose Desktop apps into standalone native binaries with instant cold boot (~0.5s), lower memory usage, and smaller bundles
- New
graalvm-runtimemodule (nucleus.graalvm-runtime): centralizes native-image bootstrap logic into a singleGraalVmInitializer.initialize()call - Decorated Window module split:
decorated-windowsplit intodecorated-window-core,decorated-window-jbr, anddecorated-window-jni - Linux HiDPI scaling support with native GDK_SCALE handling
- CI workflow to release Jewel Sample as GraalVM native image on tags
- Auto-notarize macOS distributions in
packageDistributionForCurrentOS
Bug Fixes¶
- Replace
OBJC_ASSOCIATION_ASSIGNwithRETAIN_NONATOMICto prevent dangling pointer on macOS - Use per-platform winCodeSign archives to fix AppX build on Windows
- Resolve fontmanager loading on Linux native image
- Ensure Skiko library is extracted and loaded in GraalVM Native Image
- Use
onlyIfinstead ofenabledfor native build tasks (configuration cache compatibility)
Documentation¶
- Comprehensive GraalVM Native Image guide for Compose Desktop
- macOS 26 window appearance guide for JVM and native image
- Linux HiDPI runtime documentation
- AOT cache documentation rewrite with motivation and Project Leyden reference
- Decorated window docs update with changelog and migration guide
CI/CD¶
- GraalVM native-image build workflow for PR CI
- Migrate detekt to 2.0.0-alpha.2 for JDK 25 support
Migration Guide: 1.2.x → 1.3.x¶
Decorated Window: monolithic module split¶
The decorated-window module has been split into three modules:
| Before (1.2.x) | After (1.3.x) |
|---|---|
nucleus.decorated-window |
nucleus.decorated-window-core (shared) |
nucleus.decorated-window-jbr (JBR implementation) |
|
nucleus.decorated-window-jni (JNI implementation, new) |
Dependency update — replace:
With one of:
// JBR-based (same behavior as before)
implementation("io.github.kdroidfilter:nucleus.decorated-window-jbr:<version>")
// JNI-based (no JBR dependency, works with GraalVM)
implementation("io.github.kdroidfilter:nucleus.decorated-window-jni:<version>")
Breaking changes in TitleBarColors — the following fields have been removed:
titlePaneButtonHoveredBackgroundtitlePaneButtonPressedBackgroundtitlePaneCloseButtonHoveredBackgroundtitlePaneCloseButtonPressedBackground
These platform-specific button state colors are now handled internally by each module's native implementation. If you were constructing TitleBarColors explicitly with these fields, remove them.
No other code changes required — all composable APIs (DecoratedWindow, DecoratedDialog, TitleBar, DialogTitleBar), scopes, and state types are identical. No import changes needed — the package remains io.github.kdroidfilter.nucleus.window.
See Decorated Window for full details on choosing between JBR and JNI.
GraalVM Native Image support (experimental)¶
Nucleus now supports compiling Compose Desktop applications into standalone native binaries using GraalVM Native Image. This brings instant cold boot (~0.5 s), significantly lower memory usage (~100–150 MB vs ~300–400 MB on JVM), and smaller bundle sizes.
- New
graalvm {}DSL block inbuild.gradle.kts runWithNativeAgenttask to collect reflection metadata with the GraalVM tracing agentpackageGraalvmNativetask to compile and package the native binary- Full packaging pipeline per platform:
.appbundle on macOS,.exe+ DLLs on Windows, ELF +.soon Linux - Pre-configured
reachability-metadata.jsonfiles in the example app for all three platforms - New
graalvm-runtimemodule (nucleus.graalvm-runtime) — centralizes all native-image bootstrap logic into a singleGraalVmInitializer.initialize()call: Metal L&F,java.home/java.library.pathsetup, charset/fontmanager early init, Linux HiDPI detection, and GraalVM@TargetClassfont substitutions for Windows and Linux - Requires BellSoft Liberica NIK 25 (full distribution)
Experimental
This feature requires significant configuration effort (reflection metadata) and is reserved for advanced developers. See GraalVM Native Image for the full guide.