quarkusio/quarkus · critical · IllegalStateException
Quarkus failed to start up
Error message
Quarkus failed to start up
What it means
Thrown by Quarkus.manualStart() as an IllegalStateException when the manual state machine is in MANUAL_FAILURE, meaning a prior bootstrap/initialization step failed so startup cannot proceed. A RuntimeException variant with the bootstrap-failed message is also possible under race conditions inside the lock.
Source
Thrown at core/runtime/src/main/java/io/quarkus/runtime/Quarkus.java:301
} catch (Exception e) {
manualState = MANUAL_FAILURE;
throw new RuntimeException("Quarkus manual initialization failed", e);
}
}
/**
* Manual startup of Quarkus runtime in cases where
* Quarkus does not have control over main() i.e. Lambda or Azure Functions.
*
* This method will call Application.start() and register shutdown hook
* It will fail if Quarkus.manualInitialize() has not been called.
*
*
*/
public static void manualStart() {
int tmpState = manualState;
if (tmpState == MANUAL_FAILURE)
throw new IllegalStateException("Quarkus failed to start up");
if (tmpState >= MANUAL_STARTING)
return;
synchronized (manualLock) {
tmpState = manualState;
if (tmpState == MANUAL_FAILURE)
throw new RuntimeException("Quarkus manual bootstrap failed");
if (tmpState >= MANUAL_STARTING)
return;
if (tmpState != MANUAL_INITIALIZED)
throw new IllegalStateException("Quarkus manual start cannot proceed as warmup did not run");
manualState = MANUAL_STARTING;
}
try {
String[] args = {};
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
ShutdownRecorder.runShutdown();View on GitHub (pinned to e1c734241f)
Solutions
- Ensure manualInitialize() completes successfully before calling manualStart().
- Inspect and fix the exception thrown by the earlier manualInitialize() call.
- Treat MANUAL_FAILURE as terminal: redeploy/recreate the runtime instead of retrying.
Example fix
// before Quarkus.manualInitialize(); // exception swallowed upstream Quarkus.manualStart(); // after Quarkus.manualInitialize(); // let failures propagate Quarkus.manualStart(); // only reached on success
Defensive patterns
Strategy: try-catch
Validate before calling
// ensure init ran successfully before start: Objects.requireNonNull(initResult, "manualInitialize must complete first");
Try / catch
try { Quarkus.manualInitialize(); Quarkus.manualStart(); } catch (RuntimeException e) { log.error("manual lifecycle failed", e); throw e; } Prevention
- Always pair manualInitialize() with manualStart() in the same success path
- Never swallow exceptions from manualInitialize()
- Treat MANUAL_FAILURE as terminal
When it happens
Trigger: Calling Quarkus.manualStart() after manualInitialize() (or an earlier manualStart()) failed and set manualState to MANUAL_FAILURE.
Common situations: Serverless handler code that ignores the exception from manualInitialize() and still calls manualStart() on the next invocation; framework glue code invoking start without checking init success.
Related errors
- The application has not been started
- Quarkus manual start cannot proceed as warmup did not run
- Quarkus initialization error
- All parameters have already been loaded, it is too late to c
- Internal error: An attempt was made to start an application
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/7221a9bb575cd394.
Report an issue: GitHub.