{"record":{"id":"7ecd6a40f708d6c2","repo":"quarkusio/quarkus","slug":"failed-to-determine-a-compatible-quarkus-version-f","errorCode":null,"errorMessage":"Failed to determine a compatible Quarkus version for the requested extensions: ${extensionKeys}","messagePattern":"Failed to determine a compatible Quarkus version for the requested extensions: (.+?)","errorType":"exception","errorClass":"QuarkusCommandException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateProjectCommandHandler.java","lineNumber":360,"sourceCode":"\n        // fallback to the best guess\n        final Map<String, ExtensionCatalog> catalogMap = new LinkedHashMap<>();\n        for (var e : extensionsToAdd) {\n            final List<ExtensionOrigin> origins = e.getOrigins();\n            if (!origins.isEmpty()) {\n                if (origins.get(0) instanceof ExtensionCatalog originCatalog) {\n                    catalogMap.putIfAbsent(originCatalog.getId(), originCatalog);\n                }\n            }\n        }\n        return List.copyOf(catalogMap.values());\n    }\n\n    private static List<ExtensionCatalog> getRecommendedOrigins(List<Extension> extensionsToAdd,\n            Extension quarkusCore, List<ExtensionOrigins> extOrigins) throws QuarkusCommandException {\n        final OriginCombination recommendedCombination = OriginSelector.of(extOrigins).calculateRecommendedCombination();\n        if (recommendedCombination == null) {\n            throw new QuarkusCommandException(noCompatibleQuarkusCoreVersion(extensionsToAdd));\n        }\n        // get the recommended catalogs in the right order according to the preferences\n        List<ExtensionCatalog> sortedCatalogs = recommendedCombination.getUniqueSortedCatalogs();\n\n        sortedCatalogs = normalizeCatalogs(extensionsToAdd, sortedCatalogs);\n\n        if (!containsQuarkusCore(extensionsToAdd)) {\n            sortedCatalogs = ensureQuarkusCorePresent(sortedCatalogs, quarkusCore);\n            if (sortedCatalogs.isEmpty()) {\n                throw new QuarkusCommandException(noCompatibleQuarkusCoreVersion(extensionsToAdd));\n            }\n        }\n        return sortedCatalogs;\n    }\n\n    /**\n     * With the introduction of offering-based filtering, some extensions may appear to be picked\n     * from a catalog with a lower preference while still having their version managed in a catalog","sourceCodeStart":342,"sourceCodeEnd":378,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateProjectCommandHandler.java#L342-L378","documentation":"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.","triggerScenarios":"Calling CreateProject via QuarkusProjectHelper/CreateProjectCommandHandler with a set of extensions whose resolved ExtensionOrigins have no mutually compatible Quarkus core version (OriginSelector returns null).","commonSituations":"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.","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."],"exampleFix":"// before\nQuarkusCommandException: Failed to determine a compatible Quarkus version ...\n// after\n<!-- align versions in pom.xml -->\n<quarkus.platform.version>3.15.1</quarkus.platform.version> <!-- was mixing 2.x-pinned extensions -->","handlingStrategy":"validation","validationCode":"// Validate extension compatibility before adding\nList<Extension> requested = /* resolve each extension from the catalog */;\nSet<String> streams = requested.stream()\n    .map(e -> e.getOrigins().stream().map(o -> o.getPlatformKey() + \":\" + o.getStreamKey()).distinct())\n    .flatMap(s -> s)\n    .collect(Collectors.toSet());\nif (streams.size() > 1) {\n    throw new IllegalStateException(\"Extensions span multiple platform streams: \" + streams);\n}","typeGuard":null,"tryCatchPattern":"try {\n    project.createExtensionManager(...);\n} catch (QuarkusCommandException e) {\n    if (e.getMessage().contains(\"Failed to determine a compatible Quarkus version\")) {\n        // split the extension set per platform stream and retry per stream\n    } else throw e;\n}","preventionTips":["Pin all extensions to one Quarkus platform BOM version","Keep the local registry cache fresh","Avoid mixing extensions from end-of-life platform streams"],"tags":["quarkus-cli","extension-catalog","version-compatibility","dependency-resolution"],"backgroundTag":"incompatible-quarkus-extension-versions","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}