/graalvm-reachability-metadata

Repository which contains community-driven collection of GraalVM reachability metadata for open-source libraries.

Primary LanguageJavaCreative Commons Zero v1.0 UniversalCC0-1.0

GraalVM Reachability Metadata Repository

This repository enables users of GraalVM Native Image to share and reuse metadata for libraries and frameworks in the Java ecosystem. The repository is integrated with GraalVM Native Build Tools beginning with version 0.9.13: you can enable automatic use of the metadata repository for Gradle projects or Maven projects.

This web page provides an overview of libraries and frameworks that are tested and thus ready for GraalVM Native Image. If you would like to see your library or framework in the list too, please open a pull request and extend this JSON file. Before submitting a pull request, please read this guide.

Rationale

When you use Native Image to build native executables it only includes the elements reachable from your application entry point, its dependent libraries, and JDK classes discovered through static analysis. However, the reachability of some elements (such as classes, methods, or fields) may not be discoverable due to Java’s dynamic features including reflection, resource access, dynamic proxies, and serialization. If an element is not reachable, it is not included in the generated executable at build time, which can lead to failures at run time. Native Image has built-in metadata for JDK classes but user code and dependencies may use dynamic features of Java that are undiscoverable by the Native Image analysis. For this reason, Native Image accepts additional reachability metadata in the form of JSON files. Since this metadata is specific to a specific code base, the JSON files providing the corresponding metadata can be shared for libraries and frameworks. This repository is a centralized place for sharing such files for libraries and frameworks that do not provide built-in metadata yet. It is also used to retrofit metadata for older versions of libraries and frameworks.

If you are a library or framework maintainer, the best way to make your code ready for GraalVM Native Image is to provide reachability metadata as part of your JARs. Please visit this web page for more information.

Contributing

We welcome contributions from the community. Before submitting a pull request, please review our contribution guide.