Skip to main content

Chicory 1.4.0 – Compiler Graduates, Annotations Stabilize, and WasmGC Advances

· 3 min read
Andrea Peruffo
Principal Software Engineer @ Red Hat

We’re excited to announce Chicory 1.4.0, a release that marks a significant milestone in our journey. This version brings the Compiler(Runtime and Build time) and Annotations out of the experimental phase, and introduces foundational support for WebAssembly Garbage Collection (WasmGC) with reference types.


🎓 Compiler Graduates from Experimental

After extensive development and testing, the Compiler is now officially stable. It enables the compilation of WebAssembly modules into plain Java bytecode at build time or runtime, offering improved performance and seamless integration into Java applications.

Key Benefits:

  • Performance: Faster execution by eliminating interpretation overhead.
  • Integration: Generates standard Java bytecode, facilitating integration with existing Java tools and libraries.
  • Stability: Extensively tested to ensure reliability across various use cases(with real-world modules like CPython, SQLite, etc.).

🏷️ Annotations are Now Stable

The annotation system has matured and is now considered stable too. It provides high level APIs to for exports and host function's declaration and usage, enhancing developer productivity and code clarity.

Highlights:

  • Ease of Use: Simplifies configuration through familiar Java annotations.
  • Flexibility: Allows fine-grained control over module behavior and integration.

🧪 Progress Towards WasmGC with Reference Types

Chicory 1.4.0 lays the groundwork for supporting WebAssembly's Garbage Collection(WasmGC) proposal, including reference types. This advancement moves us closer to full compliance with emerging WebAssembly proposals, enabling more modules to run efficiently.

🙌 Acknowledgments

We extend our heartfelt thanks to the community contributors whose efforts have been instrumental in this release. Your feedback, code contributions, and support continue to drive Chicory forward.

For a detailed list of changes and contributions, please refer to the commit history.


⚠️ Migration Guide

As we transition out of an experimental phase, the old experimental modules are not going to be supported anymore. In this guide you can find the notes on how to move to the stable release of the functionalities. If there is any missing detail, please, don't be afraid to open an issue asking for clarifications.

ArtifactId renames

The ArtifactId of the modules have changed in this way:

OldNew
aot-experimentalcompiler
aot-maven-plugin-experimentalchicory-compiler-maven-plugin
aot-build-time-experimentalbuild-time-compiler
aot-build-time-cli-experimentalbuild-time-compiler-cli-experimental
host-module-annotations-experimentalannotations
host-module-processor-experimentalannotations-processor

Package names

The name of the Java packages changed

OldNew
com.dylibso.chicory.experimental.aotcom.dylibso.chicory.compiler
com.dylibso.chicory.experimental.build.time.aotcom.dylibso.chicory.build.time.compiler
com.dylibso.chicory.experimental.hostmodule.annotationscom.dylibso.chicory.annotations

Maven plugin

Two main changes specific to the Maven plugin:

  • The name of the goal of the compiler changed from wasm-aot-gen to compile
  • The name configuration corresponds to the name of the generated class, i.e. the "Module" suffix is not added anymore automatically