{"record":{"id":"f2bbad27db021b4a","repo":"quarkusio/quarkus","slug":"quarkus-smallrye-health-root-path-ui-was-set-to","errorCode":null,"errorMessage":"quarkus.smallrye-health.root-path-ui was set to \"/\", this is not allowed as it blocks the application from serving anything else.","messagePattern":"quarkus\\.smallrye-health\\.root-path-ui was set to \"/\", this is not allowed as it blocks the application from serving anything else\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthProcessor.java","lineNumber":380,"sourceCode":"\n    @BuildStep\n    ShutdownListenerBuildItem shutdownListener() {\n        return new ShutdownListenerBuildItem(new ShutdownReadinessListener());\n    }\n\n    // UI\n    @BuildStep\n    void registerUiExtension(\n            NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,\n            ManagementInterfaceBuildTimeConfig managementBuildTimeConfig,\n            SmallRyeHealthBuildTimeConfig healthConfig,\n            LaunchModeBuildItem launchModeBuildItem,\n            BuildProducer<WebJarBuildItem> webJarBuildProducer) {\n\n        if (shouldInclude(launchModeBuildItem, healthConfig)) {\n\n            if (\"/\".equals(healthConfig.ui().rootPath())) {\n                throw new ConfigurationException(\n                        \"quarkus.smallrye-health.root-path-ui was set to \\\"/\\\", this is not allowed as it blocks the application from serving anything else.\",\n                        Set.of(\"quarkus.smallrye-health.root-path-ui\"));\n            }\n\n            String healthPath = nonApplicationRootPathBuildItem.resolveManagementPath(healthConfig.rootPath(),\n                    managementBuildTimeConfig, launchModeBuildItem, false);\n\n            webJarBuildProducer.produce(\n                    WebJarBuildItem.builder().artifactKey(HEALTH_UI_WEBJAR_ARTIFACT_KEY) //\n                            .root(HEALTH_UI_WEBJAR_STATIC_RESOURCES_PATH) //\n                            .filter(new WebJarResourcesFilter() {\n                                @Override\n                                public FilterResult apply(String fileName, InputStream file) throws IOException {\n                                    if (fileName.endsWith(JS_FILE_TO_UPDATE) || fileName.endsWith(INDEX_FILE_TO_UPDATE)) {\n                                        byte[] content = SmallRyeHealthProcessor.this\n                                                .updateApiUrl(new String(file.readAllBytes(), StandardCharsets.UTF_8),\n                                                        healthPath)\n                                                .getBytes(StandardCharsets.UTF_8);","sourceCodeStart":362,"sourceCodeEnd":398,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthProcessor.java#L362-L398","documentation":"When the health UI is included, its root path must not be '/', because the UI static handler would claim the entire application route space and shadow every other endpoint. If quarkus.smallrye-health.root-path-ui equals \"/\", the build step throws this ConfigurationException, additionally marking quarkus.smallrye-health.root-path-ui as the offending property.","triggerScenarios":"Setting quarkus.smallrye-health.root-path-ui=/ in application.properties (or via profile/env override) while the health UI is enabled (non-test modes where shouldInclude is true).","commonSituations":"Copying UI path config from another extension where '/' is legal; misunderstanding that root-path-ui is relative to the management/non-application root; setting it via environment variable QUARKUS_SMALLRYE_HEALTH_ROOT_PATH_UI=/ in containers.","solutions":["Set quarkus.smallrye-health.root-path-ui to a non-root path, e.g. /health-ui","Remove the property to fall back to the default UI path","Check environment variables and profiles for an override equal to \"/\""],"exampleFix":"// before\nquarkus.smallrye-health.root-path-ui=/\n\n// after\nquarkus.smallrye-health.root-path-ui=/health-ui","handlingStrategy":"validation","validationCode":"String uiRoot = ConfigProvider.getConfig()\n        .getValue(\"quarkus.smallrye-health.root-path-ui\", String.class);\nif (\"/\".equals(uiRoot)) {\n    throw new IllegalArgumentException(\"root-path-ui must not be '/'\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    startApplication();\n} catch (ConfigurationException e) {\n    if (e.getMessage().contains(\"root-path-ui\")) {\n        throw new IllegalStateException(\"Set quarkus.smallrye-health.root-path-ui to a concrete path like /health-ui\", e);\n    }\n    throw e;\n}","preventionTips":["Never set any *-ui root path to '/' in Quarkus","Audit container env vars for overrides equal to \"/\"","Document the chosen UI path in your deployment manifest","Add a config validation test per profile"],"tags":["configuration","health-ui","startup-failure","quarkus"],"backgroundTag":"invalid-config-value","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"}