Starting Quarkus 3

Quarkus 3 will continue the tradition of propelling Java development forward by moving fast and keep bringing a cutting-edge user experience with the latest technologies.

We are happy to make a first Quarkus 3 Alpha available for users to try out and extension writers to integrate with so that we get early feedback.

The following blog outlines what will be in Quarkus 3, the release plan, how to try it and how to upgrade.

What will be in Quarkus 3?

The current planned list of highlights for Quarkus 3 are:

  • Hibernate ORM 6 - faster, safer, better (Check out this presentation to see how awesome it is).

  • Jakarta EE 10 API and packages - following the latest evolution of the Java world

  • Eclipse MicroProfile 6 - the latest update of all the MP specifications continuing evolving alongside the state of the practice

  • HTTP/3 support (aka Quic) - the new HTTP version fixing the head-of-line blocking problem, using UDP.

  • io_uring - the next generation of asynchronous IO support. This is a complete game changer if you are interested in performance and efficiency (response time, latency)

  • Virtual threads (aka Loom) and Structured Concurrency Support - based on the lessons learned from our initial integration, we are now looking into expanding and improving the support.

  • java.util.concurrent.Flow - Time to evolve; Flow has been in the JDK since Java 9. Thus we want to move from Reactive Streams to java.util.concurrent.Flow.

  • Documentation - Work started on better and more structured documentation following the Diataxis framework principles.

  • Tooling for updates - going to be a new major version, we want to make the migration as smooth as possible. Thus we will provide migration tools.

  • A new gRPC server, more flexible and easier to maintain

  • A revamped dev UI

  • <Your extension awesome feature/improvements here>

Java Target

Quarkus 3 continues (like Quarkus 2) to target minimal version of Java 11. The default recommendation for users will be to use Java 17.

We will keep revising minimal Java version based on user feedback and uptake of Java 17 in the ecosystem. For now we feel it is of higher value to allow as many Java 11 users as possible to upgrade to Quarkus 3 and use the Jakarta based dependencies.

Release Plan

The monthly cadence release of the 2.x version of Quarkus will continue. Quarkus 3.x preview (alphas, betas) will be released in parallel. This blog marks the start of the first Quarkus 3 Alpha.

It will take more than a month to integrate the change set we want and collect feedback (from users, and extension maintainers…​) from the previous release. Thus, the initial 3.x release cadence will be a bit slower than usual.

The intent is to have a time period of some months to allow continuous integration and start releasing a Quarkus Platform with the members that are ready to do and then continuously include more.

Proposed plan:

  • Alpha release of 3.0.x core and platform releases at regular intervals to allow easy integration builds

  • 2.x releases will continue to happen on a monthly basis

  • Announce Quarkus 3 on Quarkus blog when 3.0.0.Alphas start being useful for users to try (This Blog!)

  • Feedback from extension contributors and users on readiness and challenges to help and adjust

  • If all goes well, aim for a 3.0.0.Final in February 2023

Breakage? Keep calm!

While the major version bump signals possible breaking changes, we still ask that all contributors still aim for a smooth upgrade experience. Changes like the move to Jakarta with its package renames have a big impact. We intend on doing what we can to make it so current extensions and user applications can migrate from Quarkus 2 to Quarkus 3 by providing tooling to perform the migration.

Especially for the core API’s we will aim to allow such migration to be trivial and thus can be automated in a similar manner as how we’ve done automatic conversion of Quarkus 2.x to use Jakarta named packages.

Trying out Quarkus 3

For now the easiest way to get started is using code.quarkus.io or use the Quarkus CLI:

quarkus create app --stream=3.0

Mind you that at this stage, while all the core extensions are available, only parts of the Quarkus platform is present. Not all extensions have yet migrated to Jakarta packages (e.g. Camel Quarkus or Kogito are not yet available).

Upgrading to Quarkus 3

For existing applications where all extensions are available we have a early OpenRewrite recipe that you can try.

There is a one-liner that attempts to do it automatically using a JBang script:

For Linux:

curl -Ls https://sh.jbang.dev | bash -s - --fresh upgrade-to-quarkus3@quarkusio

For Windows:

iex "& { $(iwr https://ps.jbang.dev) } --fresh upgrade-to-quarkus3@quarkusio"

You can also do it manually by downloading the OpenRewrite recipe and apply it manually with the following Maven command:

curl -o quarkus3.yml https://raw.githubusercontent.com/quarkusio/quarkus/main/jakarta/quarkus3.yml
mvn org.openrewrite.maven:rewrite-maven-plugin:4.36.0:run \
   -Drewrite.configLocation=quarkus3.yml \
   -DactiveRecipes=io.quarkus.openrewrite.Quarkus3

Once this has been run your project should have its dependencies and source code updated to use Quarkus 3.

If it does not work for you, it could be we missed something or you are using extensions not yet supporting Quarkus 3.

Let us know in either case so we can together improve the migration script.

Help for extension maintainers

Do you maintain an extension? These changes will almost certainly affect your extension. We’ve published a cheat sheet with guidance and scripts for extension maintainers.

Thank you

We look forward to your feedback, and we will keep posting updates on quarkus-dev around development news and on this blog for user visible news.

Have fun!