quarkusio/quarkus · error · QuarkusCommandException
Failed to determine a compatible Quarkus version for the req
Error message
Failed to determine a compatible Quarkus version for the requested extensions: ${extensionKeys} What it means
Thrown by getRecommendedOrigins when OriginSelector.calculateRecommendedCombination() returns null, meaning no combination of the requested extensions' origin catalogs shares a Quarkus core version compatible with all of them. The devtools registry resolves each requested extension's available catalogs, and if no single recommended combination exists, project creation/addition cannot proceed. The message lists the requested extension keys so the user can identify the conflicting set.
Source
Thrown at independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateProjectCommandHandler.java:360
// fallback to the best guess
final Map<String, ExtensionCatalog> catalogMap = new LinkedHashMap<>();
for (var e : extensionsToAdd) {
final List<ExtensionOrigin> origins = e.getOrigins();
if (!origins.isEmpty()) {
if (origins.get(0) instanceof ExtensionCatalog originCatalog) {
catalogMap.putIfAbsent(originCatalog.getId(), originCatalog);
}
}
}
return List.copyOf(catalogMap.values());
}
private static List<ExtensionCatalog> getRecommendedOrigins(List<Extension> extensionsToAdd,
Extension quarkusCore, List<ExtensionOrigins> extOrigins) throws QuarkusCommandException {
final OriginCombination recommendedCombination = OriginSelector.of(extOrigins).calculateRecommendedCombination();
if (recommendedCombination == null) {
throw new QuarkusCommandException(noCompatibleQuarkusCoreVersion(extensionsToAdd));
}
// get the recommended catalogs in the right order according to the preferences
List<ExtensionCatalog> sortedCatalogs = recommendedCombination.getUniqueSortedCatalogs();
sortedCatalogs = normalizeCatalogs(extensionsToAdd, sortedCatalogs);
if (!containsQuarkusCore(extensionsToAdd)) {
sortedCatalogs = ensureQuarkusCorePresent(sortedCatalogs, quarkusCore);
if (sortedCatalogs.isEmpty()) {
throw new QuarkusCommandException(noCompatibleQuarkusCoreVersion(extensionsToAdd));
}
}
return sortedCatalogs;
}
/**
* With the introduction of offering-based filtering, some extensions may appear to be picked
* from a catalog with a lower preference while still having their version managed in a catalogView on GitHub (pinned to e1c734241f)
Solutions
- Update the Quarkus platform/BOM so all requested extensions exist in one compatible registry snapshot (mvn versions:update or update quarkus.platform.version).
- Remove or replace the extension(s) pinned to an incompatible old version and retry.
- Refresh the extension registry cache (delete ~/.quarkus/registry cache or set the registry quarkus.registry to a current URL).
- If using a custom registry, verify it actually publishes quarkus-core for the requested version line.
Example fix
// before QuarkusCommandException: Failed to determine a compatible Quarkus version ... // after <!-- align versions in pom.xml --> <quarkus.platform.version>3.15.1</quarkus.platform.version> <!-- was mixing 2.x-pinned extensions -->
Defensive patterns
Strategy: validation
Validate before calling
// Validate extension compatibility before adding
List<Extension> requested = /* resolve each extension from the catalog */;
Set<String> streams = requested.stream()
.map(e -> e.getOrigins().stream().map(o -> o.getPlatformKey() + ":" + o.getStreamKey()).distinct())
.flatMap(s -> s)
.collect(Collectors.toSet());
if (streams.size() > 1) {
throw new IllegalStateException("Extensions span multiple platform streams: " + streams);
} Try / catch
try {
project.createExtensionManager(...);
} catch (QuarkusCommandException e) {
if (e.getMessage().contains("Failed to determine a compatible Quarkus version")) {
// split the extension set per platform stream and retry per stream
} else throw e;
} Prevention
- Pin all extensions to one Quarkus platform BOM version
- Keep the local registry cache fresh
- Avoid mixing extensions from end-of-life platform streams
When it happens
Trigger: Calling CreateProject via QuarkusProjectHelper/CreateProjectCommandHandler with a set of extensions whose resolved ExtensionOrigins have no mutually compatible Quarkus core version (OriginSelector returns null).
Common situations: Mixing extensions pinned to very old Quarkus versions with current ones; using a stale or custom extension registry; typos or snapshot versions of extensions that only exist in an outdated catalog; registry connectivity returning a cached old catalog for one extension but a new one for another.
Related errors
- Failed to locate quarkus-core in the extension catalog
- Failed to resolve ${appArtifact}
- Unable to list extension categories
- Unable to list extensions
- Unable to list platforms
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/7ecd6a40f708d6c2.
Report an issue: GitHub.