v1.0.0
Kdrant's 1.0: the REST client is feature-complete and its public API is now stable under Semantic
Versioning — see STABILITY.md. On top of 0.2.0 (M10–M18), this release adds M19–M24
(aliases, snapshots, service/analytics endpoints, granular transport & observability, a no-boxing hot
path, quality/CI hardening, the Spring Boot / Spring AI / LangChain4j integrations, and the catching
helper).
Added
- Aliases (M19):
updateAliases { createAlias(collection, alias); deleteAlias(alias); renameAlias(from, to) },
applied by the server as one atomic batch — the primitive behind zero-downtime reindexing (build a new
collection, then swap the alias in a single step). PluslistAliases()andlistCollectionAliases(name). - Service & health endpoints (M19):
healthz()/readyz()/livez()(Kubernetes-style probes that return
aBooleanand never throw on a not-ready status),listCollections(),telemetry()andlistIssues()
(raw JSON, since the shape is server-version-specific),clearIssues(), andmetrics()(Prometheus
text-exposition format). - Analytics (M19):
facet(name, key, limit, exact) { filter }— distinct payload-value counts (a histogram
over a key) — and the distance-matrix endpointssearchMatrixPairs(name) { sample; limit; using; filter }
andsearchMatrixOffsets(...)(explicit edge-list and sparse-coordinate forms) for clustering/visualization. - Snapshots & backup/restore (M20):
createSnapshot/listSnapshots/deleteSnapshot/
recoverSnapshot(location, priority, checksum)for a collection, pluscreateStorageSnapshot/
listStorageSnapshots/deleteStorageSnapshotfor the whole storage. Binary transfer is streamed, so a
multi-GB backup is never buffered in memory:downloadSnapshot(...)/downloadStorageSnapshot(...)return
a coldFlow<ByteArray>, anduploadSnapshot(name, data: Flow<ByteArray>, ...)streams a snapshot file back
as a multipart upload.SnapshotPriority(NO_SYNC/SNAPSHOT/REPLICA) sets the source of truth when
recovering into a replicated collection. Note: unlike the mutationwaitflags, snapshotwaitdefaults to
true, matching the Qdrant server default. - Granular transport & observability (M21): a
configureClientescape hatch on theKdrant(...)factory
(anHttpClientConfig<*>hook to install your own plugins — metrics, tracing — tune the CIO engine, or
override any default);connectTimeout/socketTimeouton the client config; and optional
request/response logging vialogLevel = LogLevel.…, which always redacts theapi-keyheader so the
key never reaches the logs. - Streaming ingest (M21):
upsert(name, points: Flow<PointStruct>)andupsert(name, points: Sequence<PointStruct>)
— ingest a large or unbounded source without materializing it all in memory; the engine chunks it by the
configured batch size (sequential, not atomic across chunks, like the DSLupsert). - Ergonomics (M24):
catching { … }— a coroutine-saferunCatchingthat returnsResult<T>but re-throws
CancellationExceptioninstead of trapping it. The exception-based API stays the primary style. - No-boxing hot path (M21): the DSL
vector(f1, f2, …)/vector(*floatArray)(upsert) andquery(f1, f2, …)
(search) now keep the values in aFloatArrayand serialize it directly, avoiding a boxedFloatper element
(VectorData.DenseArray/QueryInterface.VectorArray). Upsert batching is byte-aware: a batch is bounded by
both the point count and a serialized-size cap (maxUpsertBytes, default ~30 MiB), so Qdrant's ~32 MiB REST
limit is respected even for high-dimensional vectors.
Install
dependencies {
implementation("io.github.nacode-studios:kdrant-transport-rest:1.0.0")
}Full changelog: https://github.com/NaCode-Studios/Kdrant/blob/v1.0.0/CHANGELOG.md