Qué son las extensiones en Quarkus: la guía definitiva

En el desarrollo tradicional con Java, agregar una funcionalidad suele implicar sumar una dependencia al archivo pom.xml(si usás Maven) o build.gradle (si usás Gradle). Es decir, descargas una librería y la integras manualmente en el proyecto. Sin embargo, en Quarkus, este enfoque no alcanza.

Las extensiones Quarkus no son simples dependencias. Al contrario, están diseñadas para integrarse profundamente en el framework. Además, agregan configuración automática, habilitan servicios de desarrollo (Dev Services), y preparan tu aplicación para que arranque más rápido y consuma menos memoria. Como resultado, mejoran tanto la experiencia del desarrollador como el rendimiento en producción. Por eso, vale la pena entender bien cómo funcionan. A continuación, exploramos sus características principales.

Veamos entonces una comparación inicial para aterrizar el tema.

Cuando deseamos agregar funcionalidad en una aplicación Java desarrollada con:

  • Java EE / Jakarta EE: debes incluir las dependencias Maven, configurando manualmente el pom.xml o con anotaciones, y es el servidor de aplicaciones (Tomcat, WildFly, u otro) quien provee las implementaciones en tiempo de ejecución.
  • Spring Boot: debes incluir un starter (que implica también agregar una dependencia) que empaqueta las librerías y activa la auto-configuración en tiempo de ejecución, lo que reduce drásticamente la configuración manual.
  • Quarkus: agregas una extensión, que no solo incluye las librerías, sino que también ejecuta optimización e integración en tiempo de compilación, habilita servicios de desarrollo automáticos, garantiza la compatibilidad con binarios nativos, y logra arranques más rápidos y un menor consumo de recursos en producción.

En esta guía vamos a explorar todas las aristas de las extensiones Quarkus para que domines su concepto y buenas prácticas.


🧩 ¿Qué son las extensiones en Quarkus?

Las extensiones son el corazón del ecosistema de Quarkus. Son módulos especializados que se integran profundamente en el ciclo de vida de Quarkus para proporcionar funcionalidades específicas. Principalmente, una extensión aporta:

Librerías y dependencias

La función principal de una extensión es empaquetar y gestionar las dependencias de una forma inteligente.

Configuración automática

Las extensiones se encargan de la configuración por ti. No necesitas escribir código para inicializar un servidor web o un pool de conexiones a una base de datos. La extensión lee tus propiedades de application.properties y configura todo de forma automática en tiempo de compilación.

Soporte para Dev Services

Ésta es una de las mayores ventajas. Muchas extensiones incluyen soporte para Dev Services, una característica que inicia automáticamente un contenedor liviano con el servicio que necesitas (por ejemplo, una base de datos PostgreSQL, un cache Infinispan, o un broker de Kafka) cuando ejecutas la aplicación en modo de desarrollo. Esto te permite probar tu aplicación con servicios externos sin tener que configurarlos o instalarlos manualmente, lo que agiliza enormemente el desarrollo.

Generación de código repetitivo

Las extensiones a menudo generan el código repetitivo (boilerplate) que tendrías que escribir manualmente. Un claro ejemplo es la extensión quarkus-hibernate-orm-panache, que no solo incluye Hibernate, sino que también ofrece la API de Panache para simplificar las operaciones CRUD (crear, leer, actualizar, borrar), reduciendo drásticamente la cantidad de código que tienes que escribir.

Anotaciones y APIs

Las extensiones suelen introducir nuevas anotaciones o APIs que se procesan en tiempo de compilación para añadir funcionalidad. Por ejemplo, la extensión de seguridad JWT (quarkus-smallrye-jwt) añade anotaciones como @RolesAllowed o @PermitAll que se utilizan para asegurar tus endpoints REST.

Optimización para ejecutables nativos

La mayoría de las extensiones están diseñadas pensando en la compilación con GraalVM o Mandrel. Se aseguran de que el código que agregan sea compatible con la compilación nativa, lo cual es clave para obtener un rendimiento de arranque ultrarrápido y un consumo de memoria mínimo.

Además de las contribuciones principales que ya mencioné, las extensiones también pueden incluir:

Integración con herramientas de desarrollo (Dev UI)

Algunas extensiones tienen su propia interfaz de usuario en el panel de desarrollo de Quarkus (Dev UI), que puedes acceder desde tu navegador en modo de desarrollo. Esto te permite monitorear el estado de la extensión, ver configuraciones, probar funcionalidades, y obtener información en tiempo real sin salir del navegador. Por ejemplo, la extensión de Hibernate ORM incluye una Dev UI que te permite visualizar las consultas JPQL generadas.

Optimizaciones específicas de rendimiento

Una extensión puede implementar lógica en tiempo de compilación para aplicar transformaciones de código que mejoren el rendimiento o el consumo de recursos. Por ejemplo, una extensión de serialización podría generar código de serialización/deserialización altamente optimizado para un tipo de datos específico, en lugar de usar la reflexión en tiempo de ejecución, lo cual es mucho más lento y consume más memoria.

Integración con Quarkus CLI

Algunas extensiones pueden agregar comandos personalizados con Quarkus CLI. Esto facilita la interacción con la funcionalidad de la extensión directamente desde la terminal.

Interoperabilidad con otros frameworks


Las extensiones no solo se integran con Quarkus, sino que también actúan como puentes para que Quarkus interactúe sin problemas con otros ecosistemas. Un ejemplo de esto son las extensiones que permiten a Quarkus ejecutar aplicaciones construidas con el framework Spring.

En resumen, la capacidad de una extensión va mucho más allá de simplemente incluir una librería. Se trata de cómo esa extensión aprovecha el poder del tiempo de compilación de Quarkus para simplificar tu trabajo, optimizar el código, y ofrecer herramientas y soporte específicos para su funcionalidad.


Administrar extensiones

Quarkus ofrece comandos pensados para ayudarte a instalar extensiones de forma limpia, segura y contextual.

➕ Agregar extensiones

Podemos agregar extensiones al momento de crear el proyecto o en un proyecto existente.

En un proyecto nuevo:

Podemos agregar extensiones al momento de crear el proyecto o en un proyecto existente. En Quarkus CLI utilizaremos la opción -x, –extension, o –extensions (cualquier de las tres es válida) cuando creamos el proyecto.

quarkus create app planet-api -x quarkus-rest,quarkus-hibernate-orm-panache

Con Maven, se utiliza el parámetro -Dextensions del plugin de Quarkus.

mvn io.quarkus.platform:quarkus-maven-plugin:3.25.0:create \
    -DprojectGroupId=io.quarkiverso \
    -DprojectArtifactId=planet-api \
    -Dextensions="quarkus-rest,quarkus-hibernate-orm-panache"

En un proyecto existente:

Debemos utilizar el subcomando extension o ext de Quarkus CLI en la raíz del proyecto

quarkus ext add quarkus-smallrye-health

Con Maven, se utiliza el parámetro -Dextensions del plugin de Quarkus.

./mvnw quarkus:add-extension -Dextensions="quarkus-smallrye-health"

Quitar extensiones

Debemos utilizar el subcomando extension o ext de Quarkus CLI en la raíz del proyecto

quarkus ext remove quarkus-smallrye-health

Con Maven, se utiliza el parámetro -Dextensions del plugin de Quarkus.

./mvnw quarkus:remove-extension -Dextensions="quarkus-smallrye-health"

Puedes consultar online las extensiones de Quarkus aquí y las de RHBQ aquí, asegurándote de elegir la versión correctamente en la barra superior.


😎 Alias de extensiones

Los alias de extensiones son nombres cortos y fáciles que puedes usar en lugar del nombre completo de una extensión al crear un proyecto o añadir una extensión. Son atajos diseñados para mejorar la experiencia de desarrollo, haciéndola más rápida y menos propensa a errores de tipeo.

Por ejemplo, en lugar de escribir el nombre completo quarkus-rest puedes simplemente usar el alias rest, porque el CLI resuelve las coincidencias de forma inteligente.

No es necesario que sepamos el alias ya que su intención es ser algo intuitivo. En caso de encontrar una única coincidencia, la agregará indicándonos la extension por su nombre completo. Si el alias usado coincide con varias extensiones, no agregará ninguna y nos mostrará el listado de todas las extensiones que coinciden.


🔍 Buscar extensiones por palabra clave

Cuando no sabes exactamente qué extensión usar, puedes usar el comando de búsqueda. Por ejemplo, si quiero buscar extensiones de drivers JDBC:

Debemos utilizar el subcomando extension o ext de Quarkus CLI en la raíz del proyecto

quarkus ext list --search jdbc

Con Maven, se utiliza el parámetro -Dextensions del plugin de Quarkus.

./mvnw quarkus:list-extensions -Dsearch=jdbc

👉 Alias, sugerencias y filtros inteligentes están disponibles porque el CLI está diseñado para ayudarte, no sólo para ejecutar comandos.


📦 Extensiones transitivas

Cuando agregamos una extension de forma explícita mediante línea de comandos, se agregarán de forma implícita las extensiones transitivas que se requieran.

Por ejemplo, al incluir en tu aplicación Quarkus la extensión quarkus-rest-jackson , obtienes la capacidad de serializar y deserializar JSON, y también, de manera automática y transitiva, se agrega, si no está presente, la extensión quarkus-rest (otra extensión que brinda el soporte reactivo e imperativo para crear servicios web RESTful, siguiendo el estándar Jakarta RESTful Web Services).

Esto significa que con sólo agregar una extension (quarkus-rest-jackson), obtienes la funcionalidad completa para crear servicios web RESTful y el soporte JSON integrado, simplificando la configuración de tu proyecto.

quarkus create app planet-api -x quarkus-rest-jackson

El siguiente comando funciona de la misma manera que el anterior, aunque en este caso agregar quarkus-rest sería redundante.

quarkus create app planet-api -x quarkus-rest,quarkus-rest-jackson

⚠️ ¿Por qué no deberías agregar extensiones a mano?

Aunque podrías sumar una extensión agregando un <dependency> al pom.xml, esto es considerado una mala práctica por varias razones:

  1. Podrías omitir dependencias transitorias esenciales.
  2. Pierdes la validación de compatibilidad entre versiones (las extensiones están alineadas con el BOM de Quarkus en uso de tu proyecto).
  3. Te salteas funciones clave, como los Dev Services o la activación de configuraciones automáticas.
  4. No te enteras si existen extensiones equivalentes o recomendadas para ese caso.

🔒 ¿Y qué pasa con Red Hat build of Quarkus (RHBQ)?

Cuando trabajas con RHBQ, el conjunto de extensiones cambia ligeramente: estás accediendo a una distribución empresarial de Quarkus, con soporte oficial, correcciones garantizadas y versiones certificadas.

Como dijimos antes, las extensiones están alineadas al BOM del proyecto, y por lo tanto, si tu aplicación parte como RHBQ, las extensiones serán las soportadas por Red Hat. Para más detalle puedes ver el artículo de cómo configurar el uso de RHBQ.

Esto implica:

  • Las extensiones están validadas, estabilizadas y probadas para versiones específicas de RHBQ, que siguen un modelo Long-Term Support (LTS).
  • En lugar del repositorio de extensiones de la comunidad, se utiliza el BOM de RHBQ.
  • Algunas extensiones pueden tener diferencias menores (o estar directamente ausentes) respecto a las de Quarkus comunitario.
  • Debés usar el plugin específico de RHBQ, que garantiza que estés trabajando sobre un stack soportado por Red Hat.

💡 ¿Cómo saber si una extensión tiene equivalente en RHBQ?
La documentación oficial de RHBQ mantiene un listado de extensiones soportadas y la compatibilidad con imágenes nativas y Dev Services. Además, podés configurar tu CLI para apuntar al universo de extensiones de RHBQ y no al de Quarkus community como explicamos aquí.


⚙️ ¿Qué pasa cuando agregás una extensión?

Agregás mucho más que una dependencia. Ocurre lo siguiente:

  1. Se activa código en el proceso de augmentación.
  2. Se cargan configuraciones por defecto.
  3. Se habilitan Dev Services, si la extensión lo soporta (ej: bases de datos, brokers, Keycloak, etc.).
  4. Se modifican las rutas, health checks, configuración de logs, etc., cuando aplica.

Por ejemplo, al agregar quarkus-kafka-client, si tienes Dev Services activos y no hay un broker configurado por ti, Quarkus levantará automáticamente un contenedor liviano de Kafka listo para usar (requiere Podman o Docker corriendo).

Si usas Podman, te recomendamos el artículo de la configuración esencial de Podman.


✅ Buenas prácticas con extensiones

  • Agrega extensiones únicamente con Quarkus CLI o el plugin Quarkus de Maven.
  • Elimina lo que no usas, especialmente si apuntas a ejecutables nativos.
  • Consulta la documentación antes de sumar extensiones «exóticas» o externas, y si usas RHBQ asegúrate que estén soportadas por Red Hat.
  • Verificá compatibilidad con GraalVM. No todas las bibliotecas Java funcionan en binarios nativos (las extensiones de Quarkus sí están adaptadas o lo indican claramente).

🪐 Conclusión

En el universo Quarkus, las extensiones son mucho más que piezas intercambiables. Son parte integral del motor que permite que una aplicación sea rápida, ligera y lista para producción. Usarlas correctamente —ya sea en la versión comunitaria o empresarial— es una de las mejores formas de sacarle verdadero provecho al framework.