{"record":{"id":"eec9e78462896a64","repo":"quarkusio/quarkus","slug":"failed-to-find-any-non-blocking-provider-for-start","errorCode":null,"errorMessage":"Failed to find any non-blocking provider for startup actions. Either import the quarkus-vertx module, or do not declare non-blocking startup actions.","messagePattern":"Failed to find any non-blocking provider for startup actions\\. Either import the quarkus-vertx module, or do not declare non-blocking startup actions\\.","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/StartupBuildSteps.java","lineNumber":192,"sourceCode":"                                }\n                            }\n                        }\n                    }\n                    if (!startupMethods.isEmpty()) {\n                        for (MethodInfo method : startupMethods) {\n                            AnnotationValue priority = annotationStore.getAnnotation(method, STARTUP_NAME).value();\n                            registerStartupObserver(observerRegistration, bean, bean.getIdentifier() + method.toString(),\n                                    priority != null ? priority.asInt() : ObserverMethod.DEFAULT_PRIORITY, method);\n                        }\n                    }\n                }\n            }\n        }\n        // Verify at build-time that we do have the non-blocking provider\n        if (checkNonBlockingProviders) {\n            if (ServiceUtil.classNamesNamedIn(Thread.currentThread().getContextClassLoader(),\n                    \"META-INF/services/\" + NonBlockingProvider.class.getName()).isEmpty()) {\n                throw new IllegalStateException(NonBlockingSupport.ERROR_MSG);\n            }\n        }\n    }\n\n    private void registerStartupObserver(ObserverRegistrationPhaseBuildItem observerRegistration, BeanInfo btBean, String id,\n            int priority, MethodInfo startupMethod) {\n        ObserverConfigurator configurator = observerRegistration.getContext().configure()\n                .beanClass(btBean.getBeanClass())\n                .observedType(StartupEvent.class);\n        configurator.id(id);\n        configurator.priority(priority);\n        configurator.notify(ng -> {\n            BlockCreator b0 = ng.notifyMethod();\n\n            // InjectableBean<Foo> bean = Arc.container().bean(\"bflmpsvz\");\n            LocalVar arc = b0.localVar(\"arc\", b0.invokeStatic(ARC_CONTAINER));\n            LocalVar rtBean = b0.localVar(\"bean\",\n                    b0.invokeInterface(ARC_CONTAINER_BEAN, arc, Const.of(btBean.getIdentifier())));","sourceCodeStart":174,"sourceCodeEnd":210,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/StartupBuildSteps.java#L174-L210","documentation":"StartupBuildSteps verifies at build time that a non-blocking provider (the vertx module) is present when the application declares non-blocking startup actions (@Startup methods/observers that are non-blocking). If no NonBlockingProvider service is found on the classpath, it fails with this message telling you to import quarkus-vertx or avoid non-blocking startup actions.","triggerScenarios":"Declaring a non-blocking startup action (e.g. @Startup on a bean method returning Uni/CompletionStage) while the quarkus-vertx module is not among the application's dependencies, so META-INF/services for NonBlockingProvider is empty.","commonSituations":"Using reactive startup logic in an app built without the vertx extension; removing quarkus-vertx in a dependency cleanup; templates/projects generated without vertx that later add reactive startup beans.","solutions":["Add the quarkus-vertx dependency to the project (io.quarkus:quarkus-vertx)","Or make the startup action blocking (return void instead of Uni/CompletionStage)","Or remove the non-blocking @Startup method if it is not needed","Verify with mvn dependency:tree that quarkus-vertx is actually resolved (a BOM entry alone does not add it)"],"exampleFix":"// before (pom.xml): no vertx module\n// after:\n<dependency>\n  <groupId>io.quarkus</groupId>\n  <artifactId>quarkus-vertx</artifactId>\n</dependency>","handlingStrategy":"validation","validationCode":"// pom.xml — ensure this dependency exists:\n// io.quarkus:quarkus-vertx\n// or verify no startup method is reactive:\n// @Startup void init() { ... }  // blocking, OK","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add quarkus-vertx whenever reactive (Uni/CompletionStage) startup actions are used","Keep @Startup methods blocking (void) unless vertx is present","Run mvn dependency:tree after dependency cleanups"],"tags":["cdi","startup","vertx","reactive","build-time"],"backgroundTag":"missing-non-blocking-provider","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"}