quarkusio/quarkus · critical · IllegalStateException

Quarkus manual start cannot proceed as warmup did not run

Error message

Quarkus manual start cannot proceed as warmup did not run

What it means

Thrown by Quarkus.manualStart() as IllegalStateException when the manual state is not MANUAL_INITIALIZED, i.e. manualInitialize() never completed successfully (or was never called, or already advanced/failed). manualStart() requires the warmup performed by manualInitialize().

Source

Thrown at core/runtime/src/main/java/io/quarkus/runtime/Quarkus.java:311

     * 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();
                    manualApp.doStop();
                }
            });
            manualApp.doStart(args);
        } catch (RuntimeException e) {
            manualState = MANUAL_FAILURE;
            throw e;
        }
        manualState = MANUAL_STARTED;
    }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Call Quarkus.manualInitialize() to completion before Quarkus.manualStart().
  2. Call each method exactly once, in order, from the same initialization path.
  3. If init already failed, fix that failure instead of forcing start.

Example fix

// before
Quarkus.manualStart(); // warmup never ran
// after
Quarkus.manualInitialize();
Quarkus.manualStart();
Defensive patterns

Strategy: validation

Validate before calling

// enforce order in your own entry point:
public static void bootstrap() { Quarkus.manualInitialize(); Quarkus.manualStart(); }

Try / catch

try { Quarkus.manualStart(); } catch (IllegalStateException e) { log.error("call manualInitialize() first", e); throw e; }

Prevention

When it happens

Trigger: Calling Quarkus.manualStart() without a preceding successful Quarkus.manualInitialize(); calling manualStart() twice (state already past MANUAL_STARTING returns early, but failed/partial init leaves other states); calling start while init is still in progress.

Common situations: Serverless glue code that calls manualStart() in a different code path from manualInitialize(); reordering the two calls during refactoring.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/b15c9df25d427e75. Report an issue: GitHub.