# Dev Services Overview

## What Are Dev Services?

Quarkus supports the automatic provisioning of unconfigured services in development and test mode. We refer to this capability as Dev Services. If you include an extension and don’t configure it then Quarkus will automatically start the relevant service (usually using Testcontainers behind the scenes) and wire up your application to use this service.

For a tutorial showing how to get started writing an application with persistence and Dev Services, see Your Second Quarkus Application.

## Using Dev Services

Dev Services are designed to be frictionless, so they will be automatically started any time you include an extension which supports Dev Services, as long as you don’t configure a connection to an external service.

| In order to use most Dev Services you will need a working container environment (remote environments are supported). If you don’t have a container environment, such as Docker or Podman, installed you will need to configure your services normally.

The default startup timeout for Dev Services is 60s, if this is not enough you can increase it with the `quarkus.devservices.timeout` property.

To configure a production service but continue to use Dev Services in development and test modes, use configuration profiles.

For example,

    # configure your datasource
    %prod.quarkus.datasource.db-kind = postgresql
    %prod.quarkus.datasource.username = prod-admin
    %prod.quarkus.datasource.password = super-secret
    %prod.quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/mydatabase

## Disabling Dev Services

All this functionality is part of the Quarkus `deployment` modules, so does not affect the production application in any way. If you want to disable all Dev Services you can use the `quarkus.devservices.enabled=false` config property, although in most cases this is not necessary as simply configuring the service will result in the Dev Service being disabled automatically.

## Compose Dev Services

Quarkus Compose Dev Services allows you to define custom dev services using the Compose specification.

## Platform Dev Services

This section lists all the Dev Services available in the Quarkus Platform.

### AMQP

The AMQP Dev Service will be enabled when the `quarkus-messaging-amqp` extension is present in your application, and the broker address has not been explicitly configured. More information can be found in the AMQP Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.amqp.devservices.enabled` If Dev Services for AMQP has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present. For AMQP, Dev Services starts a broker unless `amqp-host` or `amqp-port` are set or if all the Reactive Messaging AMQP channel are configured with `host` or `port`. Environment variable: `QUARKUS_AMQP_DEVSERVICES_ENABLED` | boolean |
`quarkus.amqp.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_AMQP_DEVSERVICES_PORT` | int |
`quarkus.amqp.devservices.image-name` The image to use. Note that only ActiveMQ Artemis images are supported. Specifically, the image repository must end with `artemiscloud/activemq-artemis-broker`. Check the activemq-artemis-broker on Quay page to find the available versions. Environment variable: `QUARKUS_AMQP_DEVSERVICES_IMAGE_NAME` | string | `quay.io/artemiscloud/activemq-artemis-broker:1.0.25`
`quarkus.amqp.devservices.extra-args` The value of the `AMQ_EXTRA_ARGS` environment variable to pass to the container. For ActiveMQ Artemis Broker ⇐ 1.0.21, set this property to `--no-autotune --mapped --no-fsync --relax-jolokia --http-host 0.0.0.0` Environment variable: `QUARKUS_AMQP_DEVSERVICES_EXTRA_ARGS` | string | `--no-autotune --mapped --no-fsync --relax-jolokia`
`quarkus.amqp.devservices.shared` Indicates if the AMQP broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for AMQP starts a new container. The discovery uses the `quarkus-dev-service-amqp` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_AMQP_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.amqp.devservices.service-name` The value of the `quarkus-dev-service-aqmp` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for AMQP looks for a container with the `quarkus-dev-service-amqp` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-amqp` label set to the specified value. This property is used when you need multiple shared AMQP brokers. Environment variable: `QUARKUS_AMQP_DEVSERVICES_SERVICE_NAME` | string | `amqp`
`quarkus.amqp.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_AMQP_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |

### Apicurio Registry

The Apicurio Dev Service will be enabled when the `quarkus-apicurio-registry-avro` extension is present in your application, and it’s address has not been explicitly configured. More information can be found in the Apicurio Registry Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.apicurio-registry.devservices.enabled` If Dev Services for Apicurio Registry has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present. For Apicurio Registry, Dev Services starts a registry unless `mp.messaging.connector.smallrye-kafka.apicurio.registry.url` or `mp.messaging.connector.smallrye-kafka.schema.registry.url` is set. Environment variable: `QUARKUS_APICURIO_REGISTRY_DEVSERVICES_ENABLED` | boolean |
`quarkus.apicurio-registry.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_APICURIO_REGISTRY_DEVSERVICES_PORT` | int |
`quarkus.apicurio-registry.devservices.image-name` The Apicurio Registry image to use. Note that only Apicurio Registry 2.x images are supported. Specifically, the image repository must end with `apicurio/apicurio-registry-mem`. Environment variable: `QUARKUS_APICURIO_REGISTRY_DEVSERVICES_IMAGE_NAME` | string | `quay.io/apicurio/apicurio-registry-mem:2.4.2.Final`
`quarkus.apicurio-registry.devservices.shared` Indicates if the Apicurio Registry instance managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Apicurio Registry starts a new container. The discovery uses the `quarkus-dev-service-apicurio-registry` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_APICURIO_REGISTRY_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.apicurio-registry.devservices.service-name` The value of the `quarkus-dev-service-apicurio-registry` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for Apicurio Registry looks for a container with the `quarkus-dev-service-apicurio-registry` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-apicurio-registry` label set to the specified value. This property is used when you need multiple shared Apicurio Registry instances. Environment variable: `QUARKUS_APICURIO_REGISTRY_DEVSERVICES_SERVICE_NAME` | string | `apicurio-registry`
`quarkus.apicurio-registry.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_APICURIO_REGISTRY_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |

### Databases

The database Dev Services will be enabled when a reactive or JDBC datasource extension is present in the application, and the database URL has not been configured. More information can be found in the Databases Dev Services Guide.

Quarkus provides Dev Services for all databases it supports. Most of these are run in a container, except H2 and Derby which are run in-process. Dev Services are supported for both JDBC and reactive drivers.

Those relational databases that are running in a container are started using Testcontainers and support "reusable instances"; this implies that if you add the property `testcontainers.reuse.enable=true` in your Testcontainers configuration file, a property file named `.testcontainers.properties` in your user home, then the databases will not be stopped aggressively after each run, and can be reused.

N.B. if you opt in for this feature, Quarkus will not reset the state of the database between runs unless you explicitly configure it to.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.datasource.devservices.enabled` `quarkus.datasource."datasource-name".devservices.enabled` Whether this Dev Service should start with the application in dev mode or tests. Dev Services are enabled by default unless connection configuration (e.g. the JDBC URL or reactive client URL) is set explicitly. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_ENABLED` | boolean |
`quarkus.datasource.devservices.image-name` `quarkus.datasource."datasource-name".devservices.image-name` The container image name for container-based Dev Service providers. This has no effect if the provider is not a container-based database, such as H2 or Derby. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_IMAGE_NAME` | string |
`quarkus.datasource.devservices.container-env."environment-variable-name"` `quarkus.datasource."datasource-name".devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |
`quarkus.datasource.devservices.container-properties."property-key"` `quarkus.datasource."datasource-name".devservices.container-properties."property-key"` Generic properties that are passed for additional container configuration. Properties defined here are database-specific and are interpreted specifically in each database dev service implementation. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_CONTAINER_PROPERTIES__PROPERTY_KEY_` | Map<String,String> |
`quarkus.datasource.devservices.properties."property-key"` `quarkus.datasource."datasource-name".devservices.properties."property-key"` Generic properties that are added to the database connection URL. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_PROPERTIES__PROPERTY_KEY_` | Map<String,String> |
`quarkus.datasource.devservices.port` `quarkus.datasource."datasource-name".devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_PORT` | int |
`quarkus.datasource.devservices.command` `quarkus.datasource."datasource-name".devservices.command` The container start command to use for container-based Dev Service providers. This has no effect if the provider is not a container-based database, such as H2 or Derby. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_COMMAND` | string |
`quarkus.datasource.devservices.db-name` `quarkus.datasource."datasource-name".devservices.db-name` The database name to use if this Dev Service supports overriding it. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_DB_NAME` | string |
`quarkus.datasource.devservices.username` `quarkus.datasource."datasource-name".devservices.username` The username to use if this Dev Service supports overriding it. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_USERNAME` | string |
`quarkus.datasource.devservices.password` `quarkus.datasource."datasource-name".devservices.password` The password to use if this Dev Service supports overriding it. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_PASSWORD` | string |
`quarkus.datasource.devservices.init-script-path` `quarkus.datasource."datasource-name".devservices.init-script-path` The paths to SQL scripts to be loaded from the classpath and applied to the Dev Service database. This has no effect if the provider is not a container-based database, such as H2 or Derby. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_INIT_SCRIPT_PATH` | list of string |
`quarkus.datasource.devservices.init-privileged-script-path` `quarkus.datasource."datasource-name".devservices.init-privileged-script-path` The paths to SQL scripts to be loaded from the classpath and applied to the Dev Service database using the SYS privileged user. Not all databases provide a privileged user. In these cases, the property is ignored. This has no effect if the provider is not a container-based database, such as H2 or Derby. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_INIT_PRIVILEGED_SCRIPT_PATH` | list of string |
`quarkus.datasource.devservices.volumes."host-path"` `quarkus.datasource."datasource-name".devservices.volumes."host-path"` The volumes to be mapped to the container. The map key corresponds to the host location; the map value is the container location. If the host location starts with "classpath:", the mapping loads the resource from the classpath with read-only permission. When using a file system location, the volume will be generated with read-write permission, potentially leading to data loss or modification in your file system. This has no effect if the provider is not a container-based database, such as H2 or Derby. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_VOLUMES__HOST_PATH_` | Map<String,String> |
`quarkus.datasource.devservices.reuse` `quarkus.datasource."datasource-name".devservices.reuse` Whether to keep Dev Service containers running after a dev mode session or test suite execution to reuse them in the next dev mode session or test suite execution. Within a dev mode session or test suite execution, Quarkus will always reuse Dev Services as long as their configuration (username, password, environment, port bindings, …​) did not change. This feature is specifically about keeping containers running when Quarkus is not running to reuse them across runs.
| This feature needs to be enabled explicitly in `testcontainers.properties`, may require changes to how you configure data initialization in dev mode and tests, and may leave containers running indefinitely, forcing you to stop and remove them manually. See this section of the documentation for more information.
This configuration property is set to `true` by default, so it is mostly useful to disable reuse, if you enabled it in `testcontainers.properties` but only want to use it for some of your Quarkus applications or datasources. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_REUSE` | boolean | `true`
`quarkus.datasource.devservices.show-logs` `quarkus.datasource."datasource-name".devservices.show-logs` Whether the logs should be consumed by the JBoss logger. This has no effect if the provider is not a container-based database, such as H2 or Derby. Environment variable: `QUARKUS_DATASOURCE_DEVSERVICES_SHOW_LOGS` | boolean | `false`

### Kafka

The Kafka Dev Service will be enabled when the `quarkus-kafka-client` extension is present in your application, and the broker address has not been explicitly configured. More information can be found in the Kafka Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.kafka.devservices.enabled` If Dev Services for Kafka has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present. For Kafka, Dev Services starts a broker unless `kafka.bootstrap.servers` is set or if all the Reactive Messaging Kafka channel are configured with a `bootstrap.servers`. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_ENABLED` | boolean |
`quarkus.kafka.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_PORT` | int |
`quarkus.kafka.devservices.provider` Kafka dev service container type. Redpanda, Strimzi and kafka-native container providers are supported. Default is redpanda. For Redpanda: See https://docs.redpanda.com/current/get-started/quick-start/ and https://hub.docker.com/r/redpandadata/redpanda For Strimzi: See https://github.com/strimzi/test-container and https://quay.io/repository/strimzi-test-container/test-container For Kafka Native: See https://github.com/ozangunalp/kafka-native and https://quay.io/repository/ogunalp/kafka-native Note that Strimzi and Kafka Native images are launched in Kraft mode. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_PROVIDER` | `redpanda`, `strimzi`, `kafka-native` | `redpanda`
`quarkus.kafka.devservices.image-name` The Kafka container image to use. Dependent on the provider. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_IMAGE_NAME` | string |
`quarkus.kafka.devservices.shared` Indicates if the Kafka broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Kafka starts a new container. The discovery uses the `quarkus-dev-service-kafka` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.kafka.devservices.service-name` The value of the `quarkus-dev-service-kafka` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for Kafka looks for a container with the `quarkus-dev-service-kafka` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-kafka` label set to the specified value. This property is used when you need multiple shared Kafka brokers. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_SERVICE_NAME` | string | `kafka`
`quarkus.kafka.devservices.topic-partitions."topic-name"` The topic-partition pairs to create in the Dev Services Kafka broker. After the broker is started, given topics with partitions are created, skipping already existing topics. For example, `quarkus.kafka.devservices.topic-partitions.my-topic=2` will create a topic named `test` with 2 partitions. The topic creation will not try to re-partition existing topics with different number of partitions. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_TOPIC_PARTITIONS__TOPIC_NAME_` | Map<String,Integer> |
`quarkus.kafka.devservices.topic-partitions-timeout` Timeout for admin client calls used in topic creation. Defaults to 2 seconds. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_TOPIC_PARTITIONS_TIMEOUT` | Duration | `2S`
`quarkus.kafka.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |
`quarkus.kafka.devservices.redpanda.transaction-enabled` Enables transaction support. Also enables the producer idempotence. Find more info about Redpanda transaction support on https://vectorized.io/blog/fast-transactions/. Notice that KIP-447 (producer scalability for exactly once semantic) and KIP-360 (Improve reliability of idempotent/transactional producer) are not supported. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_REDPANDA_TRANSACTION_ENABLED` | boolean | `true`
`quarkus.kafka.devservices.redpanda.proxy-port` Port to access the Redpanda HTTP Proxy (pandaproxy). If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_KAFKA_DEVSERVICES_REDPANDA_PROXY_PORT` | int |

| About the Duration format To write duration values, use the standard `java.time.Duration` format. See the Duration#parse() Java API documentation for more information. You can also use a simplified format, starting with a number: If the value is only a number, it represents time in seconds. If the value is a number followed by `ms`, it represents time in milliseconds. In other cases, the simplified format is translated to the `java.time.Duration` format for parsing: If the value is a number followed by `h`, `m`, or `s`, it is prefixed with `PT`. If the value is a number followed by `d`, it is prefixed with `P`.

### Keycloak

The Keycloak Dev Service will be enabled when the `quarkus-oidc` extension is present in your application, and the server address has not been explicitly configured. More information can be found in the OIDC Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.keycloak.devservices.enabled` Flag to enable (default) or disable Dev Services. When enabled, Dev Services for Keycloak automatically configures and starts Keycloak in Dev or Test mode, and when Docker is running. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_ENABLED` | boolean | `true`
`quarkus.keycloak.devservices.image-name` The container image name for Dev Services providers. Defaults to a Quarkus-based Keycloak image. For a WildFly-based distribution, use an image like `quay.io/keycloak/keycloak:19.0.3-legacy`. Keycloak Quarkus and WildFly images are initialized differently. Dev Services for Keycloak will assume it is a Keycloak Quarkus image unless the image version ends with `-legacy`. Override with `quarkus.keycloak.devservices.keycloak-x-image`. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_IMAGE_NAME` | string | `quay.io/keycloak/keycloak:26.3.0`
`quarkus.keycloak.devservices.keycloak-x-image` Indicates if a Keycloak-X image is used. By default, the image is identified by `keycloak-x` in the image name. For custom images, override with `quarkus.keycloak.devservices.keycloak-x-image`. You do not need to set this property if the default check works. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_KEYCLOAK_X_IMAGE` | boolean |
`quarkus.keycloak.devservices.shared` Determines if the Keycloak container is shared. When shared, Quarkus uses label-based service discovery to find and reuse a running Keycloak container, so a second one is not started. Otherwise, if a matching container is not is found, a new container is started. The service discovery uses the `quarkus-dev-service-label` label, whose value is set by the `service-name` property. Container sharing is available only in dev mode. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.keycloak.devservices.service-name` The value of the `quarkus-dev-service-keycloak` label for identifying the Keycloak container. Used in shared mode to locate an existing container with this label. If not found, a new container is initialized with this label. Applicable only in dev mode. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_SERVICE_NAME` | string | `keycloak`
`quarkus.keycloak.devservices.realm-path` A comma-separated list of class or file system paths to Keycloak realm files. This list is used to initialize Keycloak. The first value in this list is used to initialize default tenant connection properties. To learn more about Keycloak realm files, consult the Importing and Exporting Keycloak Realms documentation. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_REALM_PATH` | list of string |
`quarkus.keycloak.devservices.resource-aliases."alias-name"` Aliases to additional class or file system resources that are used to initialize Keycloak. Each map entry represents a mapping between an alias and a class or file system resource path. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_RESOURCE_ALIASES__ALIAS_NAME_` | Map<String,String> |
`quarkus.keycloak.devservices.resource-mappings."resource-name"` Additional class or file system resources that are used to initialize Keycloak. Each map entry represents a mapping between a class or file system resource path alias and the Keycloak container location. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_RESOURCE_MAPPINGS__RESOURCE_NAME_` | Map<String,String> |
`quarkus.keycloak.devservices.java-opts` The `JAVA_OPTS` passed to the keycloak JVM Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_JAVA_OPTS` | string |
`quarkus.keycloak.devservices.show-logs` Show Keycloak log messages with a "Keycloak:" prefix. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_SHOW_LOGS` | boolean | `false`
`quarkus.keycloak.devservices.start-command` Keycloak start command. Use this property to experiment with Keycloak start options, see `https://www.keycloak.org/server/all-config`. Note, it is ignored when loading legacy Keycloak WildFly images. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_START_COMMAND` | string |
`quarkus.keycloak.devservices.features` Keycloak features. Use this property to enable one or more experimental Keycloak features. Note, if you also have to customize a Keycloak `start-command()`, you can use a `--features` option as part of the start command sequence, instead of configuring this property. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_FEATURES` | list of string |
`quarkus.keycloak.devservices.realm-name` The name of the Keycloak realm. This property is used to create the realm if the realm file pointed to by the `realm-path` property does not exist. The default value is `quarkus` in this case. It is recommended to always set this property so that Dev Services for Keycloak can identify the realm name without parsing the realm file. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_REALM_NAME` | string |
`quarkus.keycloak.devservices.create-realm` Specifies whether to create the Keycloak realm when no realm file is found at the `realm-path`. Set to `false` if the realm is to be created using either the Keycloak Administration Console or the Keycloak Admin API provided by `io.quarkus.test.common.QuarkusTestResourceLifecycleManager`. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_CREATE_REALM` | boolean | `true`
`quarkus.keycloak.devservices.create-client` Specifies whether to create the default client id `quarkus-app` with a secret `secret` and register them if the `create-realm` property is set to true. For OIDC extension configuration properties `quarkus.oidc.client.id` and `quarkus.oidc.credentials.secret` will be configured. For OIDC Client extension configuration properties `quarkus.oidc-client.client.id` and `quarkus.oidc-client.credentials.secret` will be configured. Set to `false` if clients have to be created using either the Keycloak Administration Console or the Keycloak Admin API provided by `io.quarkus.test.common.QuarkusTestResourceLifecycleManager` or registered dynamically. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_CREATE_CLIENT` | boolean | `true`
`quarkus.keycloak.devservices.start-with-disabled-tenant` Specifies whether to start the container even if the default OIDC tenant is disabled. Setting this property to true may be necessary in a multi-tenant OIDC setup, especially when OIDC tenants are created dynamically. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_START_WITH_DISABLED_TENANT` | boolean | `false`
`quarkus.keycloak.devservices.users."users"` A map of Keycloak usernames to passwords. If empty, default users `alice` and `bob` are created with their names as passwords. This map is used for user creation when no realm file is found at the `realm-path`. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_USERS__USERS_` | Map<String,String> |
`quarkus.keycloak.devservices.roles."role-name"` A map of roles for Keycloak users. If empty, default roles are assigned: `alice` receives `admin` and `user` roles, while other users receive `user` role. This map is used for role creation when no realm file is found at the `realm-path`. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_ROLES__ROLE_NAME_` | Map<String,List<String>> |
`quarkus.keycloak.devservices.port` The specific port for the dev service to listen on. If not specified, a random port is selected. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_PORT` | int |
`quarkus.keycloak.devservices.container-env."environment-variable-name"` Environment variables to be passed to the container. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |
`quarkus.keycloak.devservices.container-memory-limit` Memory limit for Keycloak container, up to `Long.MAX_VALUE` bytes. If not specified, 1250MiB is the default memory limit. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_CONTAINER_MEMORY_LIMIT` | MemorySize | `1250M`
`quarkus.keycloak.devservices.web-client-timeout` The WebClient timeout. Use this property to configure how long an HTTP client used by OIDC dev service admin client will wait for a response from OpenId Connect Provider when acquiring admin token and creating realm. Environment variable: `QUARKUS_KEYCLOAK_DEVSERVICES_WEB_CLIENT_TIMEOUT` | Duration | `4S`

| About the Duration format To write duration values, use the standard `java.time.Duration` format. See the Duration#parse() Java API documentation for more information. You can also use a simplified format, starting with a number: If the value is only a number, it represents time in seconds. If the value is a number followed by `ms`, it represents time in milliseconds. In other cases, the simplified format is translated to the `java.time.Duration` format for parsing: If the value is a number followed by `h`, `m`, or `s`, it is prefixed with `PT`. If the value is a number followed by `d`, it is prefixed with `P`.

| About the MemorySize format A size configuration option recognizes strings in this format (shown as a regular expression): `[0-9]+[KkMmGgTtPpEeZzYy]?`. If no suffix is given, assume bytes.

### Kubernetes

The Kubernetes Dev Service will be enabled when the `kubernetes-client` extension is present in your application, and the API server address has not been explicitly configured. More information can be found in the Kubernetes Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.kubernetes-client.devservices.enabled` If Dev Services for Kubernetes should be used. (default to true) If this is true and kubernetes client is not configured then a kubernetes cluster will be started and will be used. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_ENABLED` | boolean | `true`
`quarkus.kubernetes-client.devservices.api-version` The kubernetes api server version to use. If not set, Dev Services for Kubernetes will use the latest supported version of the given flavor. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_API_VERSION` | string |
`quarkus.kubernetes-client.devservices.image-name` The kubernetes image to use. If not set, Dev Services for Kubernetes will use default image for the specified `api-version()` for the given `flavor()`. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_IMAGE_NAME` | string |
`quarkus.kubernetes-client.devservices.flavor` The flavor to use (kind, k3s or api-only). If not set, Dev Services for Kubernetes will set it to: api-only. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_FLAVOR` | `kind`, `k3s`, `api-only` |
`quarkus.kubernetes-client.devservices.override-kubeconfig` By default, if a kubeconfig is found, Dev Services for Kubernetes will not start. Set this to true to override the kubeconfig config. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_OVERRIDE_KUBECONFIG` | boolean | `false`
`quarkus.kubernetes-client.devservices.manifests` A list of manifest file paths that should be applied to the Kubernetes cluster Dev Service on startup. If not set, no manifests are applied. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_MANIFESTS` | list of string |
`quarkus.kubernetes-client.devservices.shared` Indicates if the Kubernetes cluster managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Kubernetes starts a new container. The discovery uses the `quarkus-dev-service-kubernetes` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.kubernetes-client.devservices.service-name` The value of the `quarkus-dev-service-kubernetes` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for Kubernetes looks for a container with the `quarkus-dev-service-kubernetes` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-kubernetes` label set to the specified value. This property is used when you need multiple shared Kubernetes clusters. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_SERVICE_NAME` | string | `kubernetes`
`quarkus.kubernetes-client.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |

### MongoDB

The MongoDB Dev Service will be enabled when the `quarkus-mongodb-client` extension is present in your application, and the server address has not been explicitly configured. More information can be found in the MongoDB Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.mongodb.devservices.enabled` If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode. Environment variable: `QUARKUS_MONGODB_DEVSERVICES_ENABLED` | boolean |
`quarkus.mongodb.devservices.image-name` The container image name to use, for container based DevServices providers. Environment variable: `QUARKUS_MONGODB_DEVSERVICES_IMAGE_NAME` | string |
`quarkus.mongodb.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_MONGODB_DEVSERVICES_PORT` | int |
`quarkus.mongodb.devservices.properties."property-key"` Generic properties that are added to the connection URL. Environment variable: `QUARKUS_MONGODB_DEVSERVICES_PROPERTIES__PROPERTY_KEY_` | Map<String,String> |
`quarkus.mongodb.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_MONGODB_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |
`quarkus.mongodb.devservices.shared` Indicates if the MongoDB server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for MongoDB starts a new container. The discovery uses the `quarkus-dev-service-mongodb` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_MONGODB_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.mongodb.devservices.service-name` The value of the `quarkus-dev-service-mongodb` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for MongoDB looks for a container with the `quarkus-dev-service-mongodb` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the `quarkus-dev-service-mongodb` label set to the specified value. Environment variable: `QUARKUS_MONGODB_DEVSERVICES_SERVICE_NAME` | string | `mongodb`

### RabbitMQ

The RabbitMQ Dev Service will be enabled when the `quarkus-messaging-rabbitmq` extension is present in your application, and the broker address has not been explicitly configured. More information can be found in the RabbitMQ Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.rabbitmq.devservices.enabled` If Dev Services for RabbitMQ has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present. For RabbitMQ, Dev Services starts a broker unless `rabbitmq-host` or `rabbitmq-port` are set or if all the Reactive Messaging RabbitMQ channel are configured with `host` or `port`. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_ENABLED` | boolean |
`quarkus.rabbitmq.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_PORT` | int |
`quarkus.rabbitmq.devservices.http-port` Optional fixed port for the RabbitMQ management plugin. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_HTTP_PORT` | int |
`quarkus.rabbitmq.devservices.image-name` The image to use. Note that only official RabbitMQ images are supported. Specifically, the image repository must end with `rabbitmq`. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_IMAGE_NAME` | string | `rabbitmq:3.12-management`
`quarkus.rabbitmq.devservices.shared` Indicates if the RabbitMQ broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for RabbitMQ starts a new container. The discovery uses the `quarkus-dev-service-rabbitmq` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.rabbitmq.devservices.service-name` The value of the `quarkus-dev-service-rabbitmq` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for RabbitMQ looks for a container with the `quarkus-dev-service-rabbitmq` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-rabbitmq` label set to the specified value. This property is used when you need multiple shared RabbitMQ brokers. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_SERVICE_NAME` | string | `rabbitmq`
`quarkus.rabbitmq.devservices.exchanges."exchange-name".type` Type of exchange: direct, topic, headers, fanout, etc. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__TYPE` | string | `direct`
`quarkus.rabbitmq.devservices.exchanges."exchange-name".auto-delete` Should the exchange be deleted when all queues are finished using it? Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__AUTO_DELETE` | boolean | `false`
`quarkus.rabbitmq.devservices.exchanges."exchange-name".durable` Should the exchange remain after restarts? Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__DURABLE` | boolean | `false`
`quarkus.rabbitmq.devservices.exchanges."exchange-name".vhost` What virtual host should the exchange be associated with? Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__VHOST` | string | `/`
`quarkus.rabbitmq.devservices.exchanges."exchange-name".arguments."argument-name"` Extra arguments for the exchange definition. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_EXCHANGES__EXCHANGE_NAME__ARGUMENTS__ARGUMENT_NAME_` | Map<String,String> |
`quarkus.rabbitmq.devservices.queues."queue-name".auto-delete` Should the queue be deleted when all consumers are finished using it? Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__AUTO_DELETE` | boolean | `false`
`quarkus.rabbitmq.devservices.queues."queue-name".durable` Should the queue remain after restarts? Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__DURABLE` | boolean | `false`
`quarkus.rabbitmq.devservices.queues."queue-name".vhost` What virtual host should the queue be associated with? Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__VHOST` | string | `/`
`quarkus.rabbitmq.devservices.queues."queue-name".arguments."argument-name"` Extra arguments for the queue definition. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_QUEUES__QUEUE_NAME__ARGUMENTS__ARGUMENT_NAME_` | Map<String,String> |
`quarkus.rabbitmq.devservices.bindings."binding-name".source` Source exchange to bind to. Defaults to name of binding instance. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__SOURCE` | string |
`quarkus.rabbitmq.devservices.bindings."binding-name".routing-key` Routing key specification for the source exchange. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__ROUTING_KEY` | string | `#`
`quarkus.rabbitmq.devservices.bindings."binding-name".destination` Destination exchange or queue to bind to. Defaults to name of binding instance. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__DESTINATION` | string |
`quarkus.rabbitmq.devservices.bindings."binding-name".destination-type` Destination type for binding: queue, exchange, etc. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__DESTINATION_TYPE` | string | `queue`
`quarkus.rabbitmq.devservices.bindings."binding-name".vhost` What virtual host should the binding be associated with? Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__VHOST` | string | `/`
`quarkus.rabbitmq.devservices.bindings."binding-name".arguments."argument-name"` Extra arguments for the binding definition. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_BINDINGS__BINDING_NAME__ARGUMENTS__ARGUMENT_NAME_` | Map<String,String> |
`quarkus.rabbitmq.devservices.vhosts` Virtual hosts that should be predefined after starting the RabbitMQ broker. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_VHOSTS` | list of string |
`quarkus.rabbitmq.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_RABBITMQ_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |

### Pulsar

The Pulsar Dev Service will be enabled when the `quarkus-messaging-pulsar` extension is present in your application, and the broker address has not been explicitly configured. More information can be found in the Pulsar Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.pulsar.devservices.enabled` If Dev Services for Pulsar has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present. For Pulsar, Dev Services starts a broker unless `pulsar.client.serviceUrl` is set or if all the Reactive Messaging Pulsar channel are configured with `serviceUrl`. Environment variable: `QUARKUS_PULSAR_DEVSERVICES_ENABLED` | boolean |
`quarkus.pulsar.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_PULSAR_DEVSERVICES_PORT` | int |
`quarkus.pulsar.devservices.image-name` The image to use. Note that only Apache Pulsar images are supported. Specifically, the image repository must end with `apachepulsar/pulsar`. Check https://hub.docker.com/r/apachepulsar/pulsar to find the available versions. Environment variable: `QUARKUS_PULSAR_DEVSERVICES_IMAGE_NAME` | string | `apachepulsar/pulsar:3.2.4`
`quarkus.pulsar.devservices.shared` Indicates if the Pulsar broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Pulsar starts a new container. The discovery uses the `quarkus-dev-service-pulsar` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_PULSAR_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.pulsar.devservices.service-name` The value of the `quarkus-dev-service-pulsar` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for Pulsar looks for a container with the `quarkus-dev-service-pulsar` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-pulsar` label set to the specified value. This property is used when you need multiple shared Pulsar brokers. Environment variable: `QUARKUS_PULSAR_DEVSERVICES_SERVICE_NAME` | string | `pulsar`
`quarkus.pulsar.devservices.broker-config."environment-variable-name"` Broker config to set on the Pulsar instance Environment variable: `QUARKUS_PULSAR_DEVSERVICES_BROKER_CONFIG__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |

### Redis

The Redis Dev Service will be enabled when the `quarkus-redis-client` extension is present in your application, and the server address has not been explicitly configured. More information can be found in the Redis Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.redis.devservices.enabled` If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running. Environment variable: `QUARKUS_REDIS_DEVSERVICES_ENABLED` | boolean | `true`
`quarkus.redis.devservices.image-name` The container image name to use, for container based DevServices providers. If you want to use Redis Stack modules (bloom, graph, search…​), use: `redis/redis-stack:latest`. Environment variable: `QUARKUS_REDIS_DEVSERVICES_IMAGE_NAME` | string |
`quarkus.redis.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_REDIS_DEVSERVICES_PORT` | int |
`quarkus.redis.devservices.shared` Indicates if the Redis server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Redis starts a new container. The discovery uses the `quarkus-dev-service-redis` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_REDIS_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.redis.devservices.service-name` The value of the `quarkus-dev-service-redis` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for Redis looks for a container with the `quarkus-dev-service-redis` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-redis` label set to the specified value. This property is used when you need multiple shared Redis servers. Environment variable: `QUARKUS_REDIS_DEVSERVICES_SERVICE_NAME` | string | `redis`
`quarkus.redis.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_REDIS_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |

### Vault

The Vault Dev Service will be enabled when the `quarkus-vault` extension is present in your application, and the server address has not been explicitly configured. More information can be found in the Vault Guide.

### Infinispan

The Infinispan Dev Service will be enabled when the `quarkus-infinispan-client` extension is present in your application, and the server address has not been explicitly configured. More information can be found in the Infinispan Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.infinispan-client.devservices.enabled` If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_ENABLED` | boolean | `true`
`quarkus.infinispan-client.devservices.create-default-client` When the configuration is empty, an Infinispan default client is automatically created to connect to the running dev service. However, there are scenarios where creating this client is unnecessary, yet we still need to spin up an Infinispan Server. In such cases, this property serves to determine whether the client should be created by default or not by the extension. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CREATE_DEFAULT_CLIENT` | boolean | `true`
`quarkus.infinispan-client.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_PORT` | int |
`quarkus.infinispan-client.devservices.shared` Indicates if the Infinispan server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Infinispan starts a new container. The discovery uses the `quarkus-dev-service-infinispan` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.infinispan-client.devservices.service-name` The value of the `quarkus-dev-service-infinispan` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for Infinispan looks for a container with the `quarkus-dev-service-infinispan` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the `quarkus-dev-service-infinispan` label set to the specified value. This property is used when you need multiple shared Infinispan servers. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SERVICE_NAME` | string | `infinispan`
`quarkus.infinispan-client.devservices.image-name` The image to use. Note that only official Infinispan images are supported. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_IMAGE_NAME` | string |
`quarkus.infinispan-client.devservices.artifacts` List of the artifacts to automatically download and add to the Infinispan server libraries. For example a Maven coordinate (org.postgresql:postgresql:42.3.1) or a dependency location url. If an invalid value is passed, the Infinispan server will throw an error when trying to start. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_ARTIFACTS` | list of string |
`quarkus.infinispan-client.devservices.site` Add a site name to start the Infinispan Server Container with Cross Site Replication enabled (ex. lon). Cross Site Replication is the capability to connect two separate Infinispan Server Clusters that might run in different Data Centers, and configure backup caches to copy the data across the clusters with active-active or active-passive replication. See more about Cross Site Replication in the Infinispan Documentation https://infinispan.org/docs/stable/titles/xsite/xsite.html Configure `mcast-port` to avoid forming a cluster with any other running Infinispan Server container. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_SITE` | string |
`quarkus.infinispan-client.devservices.mcast-port` If you are running an Infinispan Server already in docker, if the containers use the same mcastPort they will form a cluster. Set a different mcastPort to create a separate cluster in Docker (e. 46656). A common use case in a local Docker development mode, is the need of having two different Infinispan Clusters with Cross Site Replication enabled. see https://github.com/infinispan/infinispan-simple-tutorials/blob/main/infinispan-remote/cross-site-replication/docker-compose/ Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_MCAST_PORT` | int |
`quarkus.infinispan-client.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |
`quarkus.infinispan-client.devservices.config-files` Infinispan Server configuration chunks to be passed to the container. Environment variable: `QUARKUS_INFINISPAN_CLIENT_DEVSERVICES_CONFIG_FILES` | list of string |

### Elasticsearch

The Elasticsearch Dev Service will be enabled when one of the Elasticsearch based extensions (Elasticsearch client or Hibernate Search ORM Elasticsearch) is present in your application, and the server address has not been explicitly configured. More information can be found in the Elasticsearch Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
`quarkus.elasticsearch.devservices.enabled` Whether this Dev Service should start with the application in dev mode or tests. Dev Services are enabled by default unless connection configuration (e.g. `quarkus.elasticsearch.hosts`) is set explicitly. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_ENABLED` | boolean |
`quarkus.elasticsearch.devservices.port` Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_PORT` | int |
`quarkus.elasticsearch.devservices.distribution` The Elasticsearch distribution to use. Defaults to a distribution inferred from the explicitly configured `image-name` (if any), or by default to the distribution configured in depending extensions (e.g. Hibernate Search), or by default to `elastic`. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_DISTRIBUTION` | `elastic`, `opensearch` |
`quarkus.elasticsearch.devservices.image-name` The Elasticsearch container image to use. Defaults depend on the configured `distribution`: For the `elastic` distribution: docker.io/elastic/elasticsearch:9.1.0 For the `opensearch` distribution: docker.io/opensearchproject/opensearch:3.1.0 Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_IMAGE_NAME` | string |
`quarkus.elasticsearch.devservices.java-opts` The value for the ES_JAVA_OPTS env variable. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_JAVA_OPTS` | string | `-Xms512m -Xmx1g`
`quarkus.elasticsearch.devservices.shared` Whether the Elasticsearch server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Elasticsearch starts a new container. The discovery uses the `quarkus-dev-service-elasticsearch` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_SHARED` | boolean | `true`
`quarkus.elasticsearch.devservices.service-name` The value of the `quarkus-dev-service-elasticsearch` label attached to the started container. This property is used when `shared` is set to `true`. In this case, before starting a container, Dev Services for Elasticsearch looks for a container with the `quarkus-dev-service-elasticsearch` label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the `quarkus-dev-service-elasticsearch` label set to the specified value. This property is used when you need multiple shared Elasticsearch servers. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_SERVICE_NAME` | string | `elasticsearch`
`quarkus.elasticsearch.devservices.container-env."environment-variable-name"` Environment variables that are passed to the container. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_` | Map<String,String> |
`quarkus.elasticsearch.devservices.reuse` Whether to keep Dev Service containers running after a dev mode session or test suite execution to reuse them in the next dev mode session or test suite execution. Within a dev mode session or test suite execution, Quarkus will always reuse Dev Services as long as their configuration (username, password, environment, port bindings, …​) did not change. This feature is specifically about keeping containers running when Quarkus is not running to reuse them across runs.
| This feature needs to be enabled explicitly in `testcontainers.properties`, may require changes to how you configure data initialization in dev mode and tests, and may leave containers running indefinitely, forcing you to stop and remove them manually. See this section of the documentation for more information.
This configuration property is set to `true` by default, so it is mostly useful to disable reuse, if you enabled it in `testcontainers.properties` but only want to use it for some of your Quarkus applications. Environment variable: `QUARKUS_ELASTICSEARCH_DEVSERVICES_REUSE` | boolean | `true`

### Observability

The Observability Dev Services will be enabled when the `quarkus-observability-devservices` extension is present in your application, and there is at least one dev resource on the classpath. More information can be found in the Observability Dev Services Guide.

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property | Type | Default
--- | --- | ---
Grafana LGTM configuration | Type | Default
`quarkus.observability.lgtm.enabled` If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a containers when running in Dev or Test mode and when Docker is running. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_ENABLED` | boolean | `true`
`quarkus.observability.lgtm.shared` Indicates if the container managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. The discovery uses the `quarkus-dev-service-label` label. The value is configured using the `service-name` property. Container sharing is only used in dev mode. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_SHARED` | boolean | `true`
`quarkus.observability.lgtm.service-name` The value of the `quarkus-dev-service` label attached to the started container. This property is used when `shared` is set to `true`. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_SERVICE_NAME` | string | `lgtm`
`quarkus.observability.lgtm.username` The username. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_USERNAME` | string | `admin`
`quarkus.observability.lgtm.password` The password. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_PASSWORD` | string | `admin`
`quarkus.observability.lgtm.grafana-port` The port of the Grafana container. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_GRAFANA_PORT` | int | `3000`
`quarkus.observability.lgtm.timeout` The timeout. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_TIMEOUT` | Duration | `PT3M`
`quarkus.observability.lgtm.image-name` The name of the Grafana LGTM Docker image. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_IMAGE_NAME` | string | `docker.io/grafana/otel-lgtm:0.11.0`
`quarkus.observability.lgtm.network-aliases` The Docker network aliases. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_NETWORK_ALIASES` | list of string | `lgtm`, `lgtm.testcontainer.docker`
`quarkus.observability.lgtm.label` The label of the container. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_LABEL` | string | `quarkus-dev-service-lgtm`
`quarkus.observability.lgtm.logging` Set of components to log. Comma separated set of components whose container log we want to output. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_LOGGING` | list of `grafana`, `loki`, `prometheus`, `tempo`, `otelcol`, `all` |
`quarkus.observability.lgtm.otlp-protocol` The LGTM’s OTLP protocol. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_OTLP_PROTOCOL` | string | `http/protobuf`
`quarkus.observability.lgtm.scraping-interval` The (Prometheus) scraping interval, in seconds. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_SCRAPING_INTERVAL` | int | `10`
`quarkus.observability.lgtm.force-scraping` Do we force scraping. Environment variable: `QUARKUS_OBSERVABILITY_LGTM_FORCE_SCRAPING` | boolean |
`quarkus.observability.enabled` If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a containers when running in Dev or Test mode and when Docker is running. Environment variable: `QUARKUS_OBSERVABILITY_ENABLED` | boolean | `true`
`quarkus.observability.dev-resources` Enable simplified usage of dev resources, instead of full observability processing. Make sure @code{enabled} is set to false. Environment variable: `QUARKUS_OBSERVABILITY_DEV_RESOURCES` | boolean | `false`
`quarkus.observability.parallel` Do we start the dev services in parallel. Environment variable: `QUARKUS_OBSERVABILITY_PARALLEL` | boolean | `false`

| About the Duration format To write duration values, use the standard `java.time.Duration` format. See the Duration#parse() Java API documentation for more information. You can also use a simplified format, starting with a number: If the value is only a number, it represents time in seconds. If the value is a number followed by `ms`, it represents time in milliseconds. In other cases, the simplified format is translated to the `java.time.Duration` format for parsing: If the value is a number followed by `h`, `m`, or `s`, it is prefixed with `PT`. If the value is a number followed by `d`, it is prefixed with `P`.

## Dev Services beyond the Quarkus Platform

Many Quarkiverse extensions which are not in the Quarkus Platform also offer Dev Services.

Here are some highlights.

### Neo4j

The Neo4j Dev Service will be enabled when the `quarkus-neo4j` extension is present in your application, and the server address has not been explicitly configured. More information can be found in the Neo4j Guide.

### WireMock

The WireMock extension starts WireMock as a Dev Service. It is a test-focussed extension, designed to run in dev and test mode only. More information can be found in the WireMock Guide.

### Microcks

The Microcks Quarkus extension includes a Microcks Dev Service. The Dev Service manages mocks for dependencies and contract-testing your API endpoints. See the extension README.md for more information.