Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Five (and a half) Cool Things You Can Do With Q...

Five (and a half) Cool Things You Can Do With Quarkus

1. Save the world.
2. Lightning-quick CLIs.
3. Embed WASM.
4. Run Spring code.
5. AI, for real.
5½. Use Minecraft as an observability client. Ok, this one isn’t cool, it’s stupid, but Holly’s
done it anyway.

In this demo-driven session, Holly will show some of her favorite Quarkus capabilities. Some are established and
important, some are less well-known, and some are plain silly. But they’re all cool. Whether you’re new to Quarkus or an
experienced user, you’ll discover something you didn’t know.

Avatar for Holly Cummins

Holly Cummins

November 05, 2025
Tweet

More Decks by Holly Cummins

Other Decks in Programming

Transcript

  1. @holly_cummins #RedHat Lighter area represents high and low estimates, where

    available. Sources: https://www.iea.org/fuels-and-technologies/data-centres-networks https://ourworldindata.org/grapher/electricity-demand?tab=table&country=USA~GBR~FRA~DEU~IND~BRA data centres use as much electricity as a medium country
  2. here’s what we see in our controlled lab JVM Native

    Quarkus Spring Boot Ratio (Quarkus / SB) Spring Boot (w/AOT) Ratio (Quarkus / SB AOT) Ratio (SB AOT / SB) Quarkus Spring Boot Ratio (Quarkus / SB) Framework version 3.22.3 3.4.5 3.4.5 3.22.3 3.4.5 Build time (s) 13.15 7.60 172.95% 17.02 77.26% 223.85% 178.99 279.45 64.05% Av. RSS after startup (MB) 192.31 298.09 64.51% 290.40 66.22% 97.42% 71.22 205.74 34.62% Av. time to 1st req (ms) 4652.67 8770.33 53.05% 8180.67 56.87% 93.28% 135.67 916.67 14.80% Av. RSS after 1st req (MB) 244.61 339.52 27.05% 331.78 73.73% 97.72% 79.12 208.21 38.00% Av. throughput (req/sec) 30,397.95 6,495.20 468.01% 6,427.64 472.93% 98.96% 16,753.94 6,146.27 272.59% Max throughput density (req/sec/MB) 35.79 7.95 450.50% 7.89 453.88% 99.26% 59.82 15.94 375.27% Build RSS (GB) 5.62 157.04 57.92% Binary Size (MB) 90.95 157.04 57.92% https://github.com/edeandrea/quarkus-for-spring-devs-examples/tree/quarkus-for-spring-devs-talk-sb3 8 cores, 14GB RAM, GraalVM CE 21.0.2
  3. was this an easy demo? - i broke all the

    performance best practices :) - measuring on a laptop - generating load on the same machine
  4. ?

  5. spring boot quarkus t3.nano $0.0052 40 586 req/s 17 209

    req/s 1 342 errors 2 vCPUs 0.5 GiB
  6. spring boot quarkus t3.nano $0.0052 40 586 req/s 17 209

    req/s 1 342 errors 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  7. spring boot quarkus t3.nano $0.0052 t3.small $0.0208 40 586 req/s

    17 209 req/s 1 342 errors 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  8. spring boot quarkus t3.nano $0.0052 t3.small $0.0208 40 586 req/s

    17 209 req/s 1 342 errors $3.87 a month 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  9. spring boot quarkus t3.nano $0.0052 t3.small $0.0208 40 586 req/s

    17 209 req/s 1 342 errors $15.47 a month $3.87 a month 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  10. spring boot quarkus t3.nano $0.0052 t3.small $0.0208 40 586 req/s

    17 209 req/s 1 342 errors $15.47 a month $3.87 a month x2 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  11. spring boot quarkus t3.nano $0.0052 t3.small $0.0208 40 586 req/s

    17 209 req/s 1 342 errors $15.47 a month $3.87 a month $30.94 a month x2 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  12. spring boot quarkus t3.nano $0.0052 t3.small $0.0208 40 586 req/s

    17 209 req/s 1 342 errors $15.47 a month $3.87 a month $30.94 a month x2 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  13. spring boot quarkus t3.nano $0.0052 t3.small $0.0208 40 586 req/s

    17 209 req/s 1 342 errors $15.47 a month $3.87 a month $30.94 a month x2 2 vCPUs 2 GiB 2 vCPUs 0.5 GiB
  14. tell your boss you learned… -quarkus uses 2 - 8x

    fewer compute resources than spring -quarkus is 2 - 8x cheaper to run than spring
  15. ??

  16. t3.nano t3.small 2x t3.small Watts per hour 12.5 14 28

    Lemons per hour 17,857 20,000 40,000
  17. jbang wrk2@hyperfoil -t2 -c100 -d30s -R 200 --latency http:// localhost:8080/fruits

    jbang wrk@hyperfoil -t2 -c100 -d20s --timeout 1s http:// localhost:8080/fruits sudo powermetrics --samplers cpu_power,tasks --show-process- samp-norm --show-process-gpu --show-usage-summary -i 0 -o output.txt
  18. tell your boss you learned… -lowering costs and hardware usage

    is good for the planet -quarkus helps :)
  19. was this an easy demo? -bringing 77 ,857 lemons to

    malmö turned out to be hard -the energy measurement tooling is bleeding edge (still being written by christophe!)
  20. was this an easy demo? -writing the cli was easy

    -native compilation was easy -native compilation + awt + mac is very hard
  21. i tried: native awt on mac liberica vm on mac

    + tuning of build-time and runtime classes
  22. i tried: native awt on mac liberica vm on mac

    + tuning of build-time and runtime classes graalvm community container
  23. i tried: native awt on mac liberica vm on mac

    + tuning of build-time and runtime classes graalvm community container mandrel container
  24. tell your boss you learned… •picocli + quarkus is a

    great combination •native is clever tech •…but native has dragons •only go native if you actually need it
  25. was this an easy demo? - running rust in a

    jvm is … easy? - live reload would be better with a quarkus extension
  26. “Running JavaScript in a C runtime compiled to WebAssembly on

    the JVM is the new black.” - Andrea Peruffo
  27. but what if the code i want to run in

    quarkus is spring code? 4
  28. was this an easy demo? - all the hard work

    was already done - … but notice we didn’t attempt the tests
  29. tell your boss you learned… -you can get to quarkus

    from spring -compatibility libraries -migration tooling
  30. @holly_cummins #Quarkus #IBM #RedHat deploy to prod rest api train

    the model use output in code standardize prompt structures switch from one LLM model to another memory (context)
  31. @holly_cummins #Quarkus #IBM #RedHat deploy to prod rest api train

    the model use output in code standardize prompt structures switch from one LLM model to another memory (context) langchain
  32. @holly_cummins #Quarkus #IBM #RedHat deploy to prod rest api train

    the model use output in code standardize prompt structures switch from one LLM model to another memory (context) langchain langchain4j
  33. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j
  34. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j easy access to data
  35. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j easy access to data dependency injection
  36. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j easy access to data dependency injection annotations
  37. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j easy access to data dependency injection annotations live coding
  38. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j easy access to data dependency injection annotations live coding failover
  39. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j easy access to data dependency injection annotations live coding failover mockability
  40. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) langchain4j easy access to data dependency injection annotations live coding failover mockability observability
  41. @holly_cummins #Quarkus #IBM #RedHat use output in code standardize prompt

    structures switch from one LLM model to another memory (context) quarkus langchain4j langchain4j easy access to data dependency injection annotations live coding failover mockability observability
  42. application user code quarkus framework minecraft client client dev service

    (testcontainers) extensions minecraft server mod
  43. tell your boss you learned… -you can do a lot

    with interceptors -dev services are awesome
  44. was this an easy demo? -extension was easy, minecraft mod

    was hard -minecraft APIs -lack documentation
  45. was this an easy demo? -extension was easy, minecraft mod

    was hard -minecraft APIs -lack documentation -change between minor versions
  46. was this an easy demo? -extension was easy, minecraft mod

    was hard -minecraft APIs -lack documentation -change between minor versions -client-server sync of injected behaviour is hard
  47. tell your boss you learned… -typesafe objects are better than

    a chat box -… but small models may struggle with structured data -gen ai adds latency
  48. what have we done? 1. seen quarkus uses half as

    much energy as spring boot 2. made a cli that starts really fast
  49. what have we done? 1. seen quarkus uses half as

    much energy as spring boot 2. made a cli that starts really fast 3. used wasm in a quarkus app
  50. what have we done? 1. seen quarkus uses half as

    much energy as spring boot 2. made a cli that starts really fast 3. used wasm in a quarkus app 4. converted a spring app to quarkus
  51. what have we done? 1. seen quarkus uses half as

    much energy as spring boot 2. made a cli that starts really fast 3. used wasm in a quarkus app 4. converted a spring app to quarkus 5. deeply integrated ai
  52. what have we done? 1. seen quarkus uses half as

    much energy as spring boot 2. made a cli that starts really fast 3. used wasm in a quarkus app 4. converted a spring app to quarkus 5. deeply integrated ai 6. used minecraft for observability 5½.