By Ryan Forde on October 18, 2023
CheerpJ 3.0rc1 is out today! This version features a completely new architecture for CheerpJ, with a full OpenJDK runtime and a new scalable JNI architecture.
This is a release candidate intended for testing and feedback. You can upgrade to CheerpJ 3.0rc1 using the following script tag:
<script src="https://cjrtnc.leaningtech.com/3.0rc1/cj3loader.js"></script>
This is a breaking change release, so please read the migration guide before upgrading. Please report any bugs or issues you encounter on GitHub or Discord .
For the past few years, we have been working tirelessly on a completely new architecture for CheerpJ, our solution to run Java applications, applets and libraries on modern browsers.
Taking advantage of many years of real-world use of CheerpJ 2.x by hundreds of organisations worldwide, and leveraging many lessons learned from the development of CheerpX , our browser-based x86 virtual machine, we performed a full rewrite of CheerpJ.
The key features of the new CheerpJ architecture are:
Goodbye AOT, hello JIT compilation : CheerpJ 3.0 features a fully transparent, multi-tier execution model, which starts with a fast interpreter for rarely used code, and combines a JIT compiler for frequently used code. With this new model no code is ever executed or generated for unused classes, improving startup performance. Because there is no AOT compiler or .jar.js files, the integration and deployment of CheerpJ 3.0 is now a matter of adding a few lines to an existing HTML page.
Full Classloader support: Thanks to the new JIT approach, which mimicks how the JVM normally operates, we can now give full control to the appropriate Classloader for class resolution, including application provided ones. This completely eliminates incompatibilities caused by duplicated classes as well.
A new scalable JNI architecture: We now compile 100% of the OpenJDK native code to WebAssembly, providing a viable path for supporting modern versions of Java and potentially specific point versions if a user requires so. This also means that CheerpJ now uses a completely unmodified version of OpenJDK, extending its level of compatibility even more.
Thanks to these architectural advancements, CheerpJ 3.0 can be considered a full WebAssembly-based replacement to the JVM, with a full OpenJDK runtime.
CheerpJ 3.0 introduces a new function, cheerpjRunLibrary , which allows you to call into Java code from JavaScript. This function returns a JavaScript object that can be used to call Java methods and instanciate Java objects.
We’ve completely revamped our documentation. It’s now easier to navigate and find what you’re looking for. We’ve also added a new migration guide to help you upgrade from CheerpJ 2.x to CheerpJ 3.0.
Get started Migration guide
Your feedback is invaluable in helping us identify and fix potential issues and ensure that the final release is as stable and polished as possible. Here are some ways to help:
* Try the release candidate today. * Test it in your real-world scenarios.
We are planning another Release Candidate (3.0rc2) before the end of the year, with a general release scheduled for early 2024.
We greatly appreciate your continued support and involvement in making CheerpJ the best it can be. Together, we can ensure a successful final release.
Thank you for being a part of our community!
Discover resources and connect with our team