|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: 'Quarkus: A Runtime and Framework for Cloud-Native Java' |
| 4 | +date: 2025-11-04 |
| 5 | +tags: quarkus runtime framework performance cloud-native |
| 6 | +synopsis: This post explores how Quarkus speeds up development, cuts costs, and streamlines cloud-native Java. |
| 7 | +author: mmaler |
| 8 | +thumbnailimage: /assets/images/posts/mmaler-blog-posts/quarkus-as-a-powerful-runtime.jpeg |
| 9 | +--- |
| 10 | +:imagesdir: /assets/images/posts/mmaler-blog-posts/2-Quarkus-as-a-powerful-runtime/ |
| 11 | +ifdef::env-github,env-browser,env-vscode[:imagesdir: ../assets/images/posts/mmaler-blog-posts/2-Quarkus-as-a-powerful-runtime/] |
| 12 | + |
| 13 | += Quarkus: A Runtime and Framework for Cloud-Native Java |
| 14 | + |
| 15 | +image::/assets/images/posts/mmaler-blog-posts/quarkus-as-a-powerful-runtime.jpeg[alt="Quarkus: Runtime and Framework for Cloud-Native Java", width=100%] |
| 16 | + |
| 17 | +Cloud platforms favor services that start fast and stay lean. |
| 18 | +Quarkus is engineered for exactly that. |
| 19 | +Buildtime processing reduces runtime overhead and results in rapid startup, a small memory footprint, and frictionless deployment to containers, Kubernetes, and serverless. |
| 20 | +If your Java services need to start in milliseconds, run dense on shared nodes, and still feel great to build, Quarkus was made for that job. |
| 21 | + |
| 22 | +Quarkus is a Java runtime that seamlessly integrates popular frameworks and libraries, shaping both the structure of modern applications and the developer experience behind them. |
| 23 | +In this post, “runtime” means the full execution stack in production: JVM or native, plus Quarkus and the integrated frameworks. |
| 24 | + |
| 25 | +Quarkus itself can also work as a framework, as it constitutes a higher-level layer that provides structure and APIs. |
| 26 | + |
| 27 | +== Why Quarkus stands out? |
| 28 | + |
| 29 | +In modern software development, runtimes and frameworks form the foundation of productivity and consistency. |
| 30 | +Frameworks promote uniformity, simplify infrastructure, and enable automation at scale. |
| 31 | + |
| 32 | +image::1-history.png[alt="A brief timeline leading to modern Java and Quarkus", width=100%] |
| 33 | + |
| 34 | +Quarkus is a cloud-native Java runtime that integrates multiple frameworks and optimizes them for fast startup, low memory use, smooth Kubernetes and serverless deployments, and a great developer experience with live reload. |
| 35 | +Live reload provides fast feedback by showing code changes immediately without recompiling or restarting the server. |
| 36 | + |
| 37 | +In addition to speed and live reload, Quarkus integrates established Java specifications such as CDI, JAX-RS, and JPA, with implementations provided by Arc (CDI), RESTEasy (JAX-RS), and Hibernate ORM (JPA). |
| 38 | +It also enforces its own conventions, drives behavior by using annotations, and defines how applications are structured. |
| 39 | + |
| 40 | +In this sense, Quarkus is a framework that serves as a runtime and platform for cloud-native Java applications. |
| 41 | +It also adheres to industry standards, offering compatibility with technologies such as Spring, Apache Kafka, and Apache Camel to support familiar, flexible development models. |
| 42 | + |
| 43 | +== Quarkus as a versatile framework |
| 44 | + |
| 45 | +Beyond staple traits of modern frameworks, Quarkus introduces two platform-defining features: buildtime optimization and deep extensibility. |
| 46 | + |
| 47 | +* *Buildtime optimization*: Quarkus shifts work from runtime to build time wherever possible. |
| 48 | +This approach reduces startup overhead and memory usage, resulting in a lean, fast, and efficient application tailored for production. |
| 49 | ++ |
| 50 | +.Quarkus performs at build time what traditional frameworks do at runtime: reading configuration files, scanning annotations, and building a model of the application. |
| 51 | +image::2-build-time-principle.png[alt="Buildtime principle in Quarkus: being fast by doing less at runtime", width=100%] |
| 52 | ++ |
| 53 | +.Thanks to buildtime initialization, the resulting application starts faster and consumes less memory. |
| 54 | +image::3-BuildTimeP-Benefits-JVM.png[alt="Benefits of Quarkus buildtime processing on the JVM", width=100%] |
| 55 | ++ |
| 56 | +.All the benefits of buildtime initialization also apply when compiling to a native binary. |
| 57 | +image::4-BuildTimeP-Benefits-native.png[alt="Benefits of Quarkus native image compared to JVM", width=100%] |
| 58 | + |
| 59 | +* *Extensibility*: Quarkus exposes extension points for everything from startup hooks to request filters. |
| 60 | +Over 800 link:https://extensions.quarkus.io[extensions] allow seamless integration with modern technologies such as Kafka, OpenTelemetry, and OpenID Connect. |
| 61 | ++ |
| 62 | +These extensions integrate with Quarkus and participate in its buildtime and runtime lifecycle, making them first-class citizens of the Quarkus platform. |
| 63 | + |
| 64 | +=== Simplified developer experience |
| 65 | + |
| 66 | +Frameworks succeed when they reduce complexity without sacrificing flexibility. |
| 67 | +Quarkus does exactly that: |
| 68 | + |
| 69 | +* Preconfigures popular libraries with sensible defaults. |
| 70 | +* Offers unified configuration and developer tooling. |
| 71 | +* Provides instant feedback with live reload and continuous testing. |
| 72 | + |
| 73 | +This makes Quarkus both powerful and approachable. |
| 74 | + |
| 75 | +You can start with a simple REST endpoint and scale it into a production-grade service without changing your development model. |
| 76 | + |
| 77 | +.Frictionless developer experience: Vastly improved development feedback loop, unified approach to producing different package types, and using proven APIs that Java developers already know. |
| 78 | +image::6-Frictionless.png[alt="Frictionless developer experience: live reload, dev services, continuous testing", width=100%] |
| 79 | + |
| 80 | +These features give developers structure, sensible defaults, and clear conventions during development, and they deliver fast startup, low memory use, and operational consistency in production. |
| 81 | + |
| 82 | +=== Performance that matters |
| 83 | + |
| 84 | +In practice, the two goals that matter most for production-grade frameworks at scale are fast startup and resilience against cascading failures. |
| 85 | +Rapid startup improves elasticity and recovery, while resilience prevents local faults from spreading and enables services to handle failures gracefully. |
| 86 | +For a broader industry perspective, see the link:https://cacm.acm.org/practice/application-frameworks/[ACM article on application frameworks]. |
| 87 | + |
| 88 | +Quarkus shifts work from runtime to build time, thus enabling faster cold starts. |
| 89 | +Additionally, it offers the option to generate native executables with GraalVM's native-image, enabling cold starts in milliseconds and a minimal memory footprint. |
| 90 | +This results in higher pod density, quicker horizontal scaling, and lower idle costs. |
| 91 | +As such, it enables cost-effective deployment in containers and serverless environments. |
| 92 | + |
| 93 | +Native images often provide faster startup and lower RSS. However, they can deliver lower peak throughput and exhibit scaling limits on multi-core machines. |
| 94 | +Current native images typically use a single-threaded garbage collector, which is inefficient for large heaps and does not benefit from multiple cores. |
| 95 | +We generally recommend native execution for services that run on smaller instances, up to 2 vCPUs with roughly 2-4 gigabytes of RAM, where startup time and memory footprint dominate cost and user experience. |
| 96 | + |
| 97 | +JVM execution, by contrast, takes longer to start and warm up. |
| 98 | +However, it can achieve higher peak performance through just-in-time compilation. It also scales well beyond two cores and it offers more capable garbage collectors and tuning options. |
| 99 | + |
| 100 | +Choose the mode that matches your workload profile, cold-start targets, and cost envelope, and let Quarkus maintain a consistent development model across both paths. |
| 101 | + |
| 102 | +* If you optimize for native execution, audit reflection and resource usage, enable dead-code elimination-friendly patterns, and consider profile-guided optimizations where appropriate. |
| 103 | +* If you optimize for JVM execution, budget for warm up, enable the right GC for your heap and latency goals, and measure steady-state throughput under realistic load. |
| 104 | + |
| 105 | +Quarkus also includes structured health checks, metrics, and tracing, which align the runtime with production standards from day one. |
| 106 | + |
| 107 | +Taken together, these in production choices provide measurable wins: |
| 108 | + |
| 109 | +image::7-success-stories.png[alt="Real-world success stories using Quarkus", width=100%] |
| 110 | + |
| 111 | +* link:https://quarkus.io/blog/vodafone-greece-replaces-spring-boot/[Vodafone Greece replaces Spring Boot with Quarkus] |
| 112 | +* link:https://www.logicmonitor.com/blog/quarkus-vs-spring[Quarkus vs. Spring Boot] |
| 113 | + |
| 114 | +=== Security |
| 115 | + |
| 116 | +Quarkus uses a standards-first composable security model. |
| 117 | +You enable what you need and configure it for your environment: |
| 118 | + |
| 119 | +* **Transport:** Enable HTTPS in the application by configuring TLS. |
| 120 | +* **Authentication:** Choose Basic, form-based, mTLS, OpenID Connect (OIDC), or WebAuthN. |
| 121 | +* **Authorization:** Enforce RBAC on web endpoints with `@RolesAllowed`, `@DenyAll`, and `@PermitAll`. |
| 122 | + |
| 123 | +This lets you apply the right security controls for each deployment. |
| 124 | + |
| 125 | +=== Observability and control surfaces |
| 126 | + |
| 127 | +Common control surfaces, such as metrics, logging, tracing, and configuration, are essential for site reliability engineers (SREs) and platform teams. |
| 128 | + |
| 129 | +Quarkus exposes: |
| 130 | + |
| 131 | +* Unified logging with link:https://quarkus.io/guides/logging[`quarkus-logging`]. |
| 132 | +* Structured metrics and tracing with link:https://quarkus.io/guides/telemetry-micrometer-to-opentelemetry[Micrometer and OpenTelemetry]. |
| 133 | +* Unified configuration of all the application's aspects by using `application.properties` or environment variables. |
| 134 | + |
| 135 | +This standardization enables automation and scalable monitoring. |
| 136 | + |
| 137 | +=== Modular and production-ready |
| 138 | + |
| 139 | +Following a lean-core, modular-at-the-edge approach, Quarkus delivers: |
| 140 | + |
| 141 | +* A minimal core for fast startup. |
| 142 | +* Pluggable extensions for authentication, tracing, messaging, and more. |
| 143 | +* Dev Services for automatic provisioning of databases, brokers, and containers in dev mode. |
| 144 | + |
| 145 | +Whether you are building a prototype or deploying to OpenShift, Quarkus adapts. |
| 146 | +This modularity spans both the framework-level APIs developers work with and the runtime behaviors that execute beneath them. |
| 147 | + |
| 148 | +Because Quarkus modularity is declarative and unified across extensions, it supports a platform-like developer experience without the rigidity of traditional frameworks. |
| 149 | + |
| 150 | +=== Building your stack with Quarkus |
| 151 | + |
| 152 | +We will explore this topic in depth in part 3 of this series. |
| 153 | +For now, here is how Quarkus fits into the picture. |
| 154 | + |
| 155 | +Frameworks can serve as a foundation for creating higher-level abstractions. |
| 156 | + |
| 157 | +Quarkus fits naturally into this model — not by becoming a platform in itself, but by enabling teams to build their customized stacks and frameworks on top of it. |
| 158 | + |
| 159 | +Unlike many traditional frameworks, Quarkus provides a unified extension architecture that supports deep customization. |
| 160 | +Organizations can tailor Quarkus to fit specific domains, technologies, or compliance needs. |
| 161 | +This enables the creation of organization-specific developer experiences, including internal stacks built on a unified Quarkus extension architecture. |
| 162 | + |
| 163 | +By encouraging consistency, offering buildtime integration, and exposing clean extension points, Quarkus supports the creation of opinionated, scalable internal frameworks without forking or reinventing the core. |
| 164 | + |
| 165 | +By packaging Quarkus extensions, curated defaults, and service templates into an internal Quarkus stack, teams focus on business logic. |
| 166 | +At the same time, your framework layer standardizes infrastructure, security, and operational integrations across services. |
| 167 | +This has been proven by Logicdrop, who refactored their entire Spring Boot stack with Quarkus, reducing container size by ~75%, achieving sub-second startup times, and significantly improving developer productivity. |
| 168 | + |
| 169 | +For more information, see the link:https://quarkus.io/blog/logicdrop-customer-story/[Logicdrop customer story] and their link:https://quarkus.io/blog/logicdrop-automating-quarkus-with-gitlab/?utm_source=chatgpt.com[GitLab automation write-up]. |
| 170 | + |
| 171 | +== Conclusion |
| 172 | + |
| 173 | +Quarkus unifies the strengths of a development framework and a runtime. |
| 174 | +As a framework, it provides structure, conventions, and a cohesive developer experience. |
| 175 | +As a runtime, it delivers fast startup, low memory use, and operational consistency in the cloud. |
| 176 | +This dual role helps teams standardize practices, reduce costs, and ship resilient cloud-native services. |
| 177 | + |
| 178 | +Quarkus is built in the open under the Apache License 2.0, governed with the Commonhaus model, and developed end-to-end on GitHub. |
| 179 | +Beyond the core project, the ecosystem includes the link:https://hub.quarkiverse.io/[Quarkiverse Hub], a community-run collection of link:https://quarkus.io/extensions/[Quarkus extensions] and related projects. |
| 180 | +The Quarkiverse Hub provides repository hosting with build, CI, and release publishing, so features land as versioned, testable modules you can adopt, fork, or extend. |
| 181 | + |
| 182 | +image::8-expectations.png[alt="Setting expectations for performance and developer experience with Quarkus", width=100%] |
| 183 | + |
| 184 | +So, that’s all for now, thank you for reading, and let’s meet again in the third article of this series, which will cover building your own stack with Quarkus. |
| 185 | + |
| 186 | +For a closer look at how Quarkus makes Java cloud-native, see the https://quarkus.io/blog/mmaler-blogpost-1-intro/[introductory blog post]. |
0 commit comments