| Language | Java 25+ | Java 25+ | Java | Java | Kotlin | Java |
|---|
| Licence | Apache 2.0 | Apache 2.0 | GPL v2 + Classpath exception | GPL v2 + Classpath exception | Apache 2.0 | EPL 2.0 |
|---|
| UI model | Declarative: immutable records with a pure build(), or KDL markup | Same | Scene graph; imperative or FXML | Imperative component tree | Declarative @Composable functions | Imperative, native widgets |
|---|
| Markup | KDL, hot-reloaded while running | KDL, hot-reloaded while running | FXML | None | None, code only | None |
|---|
| Styling and layout | A real CSS subset and Yoga flexbox | Same | JavaFX CSS dialect (-fx-*), layout panes | Look and Feel, layout managers | Kotlin modifiers | Platform look, layout managers |
|---|
| Rendering | Own pipeline: Blend2D on the CPU; GPU composition and canvas3d optional | Same | Prism, GPU with software fallback | Java2D | Skia (Skiko), GPU | The platform toolkit: GTK, Win32, Cocoa |
|---|
| Text | HarfBuzz shaping; Inter and JetBrains Mono embedded; colour emoji | Same | Platform shaping through Prism | Java2D | Skia | Platform |
|---|
| What you ship | Your jars plus the goldberry-natives classifier jar; any JDK 25+ | One executable, no JDK, about 41 MiB for the whole showcase | jlink runtime or jpackage with a JDK inside | jpackage with a JDK inside | jpackage with a JDK inside | jpackage with a JDK inside |
|---|
| Start-up | JVM start, then about 330 ms of toolkit work to the first frame | The toolkit's work only; no JVM to start | JVM start, then the FX runtime | JVM start, then AWT | JVM start, then Skiko | JVM start, then the platform toolkit |
|---|
| GraalVM native image | Optional | First-class: the binding schema and the weaver are designed for it | Through GluonFX | Partial AWT support, not on every platform | Community experiments only | Community experiments only |
|---|
| Native code | One static library over FFM, no JNI | Same, linked into the executable | Bundled natives over JNI | Inside the JDK | Skiko over JNI | JNI into the platform toolkit |
|---|
| Third-party Java dependencies | None | None | None beyond the FX modules | None | Kotlin runtime, Skiko, Compose runtime | None |
|---|
| Platforms | Linux (Wayland, X11), Windows, macOS | Same | Linux, Windows, macOS, mobile through Gluon | Linux, Windows, macOS | Linux, Windows, macOS | Linux, Windows, macOS |
|---|
| Headless testing | Headless backend, golden images per platform, virtual frame clock | Same | Monocle, TestFX | Headless AWT, no pixel goldens built in | Compose UI testing | SWTBot |
|---|
| Accessibility | Keyboard, focus ring, WCAG AA contrast and roles; no screen-reader bridge yet | Same | Yes | Yes | Yes, through AWT | Yes, native |
|---|