Clients
We ran 14 Chroma clients, in 11 languages, with the same test against VecturaDB 1.0.0-preview.3 and against Chroma 1.5.9. In our tests each client gave the same result on the two servers, step by step: where a client fails, it fails in the same way on Chroma 1.5.9.
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 25 October 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.
Results
| Language | Package and version | VecturaDB 1.0.0-preview.3 | Chroma 1.5.9 | Note |
|---|---|---|---|---|
| Python | chromadb- 1.5.9 |
Passed | Passed | All 9 steps. |
| JavaScript | chromadb 3.5.0 |
Passed | Passed | All 9 steps. |
| .NET | ChromaDotNet. 2.18.0 |
Passed | Passed | All 9 steps. The whole test suite of the client, on VecturaDB 1.0.0-preview.3: 2192 passed, 12 skipped, 0 failed. The skipped tests are for Chroma Cloud quotas and settings, tenants and databases created on a server already running, the built-in authentication that Chroma 1.0 removed, timing measurements and Chroma 0.x. |
| Go | github. v0.4.1 |
Passed | Passed | All 9 steps. To install it, its dependency chroma-go-local v0.3.4 had to be replaced with v0.3.5: proxy.golang.org answered 404 and the direct download failed the checksum. Only the embedded client uses it. |
| PHP | codewithkyrian/ 1.0.0 |
Passed | Passed | All 9 steps. |
| PHP | helgesverre/ v3.0.0 |
Passed | Passed | All 9 steps. |
| Dart | chromadb 2.0.0 |
Passed | Passed | All 9 steps. |
| Rust | chroma 0.15.0 |
Partial | Partial | The crate has no pre-flight-checks; the other 8 steps passed. It needs protoc to build. |
| Elixir | chroma 0.1.3 |
Partial | Partial | Set to the v2 API with its api_version setting. The library has no pre-flight-checks, get by id, where or delete of records; the other steps passed. |
| Rust | chromadb 2.3.0 |
Failed | Failed | The heartbeat calls the v1 API: "410 Gone: The v1 API is deprecated. Please use /v2 apis". The other steps passed. |
| Ruby | chroma- 0.9.0 |
Failed | Failed | Get and delete send an empty where and where_document, which both servers reject with 400 "Invalid where clause". The gem then raises NoMethodError: private method `raise_failure_error' instead of the message of the server. |
| .NET | Microsoft. 1.74.0-alpha |
Failed | Failed | The v1 API only: creating a collection answers "405 (Method Not Allowed)". |
| Java | io. 0.1.7 |
Failed | Failed | The v1 API only: the heartbeat answers "Gone", creating a collection "Method Not Allowed". |
| Clojure | levand/, commit 61766c3 |
Failed | Failed | The v1 API only: "Unsuccessful HTTP status code" from the heartbeat and from creating a collection. |
What the results mean
- Passed: all 9 steps gave the expected result.
- Partial: the steps the client has passed; the others are not in the client.
- Failed: at least one step gave an error. Each failure in the table happened in the same way on Chroma 1.5.9. Four of the five failing clients call the v1 API, which Chroma 1.x no longer serves.
How we tested
- The servers:
chromadb/chroma:1.5.9andghcr.io/vecturadb/vecturadb:1.0.0-preview.3, for linux/amd64, with the default command of the image. The image of VecturaDB wassha256:df6c4144ca9bd85910c8a224efabcf85b17ff99306c8ea4809a43bf9f9ca0eaf. - A new container for each client and each server, with an empty data folder, on a Docker network: the client reached the server at port 8000. No API keys, the default tenant and database.
- Each client ran in a container of its language, with its version pinned.
The steps were the same for every client, with embeddings of two numbers given by hand, so no embedding model was involved:
- heartbeat;
- pre-flight-checks;
- create a collection, with the cosine space;
- add 3 records with documents and metadata;
- query with [1, 0] for 2 results, expecting r1 then r3;
- get by id;
- get with the filter
{"n": {"$gte": 2}}; - delete one record, then count, expecting 2;
- 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.