The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Quarkus 3.0, our new major release, is here!

Quarkus 3.0 is the result of a lot of work and dedication from the community. Quarkus continues to be an Open Source stack to write Java applications offering unparalleled startup time, memory footprint, and developer experience.

The development of Quarkus 3 started last year on March 18, 2022, with the crazy idea that we could rewrite the whole tree to migrate to the new jakarta.* packages while continuing the development of Quarkus 2.

Quarkus 3.0 is based on Jakarta EE 10 and, as you can expect, it is not the only change. This version comes packed with new features and enhancements that we implemented during this period.

This announcement contains a lot of information about the new features and how to upgrade so we recommend reading it thoroughly before upgrading to Quarkus 3.

What’s new?

New Dev UI

dev ui

Quarkus 2 introduced the Dev UI, which provides a web UI to use during development. Extensions could provide their own Dev UI pages to provide additional functionality.

Quarkus 3.0 now has a new Dev UI that is more extensible and easier to use. It also has a new and much-improved look and feel.

The new Dev UI is available by default. However, because not all the extensions have migrated to the new Dev UI, you can still access the old one at /q/dev-v1. The old Dev UI is planned for removal in a future version.

We have a playlist on Quarkus YouTube channel that shows off the new Dev UI, explains the new features and how to use and extend it.

Jakarta EE 10

Quarkus 2 was based on Jakarta EE 8. Quarkus 3 is based on Jakarta EE 10.

The most visible change is that the javax.* packages from Jakarta EE have been moved to jakarta.*. This change requires changing any source code and dependency and its transitive dependencies that rely on the javax.* packages.

See the Updating to Quarkus 3.0 section for more information on how quarkus update helps you migrate.

The change to target Jakarta EE 10 brings two major improvements:

  • The broader Java ecosystem is moving to Jakarta dependencies, allowing for easier sharing and compatible implementations.

  • CDI introduces the notion of CDI Lite and Build Compatible Extensions (BCE), which enable standard extensions that are compatible across CDI implementations and reap the benefits of Quarkus build time optimizations.

Only the javax.* packages from Jakarta EE have changed. The ones from the JDK are still under javax.*.

Eclipse MicroProfile 6

Eclipse MicroProfile 6.0 aligns with Jakarta EE 10 Core Profile and replaces MicroProfile OpenTracing with MicroProfile Telemetry.

Hibernate ORM 6

One of the biggest changes in Quarkus 3 is that we upgraded Hibernate ORM from version 5 to version 6.2.

Hibernate ORM 6 is a new major release, and it comes with many changes, some of them breaking.

To learn more about the changes in Hibernate ORM 6 from a Quarkus user perspective, see Hibernate ORM 5 to 6 migration.

The Hibernate ORM release announcements have a lot of information about the changes/improvements in Hibernate ORM 6:

Upgrading to Hibernate ORM 6 will require some effort and testing. Make sure you have a look at the Updating to Quarkus 3.0 section below.

Some improvements have also been made to the Quarkus Hibernate ORM extension itself, such as:

  • Support for StatementInspector as @PersistenceUnitExtension managed bean.

  • The ability to inject a StatelessSession by using CDI (Contexts and Dependency Injection).

Hibernate Reactive 2

Hibernate Reactive has been upgraded to version 2.0 to be compatible with Hibernate ORM 6.

Mutiny 2 and Java Flow

Quarkus was upgraded to Mutiny 2 and now uses the Java Flow API instead of Reactive Streams.

Development Tools

Developer experience is a key aspect of Quarkus, and we are constantly improving it.

CLI plugins

The Quarkus CLI is now extensible with plugins. See details in the CLI guide.

Expect many new features in the Quarkus CLI in the form of plugins in the near future.

Update tool

Quarkus 3.0 has a new update tool that radically simplifies updating your projects to the latest version of Quarkus.

You can learn more about it in the Updating to Quarkus 3.0 section.

quarkus deploy in all dev tools

Quarkus CLI and the Maven and Gradle plugins now have the ability to deploy Quarkus applications.

quarkus deploy
mvn quarkus:deploy
gradle deploy

This enables the deployment of Quarkus applications to platforms like Kubernetes, Knative, and OpenShift. All without requiring changes to the project dependencies or configuration, simplifying developer experience.

Support for Maven 3.9

Maven 3.9 brought some breaking changes, and the integration with Quarkus was not working properly. It is now fixed and you can use Maven 3.9 to build your Quarkus 3 applications.

Also Maven 3.8.2 is the minimal requirement for Quarkus 3 projects.

Gradle 8

Our Gradle support has been upgraded to Gradle 8.

Management network interface

Until now, all the Quarkus endpoints were exposed on the same network interface.

Starting with Quarkus 3.0, you can expose technical endpoints such as the health and metrics on a different interface thanks to a specific management interface.

/q/info

To expose information about your application (such as the git hash), add the quarkus-info extension to your project.

The endpoint is available on /q/info and will be exposed on the management network interface if you enable it.

RESTEasy Reactive

Many usability enhancements have come into RESTEasy Reactive, such as retrieving all multipart parts.

Remember that RESTEasy Reactive is our default REST layer covering both reactive and blocking workloads.

OpenTelemetry

The OpenTelemetry extension has been rewritten to support the SDK autoconfiguration and went through many changes.

The configuration namespace has changed to quarkus.otel.*. We recommend switching to the new configuration properties, even though the old ones are still supported for now.

Also, enabling OpenTelemetry for JDBC is now as simple as setting quarkus.datasource.jdbc.telemetry to true. You don’t have to modify your JDBC connection URL anymore.

Multiple mailers

Sending emails via multiple SMTP servers is supported in Quarkus 3.0.

Have a look at the updated documentation.

Qute

Qute, our templating engine, also got a lot of love with several new features, such as the ability to cache a section of the template that rarely changes thanks to cached sections.

Cache

It is now possible to use a Redis backend with the Cache extension.

For more information, see the dedicated guide.

The cache extension also allows you to define a global default cache configuration that will be applied to all your caches.

Database migrations

Your database migrations with Flyway and Liquibase are now run as init containers in manifests.

The notion of migration/setup work being done in init containers is available for other extensions to implement and support.

The Flyway extension supports custom credentials/URLs to connect to the database and you can more easily customize the configuration of the Flyway instance.

MongoDB

CredentialsProviders are now supported for MongoDB connections.

Elasticsearch Java Client extension

The new Elasticsearch Java Client is supported as a brand-new extension. This solves the licensing problems that prevented us from updating the deprecated High Level REST Client.

To use this new client, have a look at the updated Elasticsearch guide.

gRPC

Several enhancements have been made to the gRPC extensions, such as the support of InProcess.

Scheduler API

You can now schedule jobs programmatically by using the Scheduler programmatic API, described in the Scheduler reference guide.

Kubernetes Client

The Kubernetes Client has been upgraded to version 6.5.

Azure Functions extension

The development of Azure functions is easier than ever, thanks to the new Azure Functions extension.

Learn more about it in the dedicated guide

Other changes

Quarkus Platform readiness

We have been working hard to make sure that the Quarkus Platform is ready for production use. Not every extension found in Quarkus 2 Platform is available or not yet final in Quarkus 3 Platform yet, but they are on their way.

The following extensions are available:

  • Debezium

  • Optaplanner

  • Google Cloud Services

  • Cassandra

  • Camel (M1 milestone)

The following extensions are not yet available, but will be available soon:

  • Operator SDK

If you are using an extension that is missing or not working, please open issues in their respective issue tracker systems.

Java 11 deprecated

The OpenJDK community will end active support for Java 11 in September 2023. We still plan to support Java 11 past that date for core Quarkus functionality, but Java 11 is now marked as deprecated. We recommend that you upgrade to Java 17 or later if you want to use the latest and greatest version of Quarkus.

Release cadence and Long Term Support

With Quarkus 3 finally out, we will be returning to our regular, continuous cadence of releasing approximately every five weeks. This provides a delivery train of small incremental changes that are easy to adopt and upgrade to.

We do know some of you are looking for a more stable release cadence, and we are working on a new long-term support (LTS) policy starting from Quarkus 3.2. We will provide details on this as we get closer to the 3.2 release. Java 11 will still be supported there for the core part of Quarkus.

Quarkiverse

Quarkus is not just the https://github.com/quarkusio/quarkus repository and the Quarkus platform. It is also the whole rest of the Quarkus ecosystem - the so-called Quarkiverse. Those extensions are hosted and maintained by lots of contributors and organizations around the world. Some host these extensions in their GitHub repositories, and others host them in the Quarkiverse Hub.

With Quarkus 3, due mainly to the package changes in many of the core dependencies, we are happy to say that lots of those extensions have already been updated to work with Quarkus 3.0. We are working with the maintainers of the remaining extensions to get them updated as well.

Updating to Quarkus 3.0

As usual, we wrote a very comprehensive migration guide to help you update to Quarkus 3.0.

It is complemented by a dedicated Hibernate ORM 6.2 update guide.

But that is not all: Quarkus 3.0 introduces an update tool that can help you update your projects to Quarkus 3.

This upgrade tool will, among other tasks:

  • Update the Quarkus version

  • Adjust the packages to use the jakarta.* packages

  • Adjust your dependencies in some cases

  • Upgrade your Quarkiverse extensions to versions compatible with Quarkus 3.0

  • Adjust your configuration files when configuration properties have changed

It doesn’t handle everything (typically, Hibernate ORM API changes are not covered by the update tool) but it should handle most of the tedious work.

This update tool can be used for both Quarkus applications and Quarkus extensions, be they Maven or Gradle projects using Java or Kotlin.

If you are using the Quarkus CLI - which is recommended - upgrade it to the latest and run:

quarkus update --stream=3.0

If you are not using the CLI and using Maven, use the Quarkus Maven plugin to update your projects:

./mvnw io.quarkus.platform:quarkus-maven-plugin:3.0.1.Final:update -N -Dstream=3.0

If you are not using the CLI and using Gradle, use the Quarkus Gradle plugin to do so:

./gradlew -PquarkusPluginVersion=3.0.1.Final quarkusUpdate --stream=3.0

For more information, consult the dedicated guide.

I use Quarkus 2.x, do I need to update right away?

We are aware that the update to Quarkus 3.0 will require some work and testing on your side, especially if you are using Hibernate ORM.

That’s why we will maintain Quarkus 2.16 with bugfixes and important CVE fixes for a few months so that you have the time to upgrade your applications to Quarkus 3.x.

Full changelog

You can get the full changelog of Quarkus 3.0 on GitHub:

Contributors

The Quarkus community is growing and now has 788 contributors. Many, many thanks to each and every one of them.

In particular for the 3.0 release, thanks to Adler Fleurant, Adrian Pauli, Ales Justin, Alex Martel, Alexandre Dutra, Alexei Bratuhin, Alexey Loubyansky, Alexey Sharandin, amoscatelli, Andrea Cosentino, Andrea Peruffo, Andri Reveli, Andy Damevin, Àngel Ollé Blázquez, Antonio Costa, Antonio Goncalves, Antonio Jacob Costa, arik-dig, Ashish Ranjan, Auri Munoz, Benedikt Ritter, benstone, besta, Bill Burke, Brad Hards, Bruno Baptista, Bruno Borges, Bruno Leonardo Gonçalves, Bård Kristian Haaland-Sørensen, Carles Arnal, Chexpir, Chihiro Ito, Chris Laprun, Christian Berger, Christian Pieczewski, Christian von Atzigen, Christoph Hermann, Clemens Classen, Clement Escoffier, Damon Sutherland, Dan Dunning, David Andlinger, David Arnold, David M. Lloyd, Davide D’Alto, Dmitri Bourlatchkov, Efim Smykov, Eric Deandrea, Erin Schnabel, faculbsz, Falko Modler, Felipe Henrique Gross Windmoller, Fikru Mengesha, Filippe Spolti, Foivos Zakkak, Foobartender, Fouad Almalki, franz1981, Galder Zamarreño, Geert Schuring, George Gastaldi, Georgios Andrianakis, Gerhard Flothow, Giovanni Barbaro, Guillaume DOUSSIN, Guillaume Le Floch, Guillaume Nieser, Guillaume Smet, Gunnar Morling, Gwenneg Lepage, Harald Albers, Helber Belmiro, Holly Cummins, Hugo Guerrero, IgnasiCR, imperatorx, Ioannis Canellos, Ivan Bazalii, Jan Martiska, Jan Wiemer, Jasmin Suljic, Jayson Minard, Jesse Ehrenzweig, Joe Siponen, John OHara, Jonathan Kolberg, Jorge Solórzano, Jose, Jose Carvajal, Josef Andersson, jtama, Julien Ponge, Julio Enrique Santana Lora, Justin Lee, Katia Aresti, kdnakt, Kevin Dubois, Konstantin Gribov, Konstantin Silin, kottmann, Ladislav Thon, Laure Souche, Leandro Quiroga, Loïc Mathieu, luca-bassoricci, Lukas Lowinger, Lukáš Petrovický, luneo7, Manyanda Chitimbo, Marc Nuri, Marc Schlegel, Marcel Lohmann, Marcell Cruz, Marco Bungart, Marco Schaub, Marek Skacelik, marko-bekhta, Markus Himmel, Martin Kouba, Martin Panzer, Marvin B. Lillehaug, Matej Novotny, Matteo Mortari, Max Rydahl Andersen, Mazen Khalil, Melloware, mfpc, Michael Edgar, Michael Mosmann, Michael Musgrove, Michal Karm Babacek, Michal Maléř, Michal Vavřík, Michelle Purcell, Mickey Maler, Mihai.Poenaru, Moritz Heine, mrizzi, mun711, Nathan Erwin, Nathan Mittelette, Nicolas Filotto, nscuro, oliv37, Orbifoldt, Ozan Gunalp, Özkan Pakdil, Pablo Gonzalez Granados, Paulo Casaes, Pavel.Vervenko, Pedro Igor, Pedro Pereira, Peter Palaga, Phillip Krüger, Radoslaw Adamiak, Radovan Synek, Ramon Boss, Robbie Gemmell, Robert Gonciarz, Robert Stupp, Roberto Cortez, Rolfe Dlugy-Hegwer, Romain Quinio, Rostislav Svoboda, Sanne Grinovero, Sebastian Schuster, Sergey Beryozkin, Severin Gehwolf, shjones, skraft-redhat, spencercjh, Stuart Douglas, sturdy5, Stéphane Épardaud, Sébastien CROCQUESEL, Sébastien Crocquesel, Tamas Cservenak, Theodor Mihalache, Thomas Segismont, Thor Weinreich, tom, Tom Cunningham, Vaclav Svejcar, Vincent Sevel xstefank, Yoann Rodière, Yoshikazu Nojima, Yubao Liu, zedbeit, Zheng Feng, and Žiga Deisinger.

We also want to thank all the extension maintainers from the Quarkiverse and beyond who worked hard on getting the extension ecosystem ready for Quarkus 3.0.

Come Join Us

We value your feedback a lot, so please report bugs, and ask for improvements…​ Let’s build something great together!

If you are a Quarkus user or just curious, don’t be shy and join our welcoming community: