Skip to content

ChromaDotNet.Local 1.5.9.1-preview.6: the base without an engine, and the engines ChromaDotNet.Local.ChromaDB and ChromaDotNet.Local.VecturaDB - #7

Merged
Laurianti merged 5 commits into
mainfrom
engines
Oct 25, 2026
Merged

Laurianti merged 5 commits into
mainfrom
engines

Conversation

@Laurianti

@Laurianti Laurianti commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

What changes

ChromaDotNet.Local becomes the base without an engine, and each engine is a package of its own, with its line of versions and tags:

Package Version Tag
ChromaDotNet.Local, the base 1.5.9.1-preview.6 v1.5.9.1-preview.6
ChromaDotNet.Local.ChromaDB, with ChromaDotNet.Local.ChromaDB.Runtime.<rid> for the five platforms 1.5.9.1-preview.6, with Chroma 1.5.9 chromadb-v1.5.9.1-preview.6
ChromaDotNet.Local.VecturaDB 1.0.0-preview.2.1, with VecturaDB 1.0.0-preview.2 none for now
  • deda19d The base and the two engines. An engine package describes its server with assembly metadata: the version, the release, and for each platform the file, its name in the release and its SHA-256 hash; and the longest data path on Windows. ChromaLocalOptions.Engine chooses between two engines; Engine and EngineVersion of the server; ChromaVersion is obsolete. Without an engine, the warning CDNL001 at the build and an error at the start. ChromaDotNetLocalChromaDBDownload takes the executables of ChromaDB out of the output. The guard is in the base, and the start finds it, as the executables, also in a single file with its native libraries inside and in a plugin, like a module of PowerShell. New file names: chromadb, vecturadb, chromadotnet-local-guard. Next to ChromaDotNet.Local.Core of 1.5.9.1-preview.5, whose ChromaDotNet.Local.dll has the same version, the SDK takes the one of the base, a package it prefers in a conflict.
  • fae9b86 The scripts of the tests: package modes and NativeAOT, the download of each engine, the migration from 1.5.9.1-preview.5, the container published as root, the suite of the client against each engine.
  • b9cb231 A file next to the application is the executable of the engine only with its hash: an application named vecturadb started itself as the server; 1.5.9.1-preview.5 did the same with chroma.
  • 2283fc2 The CI: the tests on the five runners; a tag publishes the packages of its line, an engine only once its base is released.
  • a72f6c8 README, SECURITY.md, CONTRIBUTING.md, and the release notes of each line.

Measured on Windows 11

Result
DataPath, Chroma 1.5.9 206 characters: the index loads after a restart; 207: it does not
DataPath, VecturaDB 1.0.0-preview.2 200 characters: it works; 201: the first write fails, "Error in compaction: Failed to apply logs to the hnsw segment writer"
The data of 1.5.9.1-preview.5 opens with ChromaDB and with VecturaDB; VecturaDB writes, and preview.5 reads it again
A collection with sparse vectors of VecturaDB, opened by Chroma 1.5.9 the records are there, without the sparse vectors

Measured on Linux x64, in a container: without a guard, the server outlives the application killed with SIGKILL. With build/guard-hosts-test.sh, in an application, a single file with its native libraries inside, a plugin of a host in another directory and a binary module of PowerShell, the guard is the parent of the server, which ends with the application.

Runs on Windows 11, .NET 10

Result
Tests of the packages, two runs 92 passed, 2 skipped (the guard, Linux and macOS only)
build/package-modes.sh aot all ok, NativeAOT with each engine, no warning
build/migration-tests.sh the 6 cases ok
build/download-tests.sh chromadb and vecturadb all ok; VecturaDB also from its GitHub release
build/client-suite.sh, ChromaDB 1961 passed, 12 skipped
build/client-suite.sh, VecturaDB 1958 passed, 12 skipped; Search, SchemaAndSparseVectors and ForkAndIndexingStatus left out, as they check that a single server rejects the Search API, sparse vectors and the fork
build/nonroot-test.sh x64, build/guard-hosts-test.sh x64 all ok

The data of the tests of the Search of VecturaDB is that of the comparison with Chroma Cloud, with one change: the 300 records that the searches do not find are on distinct vectors. When 300 records share one vector, the HNSW index of a single node, in Chroma 1.5.9 as in VecturaDB, misses the records near the query in about two collections out of five.

Not in this PR: the tags, the packages on NuGet, the deprecation of ChromaDotNet.Local.Core and of the ChromaDotNet.Local.Runtime packages.

@Laurianti
Laurianti requested a review from a team as a code owner October 24, 2026 23:57
@Laurianti
Laurianti force-pushed the engines branch 2 times, most recently from 70743a5 to 25696c7 Compare October 25, 2026 04:32
… the engines ChromaDotNet.Local.ChromaDB and ChromaDotNet.Local.VecturaDB

Each engine package describes its server to the base with assembly metadata: the version, the release of the executables, for each
platform the file, its name in the release and its SHA-256 hash, and the longest data path on Windows, 206 characters for Chroma and
200 for VecturaDB. ChromaLocalOptions.Engine chooses between two engines; Engine and EngineVersion of the server say its engine and the
version of its package, and ChromaVersion is obsolete. Without an engine, the warning CDNL001 at the build and an error at the start.
With ChromaDotNetLocalChromaDBDownload the executables of the runtime packages are not in the output. The guard is in the base: the
start finds it, as the executables, next to the application, next to the assembly of the base, as in a plugin or a module of
PowerShell, and in the directories of the native libraries, as in a single file that extracts them. The executables are named
chromadb, vecturadb and chromadotnet-local-guard, so that the packages of 1.5.9.1-preview.5 can stay in an application. There the
SDK takes the ChromaDotNet.Local.dll of the base over the one of ChromaDotNet.Local.Core, which has the same version: the base is
among the packages it prefers in a conflict.

The tests run with the two engines, and check the Search API and the fork of collections of VecturaDB against what Chroma Cloud does.
build/guard-hosts-test.sh checks the guard in a single file, in a plugin and in a module of PowerShell.
…9.1-preview.5

- package-modes.sh: ChromaDotNet.Local.ChromaDB, also published for one platform, with ChromaDotNetLocalChromaDBDownload,
  ChromaDotNet.Local.VecturaDB, the base alone, and with aot each engine published with NativeAOT.
- download-tests.sh chromadb|vecturadb: the download at the first start, from a mirror and from the GitHub release; the mirror of
  serve_release.py also serves files that are not gzip.
- migration-tests.sh: from the packages of 1.5.9.1-preview.5 on nuget.org to the new ones.
- client-suite.sh against each engine; against VecturaDB without the three tests that expect a server without the Search API, the
  sparse vectors and the fork. nonroot-test.sh, linux-tests.sh and nuget-check.sh with the two engines; nonroot-test.sh stops when a
  publish fails, and checks that the message names the engine and the guard.
…ith its hash

Where a publish for one platform puts the executable, a file of that name can be another one: the apphost of an application named
chromadb or vecturadb, as chroma in 1.5.9.1-preview.5, or of a project it references. The start ran it as the server. Now such a file
is taken only with the SHA-256 hash of the engine package. package-modes.sh checks an application named vecturadb, and one named
chromadb without an apphost, published for one platform, which starts the engine next to it.
The pack checks the hashes of VecturaDB against the digests of its release and takes its notices. On the five runners: the tests
with the two engines, the package modes and NativeAOT, the migration from 1.5.9.1-preview.5, the download of each engine, and the
suite of the client against each engine; on Linux also the container published as root and the guard in a single file, a plugin and
a module of PowerShell. A tag publishes the packages of its line: v* the base, chromadb-v* ChromaDotNet.Local.ChromaDB and its
runtime packages with the executables in the release, vecturadb-v* ChromaDotNet.Local.VecturaDB; an engine only once the base it
depends on is released as it is in the tree.
@Laurianti Laurianti changed the title ChromaDotNet.Local 2.0: the base without an engine, and the engines ChromaDotNet.Local.ChromaDB and ChromaDotNet.Local.VecturaDB ChromaDotNet.Local 1.5.9.1-preview.6: the base without an engine, and the engines ChromaDotNet.Local.ChromaDB and ChromaDotNet.Local.VecturaDB Oct 25, 2026
@Laurianti
Laurianti merged commit e6de64a into main Oct 25, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants