{"record":{"id":"980783014e9fbba6","repo":"quarkusio/quarkus","slug":"quarkus-vertx-graphql-ui-path-was-set-to-path","errorCode":null,"errorMessage":"quarkus.vertx-graphql.ui.path was set to \"<path>\", this is not allowed as it blocks the application from serving anything else.","messagePattern":"quarkus\\.vertx-graphql\\.ui\\.path was set to \"<path>\", this is not allowed as it blocks the application from serving anything else\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/vertx-graphql/deployment/src/main/java/io/quarkus/vertx/graphql/deployment/VertxGraphqlProcessor.java","lineNumber":85,"sourceCode":"        return new NativeImageResourceDirectoryBuildItem(\"io/vertx/ext/web/handler/graphiql\");\n    }\n\n    @BuildStep\n    @Record(ExecutionTime.RUNTIME_INIT)\n    void registerVertxGraphqlUI(VertxGraphqlRecorder recorder, VertxGraphqlConfig config,\n            LaunchModeBuildItem launchMode, CoreVertxBuildItem coreVertxBuildItem,\n            NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,\n            BuildProducer<RouteBuildItem> routes,\n            BodyHandlerBuildItem bodyHandler) {\n\n        if (doNotIncludeVertxGraphqlUi(launchMode, config)) {\n            return;\n        }\n\n        Matcher matcher = TRAILING_SLASH_SUFFIX_REGEX.matcher(config.ui().path());\n        String path = matcher.replaceAll(\"\");\n        if (path.isEmpty()) {\n            throw new ConfigurationException(\n                    \"quarkus.vertx-graphql.ui.path was set to \\\"\" + config.ui().path()\n                            + \"\\\", this is not allowed as it blocks the application from serving anything else.\");\n        }\n\n        Handler<RoutingContext> handler = recorder.handler(coreVertxBuildItem.getVertx());\n        routes.produce(nonApplicationRootPathBuildItem.routeBuilder()\n                .route(path)\n                .handler(handler)\n                .displayOnNotFoundPage(\"GraphQL UI\")\n                .build());\n        routes.produce(\n                nonApplicationRootPathBuildItem.routeBuilder()\n                        .routeFunction(path + \"/*\", recorder.routeFunction(bodyHandler.getHandler()))\n                        .handler(handler)\n                        .build());\n    }\n\n    private static boolean doNotIncludeVertxGraphqlUi(LaunchModeBuildItem launchMode, VertxGraphqlConfig config) {","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/vertx-graphql/deployment/src/main/java/io/quarkus/vertx/graphql/deployment/VertxGraphqlProcessor.java#L67-L103","documentation":"The Vert.x GraphQL UI extension requires its dedicated non-application root path. If quarkus.vertx-graphql.ui.path resolves to empty after removing trailing slashes/suffix (effectively '/'), the processor throws ConfigurationException because serving the UI at the root would swallow every route and prevent the application from serving anything else.","triggerScenarios":"Setting quarkus.vertx-graphql.ui.path=/ (or /ui/ with the regex stripping it to empty) at build time; VertxGraphqlProcessor.registerVertxGraphqlUI detects the empty resulting path and fails the build.","commonSituations":"Copying UI path configs between extensions; misunderstanding that the path is relative to the non-application root and setting it to '/'; typos leaving only slashes.","solutions":["Set a distinct path like quarkus.vertx-graphql.ui.path=graphql-ui","Remember the final URL includes the configured non-application root (quarkus.http.non-application-root-path)","Remove trailing slashes from the configured value"],"exampleFix":"// before\nquarkus.vertx-graphql.ui.path=/\n\n// after\nquarkus.vertx-graphql.ui.path=graphql-ui","handlingStrategy":"validation","validationCode":"String uiPath = config.getOptionalValue(\"quarkus.vertx-graphql.ui.path\", String.class).orElse(\"\");\nif (uiPath.replaceAll(\"/+$/, \"\"\").isEmpty()) {\n    throw new IllegalArgumentException(\"quarkus.vertx-graphql.ui.path must not be / or empty\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always configure a named sub-path (e.g. graphql-ui) for UI extensions","Add application.yml linting that rejects single-segment '/' UI paths","Document that UI paths are relative to quarkus.http.non-application-root-path"],"tags":["configuration","graphql","ui-path"],"backgroundTag":"reserved-path-configuration","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"}