chroma-core/chroma · error · ValueError
[91mYou are using a deprecated configuration of Chroma. [
Error message
[91mYou are using a deprecated configuration of Chroma. [94mIf you do not have data you wish to migrate, you only need to change how you construct your Chroma client. Please see the "New Clients" section of https://docs.trychroma.com/deployment/migration. ________________________________________________________________________________________________ If you do have data you wish to migrate, we have a migration tool you can use in order to migrate your data to the new Chroma architecture. Please `pip install chroma-migrate` and run `chroma-migrate` to migrate your data and then change how you construct your Chroma client. See https://docs.trychroma.com/deployment/migration for more information or join our discord at https://discord.gg/MMeYNTmh3x for help![0m
What it means
Settings.__getitem__ checks every accessed value against _legacy_config_values - the removed pre-1.0 config values ('duckdb', 'duckdb+parquet', 'clickhouse', 'local', 'rest', old DuckDB/ClickHouse impl classes, 'chromadb.api.local.LocalAPI'). If any read setting holds one of these, Chroma raises this colored banner ValueError instead of silently misbehaving. It means some code - yours, a tutorial's, or a dependency's - still configures Chroma the 0.4.x way.
Source
Thrown at chromadb/config.py:317
)
# =======
# Methods
# =======
def require(self, key: str) -> Any:
"""Return the value of a required config key, or raise an exception if it is not
set"""
val = self[key]
if val is None:
raise ValueError(f"Missing required config value '{key}'")
return val
def __getitem__(self, key: str) -> Any:
val = getattr(self, key)
# Error on legacy config values
if isinstance(val, str) and val in _legacy_config_values:
raise ValueError(LEGACY_ERROR)
return val
model_config = {"env_file": ".env", "env_file_encoding": "utf-8", "extra": "ignore"}
T = TypeVar("T", bound="Component")
class Component(ABC, EnforceOverrides):
_dependencies: Set["Component"]
_system: "System"
_running: bool
def __init__(self, system: "System"):
self._dependencies = set()
self._system = system
self._running = False
View on GitHub (pinned to aecdd12c8a)
Solutions
- Stop setting chroma_db_impl and the legacy impl values; use the new client constructors - PersistentClient() for embedded, HttpClient() for remote.
- Unset stale environment variables: unset CHROMA_DB_IMPL and remove it from Docker/compose/CI definitions.
- If you have 0.4.x data to keep, run `pip install chroma-migrate && chroma-migrate` first, then switch to the new client construction.
Example fix
// before import chromadb client = chromadb.Client(chromadb.config.Settings(chroma_db_impl='duckdb+parquet', persist_directory='./chroma')) // after import chromadb client = chromadb.PersistentClient(path='./chroma')
Defensive patterns
Strategy: validation
Validate before calling
LEGACY_VALUES = {
'duckdb', 'duckdb+parquet', 'clickhouse', 'local', 'rest',
'chromadb.db.duckdb.DuckDB', 'chromadb.db.duckdb.PersistentDuckDB',
'chromadb.db.clickhouse.Clickhouse', 'chromadb.api.local.LocalAPI',
}
offending = {k: v for k, v in settings.model_dump().items() if v in LEGACY_VALUES}
if offending:
raise RuntimeError(f'remove legacy Chroma settings before starting: {offending}') Try / catch
try:
val = settings['chroma_db_impl']
except ValueError as e:
if 'deprecated configuration' in str(e):
raise RuntimeError('legacy 0.4.x config detected - migrate construction and data (chroma-migrate)') from e
raise Prevention
- Grep codebase and CI definitions for chroma_db_impl and the legacy impl strings before upgrading to 1.x.
- Construct clients via PersistentClient()/HttpClient()/EphemeralClient() only - never via impl class names.
- Keep a smoke test that boots a client in CI to catch legacy env vars early.
When it happens
Trigger: Settings(chroma_db_impl='duckdb+parquet') or chroma_api_impl='chromadb.api.local.LocalAPI'; exported CHROMA_DB_IMPL=duckdb+parquet env vars from an old install; code copied from pre-1.0 tutorials; a wrapper library still passing legacy keys.
Common situations: Upgrading chromadb 0.4.x -> 1.x with stale env vars in shell profiles, Docker images, or docker-compose; CI caches carrying old .env files; teams copying legacy Getting Started snippets.
Related errors
- Cannot specify both 'hnsw' and 'spann' configurations during
- Invalid HNSW config provided in CreateCollectionConfiguratio
- Invalid SPANN config provided in CreateCollectionConfigurati
- Cannot specify both 'hnsw' and 'spann' configurations during
- Invalid HNSW config provided in UpdateCollectionConfiguratio
AI-assisted analysis of chroma-core/chroma@aecdd12c8a (2026-08-16).
Data as JSON: /api/errors/a4df9a84ee9aa598.
Report an issue: GitHub.