eclipse-vertx/vert.x · error · VertxException

This Java runtime does not support virtual threads

Error message

This Java runtime does not support virtual threads

What it means

Environment capability check during deployment: the verticle's DeploymentOptions request the VIRTUAL_THREAD threading model, but the current Java runtime does not support virtual threads (JDK < 21 or preview disabled). Deployment aborts because worker execution cannot proceed as configured.

Source

Thrown at vertx-core/src/main/java/io/vertx/core/impl/deployment/DefaultDeployment.java:67

        throw new VertxException("Supplied deployable is null", true);
      }
      deployables.add(deployable);
    }
    if (deployables.size() != numberOfInstances) {
      throw new VertxException("Same deployable supplied more than once", true);
    }
    CloseableResource<WorkerPool> workerPool = null;
    ThreadingModel mode = options.getThreadingModel();
    if (mode == null) {
      mode = ThreadingModel.EVENT_LOOP;
    }
    if (mode != ThreadingModel.VIRTUAL_THREAD) {
      if (options.getWorkerPoolName() != null) {
        workerPool = vertx.createSharedWorkerPool(options.getWorkerPoolName(), options.getWorkerPoolSize(), options.getMaxWorkerExecuteTime(), options.getMaxWorkerExecuteTimeUnit());
      }
    } else {
      if (!vertx.isVirtualThreadAvailable()) {
        throw new VertxException("This Java runtime does not support virtual threads", true);
      }
    }
    ArrayList<Deployable> list = new ArrayList<>(deployables);
    return new DefaultDeployment(vertx, options, log, list, identifierProvider.apply(list.get(0)), mode, workerPool, tccl);
  }

  private final VertxImpl vertx;
  private final DeploymentOptions options;
  private final Logger log;
  private final List<Deployable> deployables;
  private final ThreadingModel threading;
  private final CloseableResource<WorkerPool> workerPoolResource;
  private final WorkerPool workerPool;
  private final String identifier;
  private final List<Instance> instances = new CopyOnWriteArrayList<>();
  private final ClassLoader tccl;

  public DefaultDeployment(VertxImpl vertx,

View on GitHub (pinned to fb308bd8c3)

Solutions

  1. Run on JDK 21+ with virtual threads enabled
  2. Fall back to ThreadingModel.WORKER or EVENT_LOOP on older runtimes
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at vertx-core/src/main/java/io/vertx/core/impl/deployment/DefaultDeployment.java:67 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of eclipse-vertx/vert.x@fb308bd8c3 (2026-09-06). Data as JSON: /api/errors/3bb3380641f1c531. Report an issue: GitHub.