Norm 0.21
Norm 0.21 builds applications with GraalVM Native Image by default and provides shared execution-graph pruning, direct Java call linking, and build evidence.
Native application builds
norm build web.norm keeps the single-file output convention and produces a native application by default. Execution does not unpack a JVM or require Norm or Java. norm setup prepares a pinned, SHA-256-verified Native toolchain; the first build uses the same installation path if setup was omitted.
Builds report stages, elapsed time, and size. Commands, delivery layout, and build prerequisites are documented in application builds.
0.21.4 toolchain and ecosystem boundaries
Application examples and framework acceptance live in examples and individual adapter repositories. The compiler provides generic Java and Native Image integration; orm.hibernate@3 carries Hibernate Native configuration. Update explicit orm.hibernate, orm.micronaut and orm.micronaut.tx versions to 3 for ORM Native applications.
Release packages are built before final acceptance. Daily CI does not build framework applications; a separate manual workflow owns size checks. See release process.
0.21.2 single-file delivery
Windows Native applications bundle required dynamic libraries into one executable, extracting them into a content-addressed user cache at runtime without a JVM. Build workspaces are cleaned on completion; reusable caches and size summaries are centralized. Use --diagnostics to retain full build evidence.
The standard library provides std.application.applicationDirectory() for the entry source directory or delivered executable directory, independently of the working directory. micronaut.web@4 uses this capability: databases default to memory, while explicitly selected file databases without a path use the application directory. See the single-file Web example.
Shared runtime architecture
- JVM and Native share execution-entry selection, pruning unused functions and constructors while retaining reflection and external framework entries.
- Direct Java calls and argument/result conversions are linked in advance; Native performs preparation at build time.
- Compiler and application Java dependencies use a unified selection result with physical ownership checks for merged artifacts.
- Size verification records both the executable and its complete runtime delivery, including required dynamic libraries.
CI size baseline
0.21.1 supports automatic baseline initialization after the default branch passes acceptance. Baselines persist independently of temporary diagnostic artifacts; pull requests are read-only, and resets require an explicit reason with preserved history. See application builds for budgets, input verification, and operation details.
Boundaries and migration
Native builds require a host toolchain. Initial preparation and compilation take longer than the JVM launch path. Windows delivery needs only the generated executable; other platforms still require every runtime file listed by the build. See application builds for defaults and the JVM build option.
Micronaut Web/ORM coverage includes HTTP, DI, validation, database commit, read-back, and rollback, not every Java framework path. The root cause of a historical intermittent validator initialization failure remains unresolved. Input reports do not capture a fully replayable environment, and size can vary between builds; no uniform reduction is promised for every application.
Windows and macOS releases are not code-signed yet; the operating system may display an origin warning.