Quarkus Insights #250: What's New with Quarkus Data
This summary was generated using AI, reviewed by humans - watch the video for the full story.
Quarkus Insights #250: What''s New with Quarkus Data
Episode 250 of Quarkus Insights focused on one of the longer-running efforts in the Quarkus data layer: the work formerly known as “Panache 2”, then “Panache Next”, and now Quarkus Data. Stephane Épardaud joined the show to explain why the rename matters, what problems this new API is trying to solve, and how it brings together ideas from Jakarta Data, Hibernate ORM, Hibernate Reactive, and eventually MongoDB under a more consistent programming model.
Why “Quarkus Data”?
The first announcement was the name itself. What started as an internal evolution of Panache has grown into a broader data-layer effort, so the team wanted a name that is easier to discover and better aligned with the problem space.
Steph explained that “Panache” is memorable if you already know Quarkus, but less obvious for users browsing extensions on code.quarkus.io. “Quarkus Data” is more descriptive and mirrors earlier naming simplifications such as the move to Quarkus REST.
The rename also reflects scope. This is no longer just a new Panache flavor for one backend. The goal is a common umbrella for multiple data technologies and execution styles.
What Panache Got Right
Before getting into the redesign, the discussion acknowledged why Panache became popular in the first place.
Panache made live coding and rapid development much easier by removing a lot of repetitive persistence code. With a typical entity extending a Panache base type, developers got:
-
Automatic IDs
-
Public fields instead of boilerplate getters and setters
-
Instance methods such as
persist()anddelete() -
Convenient query helpers like
find(),count(),delete(), andfindById() -
Shortened query syntax instead of always writing full HQL/JPQL
-
A small, discoverable API surface
That simplicity is still a major design goal. Quarkus Data is not trying to abandon the productivity benefits of Panache; it is trying to keep them while removing some long-standing limitations.
The Problems Quarkus Data Is Trying to Solve
Steph outlined several pain points in the original Panache model.
Separate worlds for blocking and reactive
Quarkus has long supported both Hibernate ORM and Hibernate Reactive, but Panache exposed them through different modules and incompatible super types. That made it awkward to mix blocking and reactive access patterns in the same application.
Static methods were convenient, but limiting
The classic MyEntity.find(…) style is easy to discover, but static methods are harder to mock in tests and rely on tricks that do not always produce ideal typing behavior.
No real support for stateless sessions
Panache focused on managed entities, where changes are tracked automatically and flushed back to the database. It did not properly support stateless access patterns where updates must be explicit.
Jakarta Data Changes the Direction
A major part of the redesign is integration with Jakarta Data, the emerging standard for repository-style data access.
Jakarta Data introduces repository interfaces whose methods can be implemented automatically based on annotations and signatures. In the episode, Steph showed two important styles:
-
@Findmethods, where parameter names and types define the query -
@Querymethods, where the query is written explicitly but still validated
The key benefit is compile-time checking. The annotation processor can verify that referenced entity fields actually exist and that parameter types match. That means fewer broken queries hiding until runtime.
This also opens the door to better IDE support. Steph noted that some support is already visible in IntelliJ IDEA, though still rough around the edges, and the Quarkus team intends to improve this further through the Quarkus language tooling.
One Model, Multiple Modes
The most important architectural shift is that Quarkus Data aims to let developers mix and match several dimensions that used to be separated:
-
Blocking and reactive access
-
Managed and stateless entity handling
-
Repository injection and generated accessors
-
Existing Panache-style convenience methods and Jakarta Data repositories
Steph described this as putting the different access modes “on the same pedestal” instead of treating one as the default and the others as second-class options.
Managed vs. Stateless Entities
One of the most interesting parts of the demo was the distinction between managed and stateless access.
With managed entities, changes are tracked automatically and written back to the database without an explicit update call. With stateless access, the entity is not tracked, so modifications only reach the database when you call update() yourself.
In the prototype shown on the stream, the entity could be switched from a managed form to a record/stateless form with only small code changes. The repository access mode then determined whether updates were implicit or explicit.
That flexibility is powerful, but it also raised a good question from the audience: will mixing these models create a new class of bugs where developers forget whether an update is automatic? Steph’s answer was pragmatic: this is still experimental, and the team wants feedback on whether mixing these modes is genuinely useful in real applications or whether most teams will standardize on one style.
The Demo: Familiar Operations, New Access Patterns
The live demo showed that Quarkus Data is trying to preserve the “easy path” that made Panache attractive.
Instead of calling static methods directly on the entity type, the prototype uses generated metamodel accessors and repositories. From there, developers can still do familiar operations such as:
-
Listing all entities
-
Finding by ID
-
Counting rows
-
Running shortcut queries
-
Sorting and paging results
Steph also showed that repositories can be injected directly, which avoids repeating long generated accessor chains in endpoint code.
At the moment, some of the generated type names are still very much in flux. That was part of the humor of the episode: the functionality is becoming real, but the naming is still being refined.
Type-Safe Repositories in Practice
The demo then moved from convenience methods to Jakarta Data repositories.
Instead of placing custom query logic as static methods on the entity, Steph defined a repository interface extending the appropriate generated repository type. From there, custom methods could be added using Jakarta Data annotations or finder conventions.
This enables a gradual migration path:
-
Start with familiar convenience methods
-
Move repeated or important queries into repository interfaces
-
Replace string-based queries with type-safe finder or query methods
-
Let compile-time validation catch mistakes earlier
That migration story is important. Quarkus Data is not presented as a complete rejection of Panache’s ergonomics, but as a way to evolve toward stronger typing and more flexible architecture.
Paging and Sorting Move Toward Jakarta Data Types
Another visible change is the move away from Panache-specific paging and sorting types toward Jakarta Data equivalents.
In the demo, sorting and paging parameters were passed directly through REST endpoints using Jakarta Data types such as Order and PageRequest, with support wired through Quarkus REST. That means the data layer and REST layer can speak a more standard vocabulary instead of relying on framework-specific helper classes.
Steph also mentioned cursor-based paging as another mode supported by Jakarta Data, though the episode did not go deep into implementation details.
Reactive Access Becomes a First-Class Option
Reactive support was another major theme.
Rather than forcing developers into a separate reactive Panache universe, Quarkus Data aims to let reactive repositories sit alongside blocking ones. In the demo, Steph created a reactive repository returning Mutiny Uni and showed that the same repository concepts still apply.
That makes it easier to keep most of an application blocking while selectively making certain methods reactive for performance or runtime-behavior reasons. The team sees this as a more realistic adoption path than requiring an all-or-nothing switch.
Experimental Means Experimental
The episode repeatedly emphasized that this work is not finished.
Steph was candid that the demo depended on several branches not yet merged to main, that names are still changing, and that some IDE behavior and runtime bugs are still being ironed out. Even the package names are expected to change.
The current state is best understood as a serious preview rather than a production-ready recommendation.
That said, the direction is now concrete enough for meaningful feedback. The team is specifically looking for input from:
-
Developers who want to try it
-
Developers who are interested but cautious
-
Developers who do not like the shape of the API
-
People with opinions on naming, ergonomics, and migration
Questions from the Audience
The live discussion surfaced a few useful themes.
Why would anyone mix managed and stateless access?
This remains an open question. Steph personally prefers explicit database operations because accidental in-memory changes cannot silently leak into persistence. Others may prefer managed entities for convenience. Quarkus Data is trying to support both and let real-world usage determine whether mixing them is valuable or mostly theoretical.
How mature is IDE support?
Some compile-time validation already shows up in the IDE, but support is inconsistent today. Better completion, error reporting, and query conversion tooling are planned.
How does paging behave with joins?
Steph did not give a definitive answer on stream and suggested that deeper questions like this are better followed up through the community channels, such as GitHub Discussions or Zulip.
What to Watch for in Quarkus 3.37 and Beyond
The naming discussion near the end of the episode suggested that Quarkus 3.37 would likely be the first release where users start seeing “Quarkus Data” appear, though with the caveat that package names and type names may still evolve.
Why This Matters
Quarkus Data is trying to solve a difficult balancing act:
-
Keep the low-boilerplate productivity that made Panache successful
-
Embrace Jakarta Data as a standard model
-
Unify blocking, reactive, managed, and stateless access patterns
-
Improve typing, testability, and long-term maintainability
-
Leave room for multiple backends under one conceptual umbrella
If the effort succeeds, it could make Quarkus data access both more powerful and more coherent, especially for teams that need more than the original “single happy path” Panache model.
Key Takeaways
-
Quarkus Data is the new name for the long-running Panache redesign effort.
-
Jakarta Data is central to the new direction, especially for repository interfaces and compile-time query validation.
-
Blocking and reactive access can coexist more naturally in the same application model.
-
Managed and stateless entity handling are both supported, with explicit updates required for stateless access.
-
Panache-style convenience is still a goal, even though the access patterns are changing.
-
Type-safe queries are a major improvement over string-only query definitions.
-
Paging and sorting are moving toward standard Jakarta Data types.
-
The API is still experimental and in flux, especially around naming.
-
The team wants feedback now, before the design fully hardens.
-
This is a preview of Quarkus’s future data layer, not yet a “take it to production tomorrow” feature.
Conclusion
For a project that Steph described as nearly three years in the making, this episode felt like an important milestone: Quarkus Data is no longer just an internal idea or a pile of half-working branches. It is becoming a coherent proposal for the future of data access in Quarkus.
The API is still evolving, and the team is being explicit that now is the time for feedback rather than blind adoption. But the direction is compelling: preserve the developer joy of Panache while adding stronger typing, broader backend support, and a more unified model for modern Quarkus applications.