{"record":{"id":"0e0d75300fea44dc","repo":"quarkusio/quarkus","slug":"no-configuration-is-available","errorCode":null,"errorMessage":"No configuration is available","messagePattern":"No configuration is available","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"core/runtime/src/main/java/io/quarkus/runtime/graal/ConfigurationSubstitutions.java","lineNumber":28,"sourceCode":"import io.smallrye.config.SmallRyeConfigProviderResolver;\n\n@TargetClass(SmallRyeConfigProviderResolver.class)\nfinal class Target_io_smallrye_config_SmallRyeConfigProviderResolver {\n    @Substitute\n    public Config getConfig() {\n        return get();\n    }\n\n    @Substitute\n    public Config getConfig(ClassLoader classLoader) {\n        return get();\n    }\n\n    @Substitute\n    public SmallRyeConfig get() {\n        SmallRyeConfig config = Target_io_quarkus_runtime_configuration_QuarkusConfigFactory.config;\n        if (config == null) {\n            throw new IllegalStateException(\"No configuration is available\");\n        }\n        return config;\n    }\n\n    @Substitute\n    public SmallRyeConfig get(ClassLoader classLoader) {\n        return get();\n    }\n\n    @Substitute\n    public void registerConfig(org.eclipse.microprofile.config.Config config, ClassLoader classLoader) {\n        // no op\n    }\n\n    @Substitute\n    public void releaseConfig(org.eclipse.microprofile.config.Config config) {\n        // no op\n    }","sourceCodeStart":10,"sourceCodeEnd":46,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/core/runtime/src/main/java/io/quarkus/runtime/graal/ConfigurationSubstitutions.java#L10-L46","documentation":"SmallRyeConfig's ConfigSource-proxy get() is substituted in native mode to return the static config captured by QuarkusConfigFactory; if no config has been set (config factory not initialized), an IllegalStateException \"No configuration is available\" is thrown. This indicates ConfigProvider.getConfig() was called before Quarkus initialized the configuration subsystem.","triggerScenarios":"Calling ConfigProvider.getConfig() (directly or via SmallRyeConfig APIs) from static initializers, before the application started, or after shutdown — anywhere QuarkusConfigFactory.config has not been populated.","commonSituations":"Static fields initialized at class-load time calling config; tests using ConfigProvider without launching Quarkus; using config in a build-time or pre-init context; running outside a Quarkus runtime (e.g. plain unit test of runtime code).","solutions":["Move config access into runtime code that runs after application startup (e.g. CDI injection of org.eclipse.microprofile.config.Config)","Use @Inject Config / @ConfigProperty instead of static ConfigProvider.getConfig()","If code must run early, ensure QuarkusConfigFactory.setConfig has been invoked first (e.g. by starting the application)","In tests, use @QuarkusTest or initialize the config factory manually before access"],"exampleFix":"// before\nstatic final String URL = ConfigProvider.getConfig().getValue(\"app.url\", String.class);\n// after\nString url;\n@Inject\npublic MyBean(Config config) { this.url = config.getValue(\"app.url\", String.class); }","handlingStrategy":"try-catch","validationCode":"// only access config after startup; check availability first\nSmallRyeConfig cfg = QuarkusConfigFactory.getConfigUnsafe(); // or track an 'app started' flag\nif (!appStarted) throw new IllegalStateException(\"Access config only at runtime\");","typeGuard":null,"tryCatchPattern":"try { config = ConfigProvider.getConfig(); } catch (IllegalStateException e) { if (e.getMessage().contains(\"No configuration is available\")) { config = loadFallbackConfig(); } else throw e; }","preventionTips":["Prefer @Inject Config or @ConfigProperty over static ConfigProvider.getConfig()","Never read config from static initializers","Use @QuarkusTest so config is initialized in tests"],"tags":["config","native-image","lifecycle"],"backgroundTag":"config-not-initialized","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"}