Quarkus extension for integrating Chroma vector database as an embedding store with LangChain4j
DevServices is a Quarkus feature that automatically starts and configures external services during development and testing. The Quarkus LangChain4j Chroma extension includes DevServices support to automatically manage a Chroma database container.
When DevServices is enabled (the default), the extension automatically:
quarkus.langchain4j.chroma.url automaticallyKey Benefits:
The build-time configuration interface defines all DevServices settings. This interface is not directly used in application code but defines the available configuration properties.
package io.quarkiverse.langchain4j.chroma.deployment;
import java.util.Map;
import java.util.OptionalInt;
/**
* Build-time configuration for Chroma DevServices.
* Configured via application.properties with prefix: quarkus.langchain4j.chroma.devservices
*/
interface ChromaBuildConfig {
ChromaDevServicesBuildTimeConfig devservices();
interface ChromaDevServicesBuildTimeConfig {
/**
* Enable or disable DevServices.
* @return True to enable DevServices (default: true)
*/
boolean enabled();
/**
* Docker image name to use for the Chroma container.
* @return Image name (default: "ghcr.io/chroma-core/chroma:1.3.0")
*/
String imageName();
/**
* Optional fixed port for the container.
* @return Fixed port or empty for random port
*/
OptionalInt port();
/**
* Enable container sharing across dev sessions.
* @return True to share containers (default: true)
*/
boolean shared();
/**
* Service name for container discovery when sharing.
* @return Service name (default: "chroma")
*/
String serviceName();
/**
* Environment variables to pass to the container.
* @return Map of environment variables
*/
Map<String, String> containerEnv();
}
}Note: This is a build-time configuration interface. All properties are configured via application.properties and are only read during the build/startup phase.
Control whether DevServices automatically starts a Chroma container.
# Enable or disable DevServices (default: true)
quarkus.langchain4j.chroma.devservices.enabled=trueBehavior:
quarkus.langchain4j.chroma.url is explicitly configuredUsage Examples:
# Disable DevServices (use manually configured Chroma)
quarkus.langchain4j.chroma.devservices.enabled=false
quarkus.langchain4j.chroma.url=http://my-chroma-server:8000
# Enable only for dev mode, disable for tests
%dev.quarkus.langchain4j.chroma.devservices.enabled=true
%test.quarkus.langchain4j.chroma.devservices.enabled=false
%test.quarkus.langchain4j.chroma.url=http://test-chroma:8000Default Value: true
Specify which Chroma Docker image to use for the DevServices container.
# Docker image name (default: ghcr.io/chroma-core/chroma:1.3.0)
quarkus.langchain4j.chroma.devservices.image-name=ghcr.io/chroma-core/chroma:1.3.0Usage Examples:
# Use a specific Chroma version
quarkus.langchain4j.chroma.devservices.image-name=ghcr.io/chroma-core/chroma:1.2.0
# Use latest version (not recommended for reproducibility)
quarkus.langchain4j.chroma.devservices.image-name=ghcr.io/chroma-core/chroma:latest
# Use a custom registry
quarkus.langchain4j.chroma.devservices.image-name=my-registry.com/chroma:1.3.0Default Value: ghcr.io/chroma-core/chroma:1.3.0
Note: The image must be compatible with the ChromaDB API. Version 1.3.0 supports the V2 API (recommended).
Optionally specify a fixed port for the Chroma container.
# Fixed exposed port (default: random port)
quarkus.langchain4j.chroma.devservices.port=8000Behavior:
Usage Examples:
# Use default Chroma port
quarkus.langchain4j.chroma.devservices.port=8000
# Use custom port
quarkus.langchain4j.chroma.devservices.port=9000
# Let DevServices choose random port (default behavior)
# Don't set quarkus.langchain4j.chroma.devservices.portDefault Value: Random available port
When to Use Fixed Ports:
When to Use Random Ports:
Enable sharing of the Chroma container across multiple Quarkus dev sessions.
# Enable container sharing (default: true)
quarkus.langchain4j.chroma.devservices.shared=true
# Service name for shared container discovery (default: "chroma")
quarkus.langchain4j.chroma.devservices.service-name=chromaHow Container Sharing Works:
quarkus-dev-service-chroma=<service-name>Benefits:
Usage Examples:
# Default sharing with service name "chroma"
quarkus.langchain4j.chroma.devservices.shared=true
quarkus.langchain4j.chroma.devservices.service-name=chroma
# Disable sharing (each app gets its own container)
quarkus.langchain4j.chroma.devservices.shared=false
# Multiple shared instances with different service names
# Application 1 - production-like data
quarkus.langchain4j.chroma.devservices.service-name=chroma-prod
# Application 2 - development data
quarkus.langchain4j.chroma.devservices.service-name=chroma-devDefault Values:
shared: trueservice-name: "chroma"Note: Container sharing only works in development mode, not in test mode.
Pass environment variables to the Chroma container.
# Set environment variables for the container
quarkus.langchain4j.chroma.devservices.container-env.CHROMA_ENV_VAR=value
quarkus.langchain4j.chroma.devservices.container-env.ANOTHER_VAR=another_valueUsage Examples:
# Configure Chroma server settings
quarkus.langchain4j.chroma.devservices.container-env.ANONYMIZED_TELEMETRY=false
quarkus.langchain4j.chroma.devservices.container-env.ALLOW_RESET=true
# Set authentication (if using a custom Chroma build)
quarkus.langchain4j.chroma.devservices.container-env.CHROMA_SERVER_AUTH_PROVIDER=token
quarkus.langchain4j.chroma.devservices.container-env.CHROMA_SERVER_AUTH_TOKEN_TRANSPORT_HEADER=X-Chroma-TokenDefault Value: Empty map (no environment variables)
Common Chroma Environment Variables:
ANONYMIZED_TELEMETRY: Enable/disable telemetry (true/false)ALLOW_RESET: Allow database reset via API (true/false)CHROMA_SERVER_AUTH_PROVIDER: Authentication provider (token, basic, etc.)Refer to Chroma documentation for the complete list of supported environment variables.
# Comprehensive DevServices configuration
# Enable DevServices
quarkus.langchain4j.chroma.devservices.enabled=true
# Use specific Chroma version
quarkus.langchain4j.chroma.devservices.image-name=ghcr.io/chroma-core/chroma:1.3.0
# Use fixed port
quarkus.langchain4j.chroma.devservices.port=8000
# Enable container sharing
quarkus.langchain4j.chroma.devservices.shared=true
quarkus.langchain4j.chroma.devservices.service-name=my-chroma
# Configure container environment
quarkus.langchain4j.chroma.devservices.container-env.ANONYMIZED_TELEMETRY=false
quarkus.langchain4j.chroma.devservices.container-env.ALLOW_RESET=trueConfigure different DevServices behavior for dev and test modes:
# Development mode - shared container with UI access
%dev.quarkus.langchain4j.chroma.devservices.enabled=true
%dev.quarkus.langchain4j.chroma.devservices.shared=true
%dev.quarkus.langchain4j.chroma.devservices.port=8000
%dev.quarkus.langchain4j.chroma.devservices.service-name=chroma-dev
# Test mode - isolated containers for each test run
%test.quarkus.langchain4j.chroma.devservices.enabled=true
%test.quarkus.langchain4j.chroma.devservices.shared=false
# Don't set port for tests - use random ports to avoid conflictsDevelopment Mode (quarkus dev):
quarkus.langchain4j.chroma.url is configuredquarkus.langchain4j.chroma.url automaticallyTest Mode (mvn test or ./gradlew test):
Production Mode (java -jar app.jar):
quarkus.langchain4j.chroma.url explicitlyDevServices is automatically disabled in production mode. No special configuration needed.
# Production configuration - DevServices ignored
%prod.quarkus.langchain4j.chroma.url=http://production-chroma:8000
%prod.quarkus.langchain4j.chroma.collection-name=production-embeddingsContainer Fails to Start:
docker psdocker pull ghcr.io/chroma-core/chroma:1.3.0docker logs <container-id>DevServices Not Starting:
quarkus.langchain4j.chroma.url is not configuredquarkus.langchain4j.chroma.devservices.enabled=trueShared Container Issues:
docker ps -adocker rm -f $(docker ps -aq -f label=quarkus-dev-service-chroma)Performance Issues:
To manually manage a Chroma container outside of DevServices:
# Start Chroma container
docker run -d \
--name chroma \
-p 8000:8000 \
ghcr.io/chroma-core/chroma:1.3.0
# Configure Quarkus to use the container
# In application.properties:
quarkus.langchain4j.chroma.devservices.enabled=false
quarkus.langchain4j.chroma.url=http://localhost:8000This approach gives you full control over the container lifecycle and configuration.
| Property | Default Value | Description |
|---|---|---|
devservices.enabled | true | Enable DevServices |
devservices.image-name | ghcr.io/chroma-core/chroma:1.3.0 | Docker image |
devservices.port | Random | Fixed exposed port |
devservices.shared | true | Share container |
devservices.service-name | "chroma" | Service name for sharing |
devservices.container-env | Empty map | Container environment variables |
Install with Tessl CLI
npx tessl i tessl/maven-io-quarkiverse-langchain4j--quarkus-langchain4j-chroma