quarkusio/quarkus · error · RuntimeException

remote-dev can only be used with mutable applications i.e. u

Error message

remote-dev can only be used with mutable applications i.e. using the mutable-jar package type

What it means

IsolatedRemoteDevModeMain.generateApplication() builds a production-style application for remote dev mode and then requires the resulting JAR to be mutable so it can be updated at runtime. If AugmentResult's JAR is not mutable (package type is not mutable-jar), a RuntimeException is thrown explaining remote-dev requires the mutable-jar package type.

Source

Thrown at core/deployment/src/main/java/io/quarkus/deployment/dev/IsolatedRemoteDevModeMain.java:94

            if (opt.isPresent()) {
                client = opt.get();
                break;
            }
        }
        if (client == null) {
            client = new DefaultRemoteDevClient();
        }
        return client;
    }

    private synchronized JarResult generateApplication() {
        ClassLoader old = Thread.currentThread().getContextClassLoader();
        try {
            //ok, we have resolved all the deps
            try {
                AugmentResult start = augmentAction.createProductionApplication();
                if (!start.getJar().mutable()) {
                    throw new RuntimeException(
                            "remote-dev can only be used with mutable applications i.e. " +
                                    "using the mutable-jar package type");
                }
                //now extract the artifacts, to mirror the remote side
                DevModeTask.extractDevModeClasses(start.getJar().getPath().getParent(),
                        curatedApplication.getApplicationModel(), null);
                return start.getJar();
            } catch (Throwable t) {
                deploymentProblem.set(t);
                log.error("Failed to generate Quarkus application", t);
                return null;
            }
        } finally {
            Thread.currentThread().setContextClassLoader(old);
        }
    }

    private RuntimeUpdatesProcessor setupRuntimeCompilation(DevModeContext context, Path applicationRoot)

View on GitHub (pinned to e1c734241f)

Solutions

  1. Set quarkus.package.type=mutable-jar (or quarkus.package.jar.type=mutable-jar in Quarkus 3.15+) in application.properties.
  2. Re-run the remote-dev goal so the regenerated application is mutable.
  3. Verify remote connection settings (quarkus.remote-dev.*), since a fresh augment is done each time.

Example fix

// before (application.properties)
# quarkus.package.type unset (defaults to fast-jar)

// after
quarkus.package.type=mutable-jar
Defensive patterns

Strategy: validation

Validate before calling

// application.properties check before running remote-dev
// quarkus.package.type=mutable-jar

Prevention

When it happens

Trigger: Running ./mvnw quarkus:remote-dev (or gradle quarkusRemoteDev) while quarkus.package.type (or quarkus.package.jar.type in newer versions) is not set to mutable-jar.

Common situations: Using remote development against a container/cloud host without configuring the mutable-jar packaging; default package type (fast-jar/legacy-jar) left in place.

Related errors


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