Magicator β

Upload your jar. We resolve its reflection calls and generate native-image configuration files.

For instance, This program breaks with GraalVM Native Image. We compile it successfully with our reflection analysis technology.

Sample Results

Dynamic InstructionsResolved Generated Configuration
Minecraft Server9,24994%download
Spring Boot Sample App5,58693%download


Magicator builds configuration files without any manual developer input.


You only write the parts that Magicator can’t resolve automatically.


Magicator speeds up ports by 80% faster when compared to a “raw Native Image”


We built this project to make developers’ lives easier and because we love GraalVM!


  • How do you port your application to native image?
    The performance improvements of GraalVM Native Image (mainly from faster cold start times and reductions in RAM use) come at the cost of JVM compatibility. So, we have to be extra careful when porting over new applications. This tutorial assumes that you’re already familiar with GraalVM Native Image and have installed it. To build a […]
  • About us
    Dynamic languages are the most used programming languages in the world. They became popular because programmers are much more productive when they use them. The downside is that they also execute much, 10x-100x, slower. But because computing hardware has improved apace, it’s never really mattered. Until now. Because hardware performance improvements have been flat for over ten years. As a result, […]
  • How does it work?
    Magicator generates GraalVM configuration files using an analysis method we invented. GraalVM has the world’s best infrastructure for Java static analysis. But generating a native GraalVM image can be tricky since developers need to describe some of their application’s runtime behavior. For example, the program below won’t compile (using both the GraalVM compiler and Tracing […]
  • Why’d we build this?
    To work with GraalVM, developers first need to port a JVM application. They have to describe their application’s runtime behavior – dynamically linked libraries, reflection, proxies, etc., in configuration files. If you fail to define these behaviors correctly, your application will fail at runtime. This process is challenging because JVM developers tend to use tons […]