v0.2.0
0.2.0 covers Tier 1 "robustness, DX and reach" through Tier 3 "data and collections": the
modern /points/query search engine, payload and vector management, and the correctness work that
had to come first. It opens with a data-loss fix, which is why that section is first.
Fixed
- delete-by-filter data loss: a delete whose filter clauses were all empty (e.g.
delete(c) { must { } }, ormust { if (cond) … }wherecondis false at runtime) is no longer
sent as a match-all filter that would delete every point in the collection. Empty clause blocks now
normalize away, and delete-by-filter rejects an all-empty filter before issuing any request. collectionExistsnow returnsfalseon a404instead of throwing, matching its documented contract.KdrantException.CollectionNotFoundnow carries the server's error message when the server provides one.
Security
- The client rejects a configuration that sets an
apiKeywithoutuseTls, so an API key is never
sent over plaintext HTTP.
Added
- Collection config tuning:
updateCollection { optimizers = …; hnsw = …; quantization = … }(PATCH),
andoptimizers/quantization(QuantizationConfig.Scalar/.Binary) oncreateCollection. - Payload field indexes (
createPayloadIndex(field, PayloadSchemaType.KEYWORD)/deletePayloadIndex), so
filtering on a field scales instead of doing a full scan; and payload mutationssetPayload/
overwritePayload/deletePayload/clearPayloadover a points-or-filter selector. - Vector mutations:
updateVectors(write new vectors to existing points, keeping payload) and
deleteVectors(remove named vectors from the selected points). - Advanced retrieval queries on
search:recommend { positive(...); negative(...); strategy = ... },
discover { target(...); context(...) }, andcontext { pair(...) }. Examples (VectorInput) accept a
dense/sparse vector or a point id. - Batch and grouped search:
searchBatch { search { } … }(several searches in one round-trip, hits per
search) andsearchGroups(groupBy = …) { }returningList<PointGroup>. - Sparse & multi-vectors:
VectorData.Sparse/MultiDense,sparseVector(name) { modifier = Modifier.IDF }
and per-vectormultivectorincreateCollection, andquerySparse(...)/queryMulti(...)— enabling
true dense+sparse hybrid search combined with M14 fusion. Response decoding now degrades an unknown vector
shape toVectorData.Rawinstead of failing the whole response. - Modern
/points/querysearch: a polymorphicquery(nearest by vector or by point id,orderBy,
sample), nestableprefetch { }sub-requests, and hybrid-search fusion (rrf(k, weights)/dbsf()),
pluslookupFromfor cross-collection id lookups. The previousquery(vector)call is unchanged. - Typed payload access:
kdrantJson(public defaultJson),ScoredPoint.payloadAs<T>()/
Record.payloadAs<T>(), andQdrantClient.searchAs<T>(): List<Hit<T>>to decode hit payloads
straight into your own types. - Collection conveniences:
getCollectionOrNull, race-tolerantcreateCollectionIfNotExists(...): Boolean,
and acreateCollection(name, size, distance = COSINE)shorthand. PayloadBuilderindex-assignment sugar:payload["key"] = value(operator set, acceptsnull).- Automatic retries with exponential backoff + jitter for transient failures (HTTP 429/502/503/504 and
transient I/O errors), honoring the server'sRetry-Afterheader. Tunable viamaxRetries,
retryBaseDelay, andretryMaxDelayon the client config (maxRetries = 0disables retries). - Finer error taxonomy:
KdrantException.RateLimited(429, carryingRetry-After),ServiceUnavailable
(503),ServerError(other 5xx), andAlreadyExists(409). - Client-side validation of collection parameters: vector
size,shardNumber, andreplicationFactor
must be positive, with error messages that echo the received value. kdrant-bom— a Bill of Materials module to keepkdrant-coreandkdrant-transport-reston one
aligned version.
Changed
- Server errors (HTTP 5xx other than 503) now surface as
KdrantException.ServerErrorinstead of
Transport, which is now reserved for connection-level I/O failures. HTTP408maps toTimeout
and409toAlreadyExists. local.propertiesis no longer tracked in version control.
Install
dependencies {
implementation("io.github.nacode-studios:kdrant-transport-rest:0.2.0")
}Full changelog: https://github.com/NaCode-Studios/Kdrant/blob/v0.2.0/CHANGELOG.md