Quarkus
- Quarkus is an industry leader in startup time and memory utilization for native and JVM-based Java applications, leading to increased application density and reduced cloud costs.
- Building a native executable is as easy as adding a command-line flag to the build.
- We created Quarkus to run Java applications more efficiently instead of making a costly switch to Node.js or Golang.
- Developers can utilize their existing Java ecosystem expertise with build tools and APIs like Jakarta EE, MicroProfile, Spring, and more, with either imperative or reactive programming styles - or both!
- Kubernetes is a first-class deployment platform in Quarkus with support for its primitives and features.
- Quarkus unites the benefits of rapid development seen in scripting languages, the maturity of the Java ecosystem, and the efficiency of native compilation in a single runtime.
Developer joy
Quarkus strives to provide a fun, enjoyable developer experience that keeps Java developers engaged. Quarkus aims to keep every developer focused on active coding because we know how counterproductive it is to stop, run a bunch of tools, and wait for something to finish. Quarkus is so productive that developers feel encouraged to try “what if” scenarios – something that deadlines might not have allowed for in the past! Consider the following Developer Joy features:
- Live Coding. All code changes are live, even when changing dependencies or configuration files, without giving up strong typing. Each time the application is accessed, Quarkus evaluates code changes, regenerates necessary bytecode, and reloads the application in the background to return updated results, typically in half a second or less. Live Coding works with virtually all code changes and refactorings, no matter the complexity, with no IDE plugins or special tooling required.
- Dev Services. Quarkus uses Testcontainers to automatically instantiate and configure services during development and testing, such as databases, caches, and Kafka. Simply add an extension and start coding as the container automatically downloads and boots in the background!
- Zero-Config Development. Convention over configuration means that no configuration is required for Dev Services. The Kubernetes deployment YAML is automatically generated specifically for any target distribution, whether it’s Minishift, OpenShift, or generic Kubernetes.
- Continuous testing. Automatically run tests every time a file is saved. Run all tests, failed tests, or only tests relevant to code changes (which Quarkus figures out). The following image demonstrates the results of a live coding change and its continuous testing output, making Java development as productive as a scripting language!
- Dev UI. Visualize and utilize Quarkus extension features in a web browser while developing. The following image shows a sample application with Dev UI components that allow developers to update a configuration live, view CDI beans, deploy to OpenShift, open the Swagger UI, and more.
- Command mode. Complements the Dev UI by offering similar Dev UI features from the keyboard in the terminal where Quarkus developer mode was started, like changing the log level with a single keystroke without re-starting the JVM.
- Quarkus CLI. A command-line tool to manage a Quarkus project. The CLI can generate and build a project, manage dependencies, run tests, and more.
- Standards and Best of Breed framework support. Quarkus offers support for standards like MicroProfile and some Jakarta EE specifications like JAX-RS, JPA, and JTA, as well as Apache Camel, Hibernate, Kafka, Spring Compatibility APIs, and dozens more.
- Kotlin Support. In addition to Java, Quarkus supports a popular alternative language for the JVM – Kotlin.
- IDE Integration. Quarkus plugins are available for IDEs like IntelliJ, Visual Studio Code, and Eclipse with features like enhanced code completion. However, Quarkus does not require an IDE. Developer Joy works with any editor, even vi and Notepad!
Resources
- https://quarkus.io/
- IntelliJ support: integrate quarkus.io a lot better and make it behave like a regular IntelliJ IDEA application (e.g. attach a debugger if you want)
- https://www.infoq.com/articles/native-java-quarkus/