.agents/skills/creating-extensions/SKILL.md
Every extension lives under extensions/<name>/ with this structure:
extensions/<name>/
runtime/ # Runtime classes, recorders, beans (quarkus-<name>)
runtime-api/ # (optional) Public APIs for loose coupling (quarkus-<name>-api)
deployment/ # @BuildStep processors (quarkus-<name>-deployment)
deployment-spi/ # (optional) Public build items for cross-extension use (quarkus-<name>-deployment-spi)
runtime-dev/ # (optional) Dev UI/Shell components, dev mode only (quarkus-<name>-dev)
codegen/ # (optional) Code generation utilities (quarkus-<name>-codegen)
cli/ # (optional) CLI commands (quarkus-<name>-cli)
codestart/ # (optional) Codestart templates (quarkus-<name>-codestart)
Only runtime and deployment are mandatory.
runtime-api or deployment-spi for loose couplingruntime or deployment for tight couplingruntime/ and deployment/ POMs must include
quarkus-extension-processor as an annotation processor path| Module | Package |
|---|---|
| Runtime | io.quarkus.<extension-name> |
| Runtime internals | io.quarkus.<extension-name>.runtime.internal |
| Runtime API | io.quarkus.<extension-name>.api |
| Deployment | io.quarkus.<extension-name>.deployment |
| Deployment SPI | io.quarkus.<extension-name>.deployment.spi |
| Runtime Dev | io.quarkus.<extension-name>.dev |
Hyphenated names become underscored: quarkus-foo-bar -> io.quarkus.foo_bar
quarkus-<name>quarkus-<name>-deploymentadr/0009-extension-structure.adoc for the full naming tableCardPageBuildItem and JsonRPCProvidersBuildItem in deployment
processors guarded by @BuildSteps(onlyIf = IsLocalDevelopment.class)runtime-dev/ modulesclassloading-and-runtime-dev skill for runtime-dev wiring details./update-extension-dependencies.sh after adding/removing/renaming —
this ensures modules like devtools/bom-descriptor-json build in the
correct order relative to the new extensioninstall (not just compile) so dependent modules can find itmvn -Dowasp-check in the extension directory to check for known
security vulnerabilities in dependenciesQuarkus uses --ignore-transitive-repositories to ensure all dependencies
come from Maven Central. If your extension needs an external repository:
pom.xml, not the
root pom.xml<repositories> element.mvn/rrf/groupId-<REPOSITORY-ID>.txt file listing authorized
groupIds (one per line)./mvnw -Dquickly -Dmaven.repo.local=/tmp/temp-repoSome sub-projects in independent-projects/ have their own build lifecycle:
arc/ — The CDI implementationresteasy-reactive/ — RESTEasy Reactivequte/ — The templating enginetools/ — Shared tooling utilitiesThese can be built standalone but are also included in the main Quarkus build.