{"record":{"id":"88a421a9e752dc67","repo":"quarkusio/quarkus","slug":"quarkus-smallrye-openapi-path-and-quarkus-swagger","errorCode":null,"errorMessage":"quarkus.smallrye-openapi.path and quarkus.swagger-ui.path was set to the same value, this is not allowed as the paths needs to be unique [<path>].","messagePattern":"quarkus\\.smallrye-openapi\\.path and quarkus\\.swagger-ui\\.path was set to the same value, this is not allowed as the paths needs to be unique \\[<path>\\]\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/swagger-ui/deployment/src/main/java/io/quarkus/swaggerui/deployment/SwaggerUiProcessor.java","lineNumber":116,"sourceCode":"            if (\"/\".equals(swaggerUiConfig.path())) {\n                throw new ConfigurationException(\n                        \"quarkus.swagger-ui.path was set to \\\"/\\\", this is not allowed as it blocks the application from serving anything else.\",\n                        Set.of(\"quarkus.swagger-ui.path\"));\n            }\n\n            String devUIContextRoot;\n            if (devContextBuildItem.isPresent()) {\n                devUIContextRoot = devContextBuildItem.get().getDevUIContextRoot();\n            } else {\n                devUIContextRoot = \"\";\n            }\n\n            Map<String, String> urls = new HashMap<>();\n            openapi.documents().forEach((documentName, documentConfig) -> {\n                String documentPath = documentConfig.path();\n\n                if (documentPath.equalsIgnoreCase(swaggerUiConfig.path())) {\n                    throw new ConfigurationException(\n                            \"quarkus.smallrye-openapi.path and quarkus.swagger-ui.path was set to the same value, this is not allowed as the paths needs to be unique [\"\n                                    + documentPath + \"].\",\n                            Set.of(documentPath, \"quarkus.swagger-ui.path\"));\n                }\n\n                String openApiPath = devUIContextRoot\n                        + nonApplicationRootPathBuildItem.resolvePath(documentPath);\n                urls.put(documentName, openApiPath);\n            });\n\n            String swaggerUiPath = devUIContextRoot + nonApplicationRootPathBuildItem.resolvePath(swaggerUiConfig.path());\n            ThemeHref theme = swaggerUiConfig.theme().orElse(ThemeHref.feeling_blue);\n\n            NonApplicationRootPathBuildItem indexRootPathBuildItem = null;\n\n            byte[] indexHtmlContent = generateIndexHtml(urls, swaggerUiPath, swaggerUiConfig,\n                    indexRootPathBuildItem,\n                    launchMode,","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/swagger-ui/deployment/src/main/java/io/quarkus/swaggerui/deployment/SwaggerUiProcessor.java#L98-L134","documentation":"Swagger UI and SmallRye OpenAPI both expose HTTP endpoints; each OpenAPI document path must differ from the UI path or routing becomes ambiguous. When an openapi document path equalsIgnoreCase the swagger-ui path, the build throws a ConfigurationException naming both the duplicate path and quarkus.swagger-ui.path.","triggerScenarios":"quarkus.smallrye-openapi.path (or a named document path in quarkus.smallrye-openapi.documents.<name>.path) set equal to quarkus.swagger-ui.path, case-insensitively.","commonSituations":"Both left at default-ish values like /q/openapi vs /q/swagger-ui then one edited to match; consolidating paths under a common prefix and accidentally colliding them.","solutions":["Change quarkus.swagger-ui.path (e.g. /swagger-ui) so it differs from the OpenAPI document path.","Or change quarkus.smallrye-openapi.path / documents.<name>.path to a unique value.","Remember the comparison is case-insensitive: /Swagger-UI still collides with /swagger-ui."],"exampleFix":"// before (application.properties)\nquarkus.smallrye-openapi.path=/api\nquarkus.swagger-ui.path=/api\n\n// after\nquarkus.smallrye-openapi.path=/api/openapi\nquarkus.swagger-ui.path=/api/swagger-ui","handlingStrategy":"validation","validationCode":"// config lint before build\nString ui = props.getProperty(\"quarkus.swagger-ui.path\", \"\");\nString api = props.getProperty(\"quarkus.smallrye-openapi.path\", \"\");\nif (ui.equalsIgnoreCase(api)) {\n  throw new IllegalArgumentException(\"swagger-ui.path and smallrye-openapi.path must differ\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Adopt a fixed naming convention: /q/openapi for docs, /q/swagger-ui for the UI.","Add a startup config test asserting all served paths are unique (case-insensitively)."],"tags":["quarkus","swagger-ui","openapi","configuration","path-conflict"],"backgroundTag":"path-conflict","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}