skills/quarkus-app/SKILL.md
Use this skill whenever a user wants to create, scaffold, bootstrap, initialize, generate, or set up a new Quarkus application or microservice. Also trigger when a user asks how to add extensions to an existing Quarkus project, upgrade a Quarkus version, or maintain a Quarkus app's dependencies. This skill ensures all projects are generated using the latest official Quarkus platform version, proper tooling (CLI preferred, Maven plugin as fallback), and official platform or Quarkiverse extensions only. Trigger even for casual phrasing like "spin up a Quarkus app", "start a new Quarkus service", "create a Quarkus REST API", or "add a Quarkus extension".
npx skillsauth add jeremyrdavis/claude-skill-quarkus-ddd quarkus-appInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill governs how to create and maintain Quarkus applications. Always follow the decision tree and conventions below.
Before generating any project, always verify the current latest stable Quarkus release. The version baked into this skill may be stale. Use web search or the Maven Central / GitHub releases to confirm.
3.32.x)3.27.x and 3.20.x (use LTS only if user explicitly requests long-term stability)Use the latest stable community version unless told otherwise.
Before generating, collect:
| Parameter | Default | Notes |
|---|---|---|
| groupId | io.arrogantprogrammer | Always ask if not provided |
| artifactId | (required) | The app name / Maven artifact ID |
| version | 1.0.0-SNAPSHOT | Standard Maven SNAPSHOT for new apps |
| extensions | (required) | See extension guidance below |
| build tool | Maven | Ask if user prefers Gradle |
| Java version | 25 | Always ask — suggest 25 as the default |
If the user hasn't specified a Java version, ask which version they'd like to use and suggest 25 as the default.
If the user hasn't specified extensions, ask or propose sensible defaults based on their described use case.
Always prefer the Quarkus CLI. Fall back to the Maven plugin only if:
quarkus CLI is not installed, ORquarkus create app {groupId}:{artifactId}:{version} \
--no-code \
-x={extension1},{extension2},{extension3}
Key CLI flags:
-x / --extensions — comma-separated extension list (short names, no spaces after commas)--no-code — skip generated example code (omit if user wants starter code)--gradle — switch to Gradle build (default is Maven)-S io.quarkus.platform:3.32 — pin to a specific stream if neededInstallation note (include if user might not have CLI):
# Via SDKMAN (recommended)
sdk install quarkus
# Via JBang
curl -Ls https://sh.jbang.dev | bash -s - trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/
curl -Ls https://sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio
# Via Homebrew (macOS/Linux)
brew install quarkusio/tap/quarkus
Use the io.quarkus.platform group (NOT io.quarkus) — this ensures the full Quarkus Platform BOM is used,
which includes Quarkiverse extensions and correct dependency alignment.
mvn io.quarkus.platform:quarkus-maven-plugin:{QUARKUS_VERSION}:create \
-DprojectGroupId={groupId} \
-DprojectArtifactId={artifactId} \
-DprojectVersion={version} \
-Dextensions='{extension1},{extension2},{extension3}' \
-DnoCode
Key parameters:
-DnoCode — omit generated example classes-DclassName — optional REST resource class name-Dpath — optional REST path (used with -DclassName)| Source | When to use | How to reference |
|---|---|---|
| Quarkus Platform | Core Quarkus features | Short name (e.g., rest-jackson) |
| Quarkiverse | Community/ecosystem features | Short name or io.quarkiverse.*:quarkus-* |
| Never raw | Don't add io.quarkus:quarkus-* manually | Use CLI/Maven plugin to manage |
Short names work in both CLI (-x=rest-jackson) and Maven plugin (-Dextensions='rest-jackson').
For Quarkiverse extensions (not in core platform), use the full artifact coordinates:
# CLI — Quarkiverse extension
quarkus ext add io.quarkiverse.langchain4j:quarkus-langchain4j-openai
# Maven plugin — Quarkiverse extension
-Dextensions='io.quarkiverse.langchain4j:quarkus-langchain4j-openai'
See references/extensions.md for a curated list of commonly used extensions by category.
After generating, always remind the user:
./mvnw quarkus:dev (Maven) or quarkus dev (CLI)http://localhost:8080/q/dev — useful for extension managementquarkus ext add {extension} # CLI
./mvnw quarkus:add-extension -Dextensions='{extension}' # Maven
src/main/resources/application.properties# CLI (preferred)
quarkus update
# Maven plugin
./mvnw quarkus:update
Always check the migration guide at https://quarkus.io/guides/update-quarkus before upgrading.
quarkus ext add rest-jackson hibernate-orm-panache jdbc-postgresql
quarkus ext ls
quarkus ext ls -i # installable from current platform
quarkus ext ls -i -s=ai # search by keyword
quarkus create app io.arrogantprogrammer:my-service:1.0.0-SNAPSHOT \
--no-code \
-x=rest-jackson,hibernate-orm-panache,jdbc-postgresql
mvn io.quarkus.platform:quarkus-maven-plugin:3.32.3:create \
-DprojectGroupId=io.arrogantprogrammer \
-DprojectArtifactId=my-service \
-DprojectVersion=1.0.0-SNAPSHOT \
-Dextensions='rest-jackson,hibernate-orm-panache,jdbc-postgresql' \
-DnoCode
quarkus create app io.arrogantprogrammer:ai-service:1.0.0-SNAPSHOT \
--no-code \
-x=rest-jackson,io.quarkiverse.langchain4j:quarkus-langchain4j-openai
quarkus create app io.arrogantprogrammer:event-service:1.0.0-SNAPSHOT \
--no-code \
-x=messaging-kafka,rest-jackson
<dependency> blocks for io.quarkus:quarkus-* artifacts — always go through the
extension management tooling to ensure BOM alignmentio.quarkus:quarkus-maven-plugin in the create command — always use
io.quarkus.platform:quarkus-maven-plugin (the platform plugin resolves the full BOM)references/rhbq.md for RHBQ-specific guidancedevelopment
Scaffold and generate Domain-Driven Design components with Hexagonal Architecture in Quarkus projects. Use this skill whenever the user wants to create a new bounded context, add an aggregate, create value objects, scaffold a DDD module, add a new subdomain, or generate any DDD tactical pattern (aggregate, entity, value object, command, event, repository, service, endpoint) in a Quarkus/Java project. Also trigger when the user mentions 'hexagonal architecture', 'ports and adapters', or asks to add a new feature following DDD patterns.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------