Dev Services Overview

Quarkus supports the automatic provisioning of unconfigured services in development and test mode. We refer to this capability as Dev Services. From a developer’s perspective this means that 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.

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.

Note that the default startup timeout is 60s, if this is not enough you can increase it with the quarkus.devservices.timeout property.

This page lists all the Dev Services that Quarkus supports.

In order to use Dev Services you will generally need a working Docker environment (remote environments are supported). If you don’t have Docker installed you will need to configure your services normally.

AMQP

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

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

Configuration property

Type

Default

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.

boolean

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

The image to use. Note that only quay.io/artemiscloud/activemq-artemis-broker images are supported. Check https://quay.io/repository/artemiscloud/activemq-artemis-broker to find the available versions.

string

quay.io/artemiscloud/activemq-artemis-broker:0.1.2

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container.

string

--no-autotune --mapped --no-fsync

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.

boolean

true

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.

string

amqp

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 at the Apicurio Registry Dev Services Guide.

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

Configuration property

Type

Default

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 is set.

boolean

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

The Apicurio Registry image to use. Note that only Apicurio Registry 2.x images are supported.

string

docker.io/apicurio/apicurio-registry-mem:2.1.3.Final

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.

boolean

true

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.

string

apicurio-registry

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 at the Datasource Guide.

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

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

Configuration property

Type

Default

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.

boolean

The container image name to use, for container based DevServices providers. If the provider is not container based (e.g. a H2 Database) then this has no effect.

string

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

Generic properties that are added to the database connection URL.

Map<String,String>

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.

boolean

The container image name to use, for container based DevServices providers. If the provider is not container based (e.g. a H2 Database) then this has no effect.

string

Generic properties that are added to the database connection URL.

Map<String,String>

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

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 at the Kafka Dev Services Guide.

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

Configuration property

Type

Default

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.

boolean

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

string

docker.io/vectorized/redpanda:v21.5.5

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.

boolean

true

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.

string

kafka

Timeout for admin client calls used in topic creation. Defaults to 2 seconds.

Duration

2S

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.test=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.

Map<String,Integer>

About the Duration format

The format for durations uses the standard java.time.Duration format. You can learn more about it in the Duration#parse() javadoc.

You can also provide duration values starting with a number. In this case, if the value consists only of a number, the converter treats the value as seconds. Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

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 at the OIDC Dev Services Guide.

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

Configuration property

Type

Default

If DevServices has been explicitly enabled or disabled. When DevServices is enabled Quarkus will attempt to automatically configure and start Keycloak when running in Dev or Test mode and when Docker is running.

boolean

true

The container image name to use, for container based DevServices providers. Image with a WildFly based Keycloak distribution is used by default. Image with a Quarkus based Keycloak-X distribution can be selected instead, for example: 'quay.io/keycloak/keycloak-x:15.0.2'. Note Keycloak-X and Keycloak images are initialized differently. By default, Dev Services for Keycloak will assume it is a Keycloak-X image if the image name contains a 'keycloak-x' string. Set 'quarkus.devservices.keycloak.keycloak-x-image' to override this check.

string

quay.io/keycloak/keycloak:15.0.2

If Keycloak-X image is used. By default, Dev Services for Keycloak will assume a Keycloak-X image is used if the image name contains a 'keycloak-x' string. Set 'quarkus.devservices.keycloak.keycloak-x-image' to override this check which may be necessary if you build custom Keycloak-X or Keycloak images. You do not need to set this property if the default check works.

boolean

Indicates if the Keycloak 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 for Keycloak 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.

boolean

true

The value of the quarkus-dev-service-keycloak 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 Keycloak looks for a container with the quarkus-dev-service-keycloak 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-keycloak label set to the specified value. Container sharing is only used in dev mode.

string

quarkus

The class or file system path to a Keycloak realm file which will be used to initialize Keycloak.

string

The JAVA_OPTS passed to the keycloak JVM

string

The Keycloak realm name. This property will be used to create the realm if the realm file pointed to by the 'realm-path' property does not exist, default value is 'quarkus' in this case. If the realm file pointed to by the 'realm-path' property exists then it is still recommended to set this property for Dev Services for Keycloak to avoid parsing the realm file in order to determine the realm name.

string

Indicates if the Keycloak realm has to be created when the realm file pointed to by the 'realm-path' property does not exist. Disable it if you’d like to create a realm using Keycloak Administration Console or Keycloak Admin API from io.quarkus.test.common.QuarkusTestResourceLifecycleManager.

boolean

true

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

The Keycloak users map containing the user name and password pairs. If this map is empty then two users, 'alice' and 'bob' with the passwords matching their names will be created. This property will be used to create the Keycloak users if the realm file pointed to by the 'realm-path' property does not exist.

Map<String,String>

The Keycloak user roles. If this map is empty then a user named 'alice' will get 'admin' and 'user' roles and all other users will get a 'user' role. This property will be used to create the Keycloak roles if the realm file pointed to by the 'realm-path' property does not exist.

Map<String,String>

Kogito

The Kogito Dev Service will be enabled when either kogito-quarkus or kogito-quarkus-processes extension is present in your application. More information can be found at the Kogito Dev Services Guide.

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

Configuration property

Type

Default

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 Data Index when running in Dev mode.

boolean

true

The container image name to use.

string

quay.io/kiegroup/kogito-data-index-ephemeral

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

8180

Indicates if the Data Index 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 Kogito starts a new container. The discovery uses the kogito-dev-service-data-index label. The value is configured using the service-name property. Container sharing is only used in dev mode.

boolean

true

The value of the kogito-dev-service-data-index 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 Kogito looks for a container with the kogito-dev-service-data-index 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 kogito-dev-service-data-index label set to the specified value. This property is used when you need multiple shared Data Index instances.

string

kogito-data-index

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 at the MongoDB Guide.

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

Configuration property

Type

Default

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.

boolean

The container image name to use, for container based DevServices providers.

string

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

Generic properties that are added to the connection URL.

Map<String,String>

RabbitMQ

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

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

Configuration property

Type

Default

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.

boolean

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

string

rabbitmq:3.9-management

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.

boolean

true

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.

string

rabbitmq

Type of exchange: direct, topic, headers, fanout, etc.

string

direct

Should the exchange be deleted when all queues are finished using it?

boolean

false

Should the exchange remain after restarts?

boolean

false

Extra arguments for the exchange definition.

Map<String,String>

Should the queue be deleted when all consumers are finished using it?

boolean

false

Should the queue remain after restarts?

boolean

false

Extra arguments for the queue definition.

Map<String,String>

Source exchange to bind to. Defaults to name of binding instance.

string

Routing key specification for the source exchange.

string

#

Destination exchange or queue to bind to. Defaults to name of binding instance.

string

Destination type for binding: queue, exchange, etc.

string

queue

Extra arguments for the binding definition.

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 at the Redis Dev Services Guide.

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

Configuration property

Type

Default

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.

boolean

true

The container image name to use, for container based DevServices providers.

string

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

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.

boolean

true

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.

string

redis

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.

boolean

true

The container image name to use, for container based DevServices providers.

string

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

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.

boolean

true

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.

string

redis

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 at the Vault Guide.

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 at the Neo4j 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 at the Infinispan Guide.

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

Configuration property

Type

Default

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.

boolean

true

Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly.

int

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.

boolean

true

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.

string

infinispan

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.

list of string