|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: 'Quarkus 3.35 - @Transactional for Hibernate Reactive, PGO for native, JAR tree-shaking, and more' |
| 4 | +date: 2026-05-01 |
| 5 | +tags: release |
| 6 | +synopsis: 'We released Quarkus 3.35, which comes with @Transactional support for Hibernate Reactive, Profile-Guided Optimization for native builds, JAR tree-shaking, Semeru AOT support, and several other improvements.' |
| 7 | +author: gsmet |
| 8 | +--- |
| 9 | + |
| 10 | +We're pleased to announce the release of Quarkus 3.35. |
| 11 | + |
| 12 | +This release brings several notable features: |
| 13 | + |
| 14 | +* https://github.com/quarkusio/quarkus/pull/53295[#53295] - JAR tree-shaking to eliminate unused classes |
| 15 | +* https://github.com/quarkusio/quarkus/pull/53278[#53278] - Profile-Guided Optimization (PGO) support for native builds |
| 16 | +* https://github.com/quarkusio/quarkus/pull/53339[#53339] - Semeru AOT support |
| 17 | +* https://github.com/quarkusio/quarkus/pull/51063[#51063] - Support `@Transactional` for Hibernate Reactive |
| 18 | +* https://github.com/quarkusio/quarkus/pull/53432[#53432] - CORS support for the management interface |
| 19 | +* https://github.com/quarkusio/quarkus/pull/52919[#52919] - Remove the use of System Properties to propagate configuration in tests |
| 20 | +* New snapshot distribution infrastructure |
| 21 | + |
| 22 | +== Update |
| 23 | + |
| 24 | +To update to Quarkus 3.35, we recommend updating to the latest version of the Quarkus CLI and run: |
| 25 | + |
| 26 | +[source,bash] |
| 27 | +---- |
| 28 | +quarkus update |
| 29 | +---- |
| 30 | + |
| 31 | +Note that `quarkus update` can update your applications from any version of Quarkus (including 2.x) to Quarkus 3.35. |
| 32 | + |
| 33 | +For more information about the adjustments you need to make to your applications, please refer to the https://github.com/quarkusio/quarkus/wiki/Migration-Guide-3.35[Quarkus 3.35 migration guide]. |
| 34 | + |
| 35 | +== What's new? |
| 36 | + |
| 37 | +=== JAR tree-shaking |
| 38 | + |
| 39 | +A new experimental `quarkus.package.jar.tree-shake` option enables build-time dependency tree-shaking. |
| 40 | +When set to `classes`, Quarkus performs bytecode reachability analysis to identify and exclude unused classes from runtime dependencies, reducing application JAR size. |
| 41 | + |
| 42 | +The analysis traces references through supertypes, annotations, `ServiceLoader` entries, reflective class loading, and more. |
| 43 | + |
| 44 | +As an example, running tree-shaking on the Quarkus CLI removes over 6,000 unreachable classes, saving around 18 MB (39.5%). |
| 45 | + |
| 46 | +This feature supports `fast-jar`, `uber-jar`, `legacy-jar`, and `aot-jar` packaging types. |
| 47 | + |
| 48 | +As mentioned, this new feature is experimental, and feedback is highly welcome! |
| 49 | + |
| 50 | +=== Profile-guided optimization for native builds |
| 51 | + |
| 52 | +You can now opt in to Profile-Guided Optimization (PGO) for native builds by setting `quarkus.native.pgo.enabled=true`. |
| 53 | + |
| 54 | +Note that PGO is a feature of Oracle GraalVM and is not available in GraalVM Community Edition. |
| 55 | + |
| 56 | +When enabled, Quarkus uses your integration tests as the workload to profile the application. |
| 57 | +The resulting PGO data is then fed into the native compilation for better runtime performance. |
| 58 | + |
| 59 | +The implementation follows a similar pattern to the Project Leyden AOT support introduced in Quarkus 3.32. |
| 60 | + |
| 61 | +=== Semeru AOT support |
| 62 | + |
| 63 | +Building on the Project Leyden AOT integration from Quarkus 3.32, Quarkus now also supports IBM Semeru's AOT features. |
| 64 | + |
| 65 | +In initial testing on the `rest-json` quickstart with IBM Semeru Runtime Open Edition 25, startup time was cut roughly in half (from ~380 ms down to ~190 ms). |
| 66 | + |
| 67 | +For now, this is limited to building JARs with Semeru AOT, automatic container image building (as available with Leyden) is not yet supported. |
| 68 | + |
| 69 | +=== `@Transactional` for Hibernate Reactive |
| 70 | + |
| 71 | +Quarkus now supports the `@Transactional` annotation for Hibernate Reactive, thanks to a new `quarkus-reactive-transactions` extension. |
| 72 | + |
| 73 | +This means you can use the familiar `@Transactional` annotation on methods that return `Uni`, and the transaction lifecycle (begin, commit, rollback) will be managed within the reactive pipeline. |
| 74 | + |
| 75 | +A few things to keep in mind: |
| 76 | + |
| 77 | +- Only `TxType.REQUIRED` is currently supported. |
| 78 | +- Mixing `@Transactional` with `@WithTransaction` or `@WithSessionOnDemand` is not allowed. |
| 79 | +- Methods annotated with `@Transactional` are no longer automatically considered `@Blocking`. If your method is blocking but returns `Uni`, you now need an explicit `@Blocking` annotation. See the https://github.com/quarkusio/quarkus/wiki/Migration-Guide-3.35[migration guide] for details. |
| 80 | + |
| 81 | +=== CORS support for the management interface |
| 82 | + |
| 83 | +The management interface now has its own dedicated CORS configuration, allowing you to set CORS policies independently from the main HTTP interface. |
| 84 | + |
| 85 | +=== Testing improvements |
| 86 | + |
| 87 | +The test infrastructure no longer uses System Properties to propagate configuration from Dev Services, Test Resources, and Test Profiles. |
| 88 | +This change opens the door for better parallel test execution (which we hope to achieve at some point in the future) and makes the Config system truly immutable. |
| 89 | + |
| 90 | +Tests using `QuarkusDevModeTest`, `QuarkusIntegrationTest`, or `QuarkusMainIntegrationTest` can now declare a `Config` field or method parameter to access the updated configuration. |
| 91 | + |
| 92 | +=== New snapshot distribution |
| 93 | + |
| 94 | +Quarkus snapshots are no longer published to Sonatype, which had reliability issues with the volume of artifacts involved. |
| 95 | +Snapshots are now published daily as GitHub Releases in the https://github.com/quarkusio/quarkus-ecosystem-ci/releases[quarkusio/quarkus-ecosystem-ci] repository, with version `999-SNAPSHOT`. |
| 96 | +Each release contains a `maven-repo.tar.gz` asset with pre-built Maven artifacts that you can extract into your local Maven repository. |
| 97 | + |
| 98 | +For CI setups, a dedicated https://github.com/quarkusio/install-quarkus-snapshots-action/[GitHub Action] is also available. |
| 99 | + |
| 100 | +More details can be found in the https://github.com/quarkusio/quarkus/blob/main/CONTRIBUTING.md#using-snapshots[Using snapshots] section of the contributing guide. |
| 101 | + |
| 102 | +=== Jackson reflection-free serializers for Quarkus REST |
| 103 | + |
| 104 | +We initially planned to make Jackson reflection-free serializers the default for Quarkus REST in 3.35. |
| 105 | +However, thanks to several community members who tested this feature and reported issues, we identified a number of edge cases that still need to be addressed. |
| 106 | +We decided to postpone making it the default to 3.36, so that we can fix these issues first. |
| 107 | + |
| 108 | +We are very grateful to everyone who took the time to report problems, your feedback is what makes Quarkus better. |
| 109 | + |
| 110 | +In the meantime, we very much welcome more testing from our community. |
| 111 | +You can enable reflection-free serializers by adding the following property to your configuration: |
| 112 | + |
| 113 | +[source,properties] |
| 114 | +---- |
| 115 | +quarkus.rest.jackson.optimization.enable-reflection-free-serializers=true |
| 116 | +---- |
| 117 | + |
| 118 | +Please report any issues you encounter on https://github.com/quarkusio/quarkus/issues[GitHub]. |
| 119 | + |
| 120 | +=== Platform updates |
| 121 | + |
| 122 | +Various Platform components were upgraded including: |
| 123 | + |
| 124 | +- Camel Quarkus to 3.35.0 |
| 125 | +- Quarkus CXF to 3.35.1 - see release notes for https://docs.quarkiverse.io/quarkus-cxf/dev/release-notes/3.35.0.html[3.35.0] and https://docs.quarkiverse.io/quarkus-cxf/dev/release-notes/3.35.1.html[3.35.1] |
| 126 | +- Quarkus Amazon Services to 3.18.0 |
| 127 | +- Quarkus MCP Server to 1.12.0 |
| 128 | +- Quarkus Flow to 0.9.0 |
| 129 | + |
| 130 | +== Full changelog |
| 131 | + |
| 132 | +You can get the full changelog of https://github.com/quarkusio/quarkus/releases/tag/3.35.0.CR1[3.35.0.CR1], https://github.com/quarkusio/quarkus/releases/tag/3.35.0[3.35.0], and https://github.com/quarkusio/quarkus/releases/tag/3.35.1[3.35.1] on GitHub. |
| 133 | + |
| 134 | +== Contributors |
| 135 | + |
| 136 | +The Quarkus community is growing and has now https://github.com/quarkusio/quarkus/graphs/contributors[1188 contributors]. |
| 137 | +Many many thanks to each and everyone of them. |
| 138 | + |
| 139 | +In particular for the 3.35 release, thanks to Ales Justin, Alexey Loubyansky, andreatp, Andy Damevin, anuragg-saxenaa, Arseni Buinitski, Aurea Munoz, Aurélien Pupier, Bruno Baptista, brunobat, Carles Arnal, Cesar M. Romero-Pedraza, Chris Laprun, Chris Ruffalo, Clement Escoffier, Cristiano Nicolai, DerFrZocker, Dmitri Bourlatchkov, Faisal Dilawar, Foivos Zakkak, George Gastaldi, Georgios Andrianakis, Guillaume Smet, Holly Cummins, Inaki Villar, Jakub Jedlicka, Jamal Dabari, Jan Martiska, Jens Teglhus Møller, Julien Ponge, Karm Michal Babacek, Katia Aresti, keshavprashatdeshpande, Ladislav Thon, lberrymage, Luca Molteni, marco sappe griot, mariofusco, marko-bekhta, Martin Kouba, Matej Novotny, Matej Vašek, Max Rydahl Andersen, Maximilian Zellhofer, Melloware, Michael Edgar, Michal Maléř, Michal Vavřík, Mihajlo Veljković, Nick Robison, Nico Hinrichs, Ozan Gunalp, Paramvir Jindal, Phillip Kruger, Phillip Krüger, PreetiYadav, Robert Toyonaga, Roberto Cortez, Rolfe Dlugy-Hegwer, Rostislav Svoboda, Sergey Beryozkin, Simon Scatton, Simon Scholz, Stéphane Épardaud, Teymur Babayev, Thomas Segismont, tiwari91, Tiziano Basile, tom, xstefank, Yoann Rodière, and Yoshikazu Nojima. |
| 140 | + |
| 141 | +== Come Join Us |
| 142 | + |
| 143 | +We value your feedback a lot so please report bugs, ask for improvements... Let's build something great together! |
| 144 | + |
| 145 | +If you are a Quarkus user or just curious, don't be shy and join our welcoming community: |
| 146 | + |
| 147 | + * provide feedback on https://github.com/quarkusio/quarkus/issues[GitHub]; |
| 148 | + * craft some code and https://github.com/quarkusio/quarkus/pulls[push a PR]; |
| 149 | + * discuss with us on https://quarkusio.zulipchat.com/[Zulip] and on the https://groups.google.com/d/forum/quarkus-dev[mailing list]; |
| 150 | + * ask your questions on https://stackoverflow.com/questions/tagged/quarkus[Stack Overflow]. |
0 commit comments