Chroma clients, step by step

Each Chroma client we ran against VecturaDB and against Chroma 1.5.9: the result of each step on the two servers, the notes and the defects of the client. The summary, one row for each client, is on the Clients page.

Disclaimer. These results are provided as is, without warranty of any kind, as stated in the Apache License 2.0. They describe what we measured on 7 November 2026: your client, its version and your setup may behave differently.

Not sure about your client? Open an issue in the VecturaDB repository, name the client and its version, and we will take a look on a best-effort basis.

What the results mean

Python

chromadb-client 1.5.9

Works on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed, with the server block
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: Collection forking is unsupported for local chromaPassed: the fork has 3 records
26. Fork countError: Count forks is unsupported for local chromaPassed: 1
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsPassed: HNSWPassed: SPANN
29. Search at index_and_wal, then at index_onlyError: Search operation is not implemented for local executorPassed: index_and_wal finds r1, r3; index_only finds no record
Attached functions
30. Attach record_counterError: Attached Function operations not yet implemented in SqliteSysDbPassed
31. Read the attached functionNot run: no functionPassed: record_counter
32. Its output after 3 recordsNot run: no functionPassed: total_count 3
33. Detach it, with its outputNot run: no functionPassed
CRN
34. Give the tenant a resource nameNot in the clientNot in the client
35. Get the collection by its CRNNot in the clientNot in the client

JavaScript

chromadb 3.5.0

Works on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed, with the server block
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: Collection forking is unsupported for local chromaPassed: the fork has 3 records
26. Fork countError: Count forks is unsupported for local chromaPassed: 1
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsPassed: HNSWPassed: SPANN
29. Search at index_and_wal, then at index_onlyError: Search operation is not implemented for local executorPassed: index_and_wal finds r1, r3; index_only finds no record
Attached functions
30. Attach record_counterNot in the clientNot in the client
31. Read the attached functionNot in the clientNot in the client
32. Its output after 3 recordsNot in the clientNot in the client
33. Detach it, with its outputNot in the clientNot in the client
CRN
34. Give the tenant a resource nameFailed: answered 200, but the name reads back nullPassed: the name reads back
35. Get the collection by its CRNError: the server closed the connectionPassed: the same collection

.NET

ChromaDotNet.Client 2.20.0

Works on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: Collection forking is unsupported for local chromaPassed: the fork has 3 records
26. Fork countError: Count forks is unsupported for local chromaPassed: 1
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsError: an HNSW index, which ignores the SPANN settings: the client deleted the collectionPassed: SPANN
29. Search at index_and_wal, then at index_onlyNot run: no collectionPassed: index_and_wal finds r1, r3; index_only finds no record
Attached functions
30. Attach record_counterError: Attached Function operations not yet implemented in SqliteSysDbPassed
31. Read the attached functionNot run: no functionPassed: record_counter
32. Its output after 3 recordsNot run: no functionPassed: total_count 3
33. Detach it, with its outputNot run: no functionPassed
CRN
34. Give the tenant a resource nameAnswered 200, not read backAnswered 200, not read back
35. Get the collection by its CRNError: the server closed the connectionPassed: the same collection

CommunityToolkit.VectorData.Chroma 1.0.2-preview

Partial on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatNot in the clientNot in the client
2. Pre-flight-checksNot in the clientNot in the client
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countDelete only: a get of the 3 ids finds 2. Count is not in the clientDelete only: a get of the 3 ids finds 2. Count is not in the client
9. Delete the collectionPassedPassed

Microsoft.SemanticKernel.Connectors.Chroma 1.74.0-alpha

Fails, also on Chroma 1.5.9.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatNot in the clientNot in the client
2. Pre-flight-checksNot in the clientNot in the client
3. Create a collection, cosineError: 405 Method Not AllowedError: 405 Method Not Allowed
4. Add 3 recordsNot run: no collectionNot run: no collection
5. Query [1, 0], 2 resultsNot run: no collectionNot run: no collection
6. Get by idNot run: no collectionNot run: no collection
7. Get with a filterNot run: no collectionNot run: no collection
8. Delete one record, then countNot run: no collectionNot run: no collection
9. Delete the collectionNot run: no collectionNot run: no collection

Go

github.com/amikos-tech/chroma-go v0.4.1

Works on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: Collection forking is unsupported for local chromaPassed: the fork has 3 records
26. Fork countError: Count forks is unsupported for local chromaPassed: 1
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsPassed: HNSWPassed: SPANN
29. Search at index_and_wal, then at index_onlyError: Search operation is not implemented for local executorPassed: index_and_wal finds r1, r3; index_only finds no record
Attached functions
30. Attach record_counterNot in the clientNot in the client
31. Read the attached functionNot in the clientNot in the client
32. Its output after 3 recordsNot in the clientNot in the client
33. Detach it, with its outputNot in the clientNot in the client
CRN
34. Give the tenant a resource nameNot in the clientNot in the client
35. Get the collection by its CRNNot in the clientNot in the client

PHP

codewithkyrian/chromadb-php 1.0.0

Works on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed, with the server block
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsNot in the clientNot in the client
25. Fork it, count the forkNot in the clientNot in the client
26. Fork countNot in the clientNot in the client
27. Delete the fork, if any, and the collectionNot in the clientNot in the client
Read levels
28. Create a collection, add 3 recordsNot in the clientNot in the client
29. Search at index_and_wal, then at index_onlyNot in the clientNot in the client
Attached functions
30. Attach record_counterNot in the clientNot in the client
31. Read the attached functionNot in the clientNot in the client
32. Its output after 3 recordsNot in the clientNot in the client
33. Detach it, with its outputNot in the clientNot in the client
CRN
34. Give the tenant a resource nameFailed: answered 200, but the name reads back nullPassed: the name reads back
35. Get the collection by its CRNError: the server closed the connectionPassed: the same collection

helgesverre/chromadb v3.0.0

Works on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed, with the server block
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: Collection forking is unsupported for local chromaPassed: the fork has 3 records
26. Fork countNot in the clientNot in the client
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsNot in the clientNot in the client
29. Search at index_and_wal, then at index_onlyNot in the clientNot in the client
Attached functions
30. Attach record_counterError: Attached Function operations not yet implemented in SqliteSysDbPassed
31. Read the attached functionNot run: no functionPassed: record_counter
32. Its output after 3 recordsNot run: no functionPassed: total_count 3
33. Detach it, with its outputNot run: no functionPassed
CRN
34. Give the tenant a resource nameFailed: answered 200, but the name reads back nullPassed: the name reads back
35. Get the collection by its CRNError: the server closed the connectionPassed: the same collection

Dart

chromadb 2.0.0

Works on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed, with the server block
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: Collection forking is unsupported for local chromaPassed: the fork has 3 records
26. Fork countError: Count forks is unsupported for local chromaPassed: 1
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsPassed: HNSW, as the client sends no configurationPassed: HNSW, as the client sends no configuration
29. Search at index_and_wal, then at index_onlyError: Search operation is not implemented for local executorPassed: index_and_wal counts 3 and finds r1, r3; index_only counts 3 and finds r1, r3
Attached functions
30. Attach record_counterError: Attached Function operations not yet implemented in SqliteSysDbPassed
31. Read the attached functionNot run: no functionPassed: record_counter
32. Its output after 3 recordsNot run: no functionPassed: total_count 3
33. Detach it, with its outputNot run: no functionPassed
CRN
34. Give the tenant a resource nameFailed: answered 200, but the name reads back nullPassed: the name reads back
35. Get the collection by its CRNError: the server closed the connectionPassed: the same collection

Rust

chroma 0.15.0

Partial on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksNot in the clientNot in the client
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

VecturaDB features

StepChroma1.5.9VecturaDB1.0.0-preview.8
Create a collection with a sparse vector indexError: 400 Sparse vector indexing is not enabled in localPassed
Add 3 records with BM25 vectorsNot run: no collectionPassed
Search, dense: [1, 0]Not run: no collectionPassed: r1, r3
Search, BM25: "apple"Not run: no collectionPassed: r1
Delete the collectionNot run: no collectionPassed
With one API key on both servers
No API keyAcceptedRejected: 401 Permission denied.
The right API keyAcceptedAccepted
A wrong API keyAcceptedRejected: 401 Permission denied.

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: Collection forking is unsupported for local chromaPassed: the fork has 3 records
26. Fork countError: Count forks is unsupported for local chromaPassed: 1
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsPassedPassed
29. Search at index_and_wal, then at index_onlyError: Search operation is not implemented for local executorPassed: index_and_wal counts 3 and finds r1, r3; index_only counts 0 and finds no record
Attached functions
30. Attach record_counterError: Attached Function operations not yet implemented in SqliteSysDbPassed
31. Read the attached functionNot run: no functionPassed: record_counter
32. Its output after 3 recordsNot run: no functionPassed: total_count 3
33. Detach it, with its outputNot run: no functionPassed
CRN
34. Give the tenant a resource nameNot in the clientNot in the client
35. Get the collection by its CRNNot in the clientNot in the client

chromadb 2.3.0

Fails, also on Chroma 1.5.9.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatError: 410 GoneError: 410 Gone
2. Pre-flight-checksNot in the clientNot in the client
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idPassedPassed
7. Get with a filterPassedPassed
8. Delete one record, then countPassedPassed
9. Delete the collectionPassedPassed

VecturaDB features

StepChroma1.5.9VecturaDB1.0.0-preview.8
With one API key on both servers
No API keyAcceptedRejected: 401 Permission denied.
The right API keyAcceptedAccepted
A wrong API keyAcceptedRejected: 401 Permission denied.

Elixir

chroma 0.1.3

Partial on both servers.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksNot in the clientNot in the client
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idNot in the clientNot in the client
7. Get with a filterNot in the clientNot in the client
8. Delete one record, then countCount only: 3. Delete is not in the clientCount only: 3. Delete is not in the client
9. Delete the collectionPassedPassed

Ruby

chroma-db 0.9.0

Fails, also on Chroma 1.5.9.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatPassedPassed
2. Pre-flight-checksPassedPassed, with the server block
3. Create a collection, cosinePassedPassed
4. Add 3 recordsPassedPassed
5. Query [1, 0], 2 resultsPassedPassed
6. Get by idError: NoMethodErrorError: NoMethodError
7. Get with a filterError: NoMethodErrorError: NoMethodError
8. Delete one record, then countError: NoMethodErrorError: NoMethodError
9. Delete the collectionPassedPassed

Features of distributed Chroma

StepChroma1.5.9VecturaDB1.0.0-preview.8
Fork
24. Create a collection, add 3 recordsPassedPassed
25. Fork it, count the forkError: NoMethodErrorPassed: the fork has 3 records
26. Fork countNot in the clientNot in the client
27. Delete the fork, if any, and the collectionPassedPassed
Read levels
28. Create a collection, add 3 recordsNot in the clientNot in the client
29. Search at index_and_wal, then at index_onlyNot in the clientNot in the client
Attached functions
30. Attach record_counterNot in the clientNot in the client
31. Read the attached functionNot in the clientNot in the client
32. Its output after 3 recordsNot in the clientNot in the client
33. Detach it, with its outputNot in the clientNot in the client
CRN
34. Give the tenant a resource nameNot in the clientNot in the client
35. Get the collection by its CRNNot in the clientNot in the client

Java

io.github.amikos-tech:chromadb-java-client 0.1.7

Fails, also on Chroma 1.5.9.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatError: GoneError: Gone
2. Pre-flight-checksNot in the clientNot in the client
3. Create a collection, cosineError: Method Not AllowedError: Method Not Allowed
4. Add 3 recordsNot run: no collectionNot run: no collection
5. Query [1, 0], 2 resultsNot run: no collectionNot run: no collection
6. Get by idNot run: no collectionNot run: no collection
7. Get with a filterNot run: no collectionNot run: no collection
8. Delete one record, then countNot run: no collectionNot run: no collection
9. Delete the collectionNot run: no collectionNot run: no collection

Clojure

levand/clojure-chroma-client, commit 61766c3

Fails, also on Chroma 1.5.9.

StepChroma1.5.9VecturaDB1.0.0-preview.8
1. HeartbeatError: Unsuccessful HTTP status codeError: Unsuccessful HTTP status code
2. Pre-flight-checksNot in the clientNot in the client
3. Create a collection, cosineError: Unsuccessful HTTP status codeError: Unsuccessful HTTP status code
4. Add 3 recordsNot run: no collectionNot run: no collection
5. Query [1, 0], 2 resultsNot run: no collectionNot run: no collection
6. Get by idNot run: no collectionNot run: no collection
7. Get with a filterNot run: no collectionNot run: no collection
8. Delete one record, then countNot run: no collectionNot run: no collection
9. Delete the collectionNot run: no collectionNot run: no collection

Sparse vectors, BM25, Search and API keys

VecturaDB also has sparse vectors, BM25, the Search API and API keys on the single node, where Chroma 1.5.9 does not have them. We tested them with the two Rust crates, against VecturaDB 1.0.0-preview.8 and against Chroma 1.5.9:

SPANN

On VecturaDB 1.0.0-preview.8, a collection that asks for SPANN gets a SPANN index on the single node. We tested it with four clients: chromadb-client 1.5.9 for Python, chromadb 3.5.0 for JavaScript, chroma 0.15.0 for Rust and ChromaDotNet.Client 2.20.0. Each client created a collection with SPANN in its configuration, added 3 records and queried [1, 0], 2 results. On VecturaDB the collection reported a SPANN index, and the query gave r1 then r3 with all four clients. Chroma 1.5.9 created an HNSW index instead, as a single Chroma server ignores the SPANN settings: the clients for Python, JavaScript and Rust went on with it, and ChromaDotNet.Client refused the collection and deleted it.

Features of distributed Chroma

Nine of the clients have calls for features of distributed Chroma, the one Chroma Cloud runs on, that Chroma 1.5.9 does not have on a single node. Each of them ran the same steps 24 to 35 against VecturaDB 1.0.0-preview.8 and against Chroma 1.5.9:

A step that is not in the client is marked so; a step after a failed one does not run.

How we tested

The steps were the same for every client, with embeddings of two numbers given by hand, so no embedding model was involved:

  1. heartbeat;
  2. pre-flight-checks;
  3. create a collection, with the cosine space;
  4. add 3 records with documents and metadata;
  5. query with [1, 0] for 2 results, expecting r1 then r3;
  6. get by id;
  7. get with the filter {"n": {"$gte": 2}};
  8. delete one record, then count, expecting 2;
  9. delete the collection.

The one difference between the two servers is in step 2: VecturaDB adds its server block to the answer of pre-flight-checks. The clients that show the raw answer, Python, JavaScript, Dart, Ruby and both PHP clients, took it without errors, with the same max_batch_size, 5461.

Moving from Chroma Cloud

The guides switch the client from Chroma Cloud to VecturaDB, or to Chroma, in Python, JavaScript and .NET: Leaving Chroma Cloud.

VecturaDB is an independent fork of Chroma, under the Apache License 2.0. The original code is copyright Chroma Inc. and its contributors.

Not affiliated with, endorsed by or sponsored by Chroma Inc. CHROMA is a registered trademark of Chroma Inc., used here only to describe compatibility.