JavaFX implementation of the ui protocol. JavaFX native types and the rendering adapter belong to this module.
Declare the released module in module.norm:
dependency(repository: "github", name: "ui.desktop", version: 9)
Use DesktopApp with ui.Widget controls. The foundation application demonstrates state, theme switching and layouts. Its module resolves released packages by default.
Native integration uses ui.desktop.native.Node, ui.desktop.native.Button and constructors such as ui.desktop.native.buttonNew. nativeComponent owns native initialization, updates, children, configuration, theme and disposal. Private layout adapter bindings are not exported. The exact public surface is defined in module.norm.
Run ./scripts/prepare.ps1 to build the Java adapter and verify its pinned digest and module. It does not change dependency pins. Run ./scripts/update-pin.ps1 intentionally after changing the adapter. JavaFX dependency versions and reproducible archive settings are owned by build.gradle.kts.
Run ./gradlew.bat test --tests dev.normlanguage.ui.desktop.LayoutPaneTest for layout contracts, norm test ui/desktop for backend contracts, and norm test samples/foundation for the real window flow. The package workflow owns release validation. Local development packages may be placed in an isolated Norm home; the sample descriptor remains a released dependency declaration.
Windows Native Image reachability declarations live in module resources. Run ./gradlew.bat verifyNativeImageMetadata with Python 3 to compare toolkit and shader registrations against the resolved JavaFX JAR.
- Layout implementation and Java layout adapter
- Theme and configuration projection
- Window lifecycle, JavaFX runtime and failure logging verification
- Close confirmation and close lifecycle contracts
- Sample ownership
MPL-2.0. The adapter archive carries the license in META-INF/LICENSE.