NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #1313 most downloaded on NuGet
This strongly-typed, client library enables working with Elasticsearch. It is the official client maintained and supported by Elastic.
Last release 10 days ago
28 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Some releases are documented
notes for 19 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
141 releases · first in 2022
Warning This release contains a breaking change in the generated security types. Review the Breaking entry below before upgrading.
Warning
This release contains a breaking change in the generated security types. Review the Breaking entry below before upgrading.
Elastic.Transport to 1.1.0 by @flobernd in #8992
Elastic-Cluster-Name response header (sent by Elasticsearch 9.6+ when http.headers.cluster_name.enabled is set) as the db.elasticsearch.cluster.name span attributeParseAllHeaders or an overlapping ResponseHeadersToParse was used while OpenTelemetry listeners were activeIdFrom path and script upserts) now infer routing from the document instead of omitting it"routing":null for types without a routing property, and Delete<T>(doc) / DeleteMany<T>(...) keep routing and _index inferenceRoutingResolver.Resolve() no longer allocates on any path (join-field routing drops from 160 B/op to 0 B/op)Certificates (_ssl/certificates), Cluster.RemoteInfo, DanglingIndices.DeleteDanglingIndex / ImportDanglingIndex, Ilm.ExplainLifecycle, Indices.AddBlock and Ml.PreviewDatafeed endpointskql query to the Query DSL (Query.Kql / KqlQuery)moving_avg pipeline aggregation (Aggregation.MovingAvg with EWMA, Holt, Holt-Winters, linear and simple models)clone_api_key cluster privilege (ClusterPrivilege.CloneApiKey)MaxConsecutiveExtractionFailures to DatafeedConfig and the put/update datafeed requests, and AnalysisStats to DataframeAnalyticsGlobalPrivilege.Application is now optional (ApplicationGlobalUserPrivileges?) and the GlobalPrivilege(ApplicationGlobalUserPrivileges) constructor was removed. Use the object initializer or the GlobalPrivilegeDescriptor insteadFull Changelog: 9.5.2...9.5.3
One column per quarter.
Warning This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
Warning
This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
DenseVectorIndexOptions gains the bbq_disk properties AutoCalibrate, Bits, ClusterSize,DefaultVisitPercentage and Precondition.DenseVectorIndexOptions.ConfidenceInterval is now marked [Obsolete] (deprecated since 9.5.0).SourceFieldMode gains ColumnarStored (columnar_stored), so index templates and mappings that use the new modeInnerRetriever.Normalizer and InnerRetriever.Weight are now optional (ScoreNormalizer? andfloat? instead of required), following the spec change that made normalizer and weight optional on the linear[SetsRequiredMembers] constructor no longer takes normalizer and weightRoleDescriptor.Global, QueryRole.Global and RoleDescriptorRead.Global now use a singleGlobalPrivilege instead of a collection, matching the server-side parser, which only accepts an object for theglobal privilege. The Global descriptor methods replace their params array overloads with a single-objectFull Changelog: 9.5.1...9.5.2
Warning This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
Warning
This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
aliases, each with an optional move_on_creation flag, through the new DestinationAlias type.KnnRetriever.NumCandidates is now optional (int? instead of required int), following the spec change that made num_candidates optional on the kNN retriever. The [SetsRequiredMembers] constructor no longer takes a numCandidates argument.TransformSummary.Dest and UpdateTransformResponse.Dest now use Elastic.Clients.Elasticsearch.TransformManagement.Destination instead of Elastic.Clients.Elasticsearch.Core.Reindex.Destination.Full Changelog: 9.5.0...9.5.1
Warning This release regenerates the client against the Elasticsearch 9.5 specification and contains breaking changes. Please review the list below be…
Initial 9.5.x release.
Warning
This release regenerates the client against the Elasticsearch 9.5 specification and contains breaking changes. Please review the list below before upgrading.
client.Encryption.Reset endpoint, plus a ProjectEncryptionKey indicator on the health reportPutDataSource / GetDataSource / DeleteDataSource and PutDataset / GetDataset / DeleteDataset, with the supporting ESQLDataSource, ESQLDataset and DatasetMapping typesPutRegionPolicy / GetRegionPolicy / DeleteRegionPolicy_slice routing parameter (RouteSlice) across the search, get, index, delete, update and bulk APIs, as well as on the multi-search header and the reindex destinationFrequentItemSets aggregations now round-trip correctly. The generated variant used an empty discriminator where the converter expected frequent_item_sets, so the property always read back as nullRoleTemplateQuery. Previously any object-shaped query was unconditionally read as a regular QueryDsl.QuerySpanGap and RoleMappingRule.Field variant accessors now return null instead of a default KeyValuePair when the union holds a different variantEmbeddingContentType.Audio / .Pdf / .Video, AnthropicTaskType.ChatCompletion, OpenAITaskType.Embedding, and the ClusterPrivilege.ManageReindex / .MonitorReindex valuesDocValues on 32 property types changes from bool? to Union<bool, DocValuesConfig>? to carry the new doc_values.multi_value setting. The parameterless DocValues() descriptor overload is gone, and reading the property into a bool? no longer compiles. SourceField.Compress and CompressThreshold are removed, and TextIndexPrefixes.MinChars / MaxChars become optional (int?), dropping the two-argument constructorParams on EsqlQuery and AsyncQuery changes from KeyValuePair<string, ICollection<FieldValue>> to KeyValuePair<string, Union<ICollection<FieldValue>, ClassifiedNamedParameter>>, which affects every existing named-parameter call site. Both requests also gain a Settings body propertyRerank now accepts the expanded multimodal request format, so Input becomes Union<ICollection<string>, ICollection<RerankInputObject>>, Query becomes Union<string, RerankInputObject>, and the Input(params string[]) overload is removed. EmbeddingContentObject.Content becomes ICollection<EmbeddingContentObjectItem> and EmbeddingContentObjectContents is gone, OpenAIServiceSettings.ApiKey is now optional, and JinaAIServiceSettings.ElementType is renamed to EmbeddingTypeSourceOnlyRepositorySettings is replaced by the ISourceOnlyRepositorySettings variant family with per-backend settings types, constructed through SourceOnlyRepositorySettingsFactory (ForAzure, ForGcs, ForReadOnlyUrl, ForS3, ForSharedFileSystem). SourceOnlyRepository.Settings now takes the interface, and its descriptor overloads are replaced by a factory callbackRoleInfo.Indices changes from IndicesPrivileges to IndicesPrivilegesRead, and role definitions gain DataSourcePrivilegesGetStats.Time is renamed to GetTime, ShardStats.Indices becomes a dictionary of ShardStats, the DenseVectorOffHeapStats.TotalCenifSize typo is corrected to TotalCenivfSize, and newly required members change the positional constructors of IndexingStats, SearchStats, FlushStats, MappingStats and MachineLearning.DefaultsUtf8JsonReader is constructed over a multi-segment ReadOnlySequence<byte>, which unblocks sequence-based deserializers such as a streaming reader over a PipeReaderFull Changelog: 9.4.2...9.5.0
Add plugin-defined (non-exhaustive) variant registry by @flobernd in #8911
Unknown* carrier and re-serialize losslessly — no data is dropped for plugin-defined or future variants the client doesn't modelsettings.Variants.Register<IProperty, MyPluginProperty>("my_plugin"); registrations are scoped per client instance and AOT-safe — see the Plugin-defined variant types documentation for detailsUnknown* carrier types for all variant families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, suggesters, rescorers) to support the non-exhaustive variant registryFull Changelog: 9.4.1...9.4.2
Regenerate client by @flobernd in #8899 and #8907
InnerHits: the Fields property is split into Field (single-field selector using Fields) and a new Fields collection of FieldAndFormat — existing usages of InnerHits.Fields = … may need to be retargeted to FieldDataStreamLifecycle gains EffectiveRetention and RetentionDeterminedBy; new GlobalRetention and RetentionSource types; GetDataLifecycleResponse now exposes GlobalRetentionParentReindexStatus type_mvt content-type alignment: chat_completion_unified / stream_completion send Content-Type: application/json; _mvt uses the versioned application/vnd.elasticsearch+vnd.mapbox-vector-tile Accept headerFull Changelog: 9.4.0...9.4.1
What's Changed Initial 9.4.x release. Full Changelog : 9.3.7...9.4.0
Regenerate client by @flobernd in #8898
ContentType: application/json for ChatCompletionUnified and StreamCompletion streaming inference requestsSearchMvt Accept header to application/vnd.elasticsearch+vnd.mapbox-vector-tile (Elasticsearch product-flavored content-type)Elastic.Transport to 0.17.1max_page_search_size values for pivot (500) and latest (5000) transformsFull Changelog: 9.3.6...9.3.7
Remove obsolete ElasticsearchClientProductRegistration overrides by @flobernd in #8891
Full Changelog: 9.3.5...9.3.6
1. Binary-response endpoints now return ElasticsearchStreamResponse
Impact : Medium.
Endpoints whose response bodies are binary ( search_mvt ) or that the client intentionally exposes as streams (ES|QL, streaming Inference) now return Elastic.Transport.Products.Elasticsearch.ElasticsearchStreamResponse instead of endpoint-specific response classes.
The following response types have been removed:
Elastic.Clients.Elasticsearch.SearchMvtResponse
Elastic.Clients.Elasticsearch.Esql.EsqlQueryResponse
Elastic.Clients.Elasticsearch.Esql.AsyncQueryResponse
Elastic.Clients.Elasticsearch.Esql.AsyncQueryGetResponse
Elastic.Clients.Elasticsearch.Esql.AsyncQueryStopResponse
Elastic.Clients.Elasticsearch.Inference.ChatCompletionUnifiedResponse
Elastic.Clients.Elasticsearch.Inference.StreamCompletionResponse
All sync and async overloads of the following client methods now return ElasticsearchStreamResponse / Task<ElasticsearchStreamResponse> :
ElasticsearchClient.SearchMvt / SearchMvtAsync
EsqlNamespacedClient.Query / QueryAsync
EsqlNamespacedClient.AsyncQuery / AsyncQueryAsync
EsqlNamespacedClient.AsyncQueryGet / AsyncQueryGetAsync
EsqlNamespacedClient.AsyncQueryStop / AsyncQueryStopAsync
InferenceNamespacedClient.ChatCompletionUnified / ChatCompletionUnifiedAsync
InferenceNamespacedClient.StreamCompletion / StreamCompletionAsync
Replace response.Data (previously a byte[] ) with response.Body ( System.IO.Stream ). The response owns the stream, so disposing the response disposes the stream — no separate disposal of Body is required.
// 9.3.4 and below SearchMvtResponse response = await client.SearchMvtAsync(req); byte[] tile = response.Data;
// 9.3.5 using var response = await client.SearchMvtAsync(req); Stream tile = response.Body;
Elastic.Clients.Elasticsearch now requires Elastic.Transport >= 0.16.0 (previously 0.15.1 ); ElasticsearchStreamResponse was introduced in transport 0.16.0.
Impact : Low.
SearchMvtRequest now overrides the inherited IRequestConfiguration? RequestConfiguration property. The getter returns a static default ( new RequestConfiguration { Accept = "application/vnd.mapbox-vector-tile" } ) when the user has not assigned a value. The setter still forwards to the base class, so user-assigned values take precedence.
Code that read request.RequestConfiguration and expected null when nothing was assigned will now observe the default singleton instead.
No Accept override is emitted for ES|QL or Inference request types; the transport default ( application/json ) continues to apply to them.
Impact : Low.
EsqlNamespacedClient.QueryAsStreamAsync (both the generic <TDocument> and the non-generic overload) return type changed from Task<Elastic.Transport.StreamResponse> to Task<Elastic.Transport.Products.Elasticsearch.ElasticsearchStreamResponse> . ElasticsearchStreamResponse is a drop-in replacement with the same Body ( System.IO.Stream ) property, additionally exposing IsValidResponse , ElasticsearchServerError , ElasticsearchWarnings , ApiCallDetails , and DebugInformation .
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
1. Improved usability of CompositeAggregation
Impact : Low.
The type of the Sources property has been changed from ICollection<IDictionary<string, CompositeAggregationSource>> to ICollection<KeyValuePair<string, CompositeAggregationSource>> . This corresponds to the Elasticsearch standard for modeling ordered dictionaries in the REST API.
CompositeAggregationSource is now also a container (similar to Aggregation , Query , etc.). This change improves usability due to specialized code generation. For example, implicit conversion operators from all existing variants ( CompositeTermsAggregation , CompositeHistogramAggregation , etc.) to CompositeAggregationSource are now generated.
As a consequence, the object initializer syntax changes as follows:
// 9.1.7 and below
var request = new SearchRequest { Aggregations = new Dictionary<string, Aggregation> { { "my_composite", new CompositeAggregation { Sources = [ new Dictionary<string, CompositeAggregationSource> { { "my_terms", new CompositeAggregationSource { Terms = new CompositeTermsAggregation { // ... } }} }, new Dictionary<string, CompositeAggregationSource> { { "my_histo", new CompositeAggregationSource { Histogram = new CompositeHistogramAggregation(0.5) { // ... } }} } ] }} } };
// 9.1.8 and above
var request = new SearchRequest { Aggregations = new Dictionary<string, Aggregation> { { "my_composite", new CompositeAggregation { Sources = [ new KeyValuePair<string, CompositeAggregationSource>( "my_terms", new CompositeTermsAggregation { // ... } ), new KeyValuePair<string, CompositeAggregationSource>( "my_histo", new CompositeHistogramAggregation(0.5) { // ... } ) ] }} } };
Implicit conversion from CompositeTermsAggregation to CompositeAggregationSource .
Implicit conversion from CompositeHistogramAggregation to CompositeAggregationSource .
In addition, this change allows optimized Fluent syntax to be generated, which ultimately avoids a previously existing ambiguity:
// 9.1.7 and below
var descriptor = new SearchRequestDescriptor() .Aggregations(aggs => aggs .Add("my_composize", agg => agg .Composite(composite => composite .Sources( x => x.Add("my_terms", x => x.Terms(/* ... /)), x => x.Add("my_histo", x => x.Histogram(/ ... */)) ) ) ) );
// 9.1.8 and above
var descriptor = new SearchRequestDescriptor() .Aggregations(aggs => aggs .Add("my_composize", agg => agg .Composite(composite => composite .Sources(sources => sources .Add("my_terms", x => x.Terms(/* ... /)) .Add("my_histo", x => x.Histogram(/ ... */)) ) ) ) );
This is the params overload that initializes the Sources collection with multiple entries.
Add dictionary item 1 that contains a single Terms aggregation entry.
Add dictionary item 2 that contains a single Histogram aggregation entry.
The old syntax was tricky because the 9.1.8 example also compiled successfully, but the .Add referred to the first dictionary both times. This ultimately resulted in a list with only one dictionary, which had multiple entries, and thus an invalid request.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
1. Improved usability of Percentiles aggregation results
Impact : Low.
The type of the Values property for the following classes got changed from the Percentiles union to a simple PercentilesItem collection:
HdrPercentilesAggregate
HdrPercentileRanksAggregate
TDigestPercentilesAggregate
TDigestPercentileRanksAggregate
PercentilesBucketAggregate
The Percentiles union type got removed as it's no longer used.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
2. Removal of certain generic request descriptors
Impact : High.
Container types now use regular properties for their variants instead of static factory methods ( read more ).
This change primarily affects the Query and Aggregation types.
// 8.x new SearchRequest { Query = Query.MatchAll( new MatchAllQuery { } ) };
// 9.0 new SearchRequest { Query = new Query { MatchAll = new MatchAllQuery { } } };
Previously required methods like e.g. TryGet<TVariant>(out) have been removed.
The new recommended way of inspecting container types is to use simple pattern matching:
var query = new Query();
if (query.Nested is { } nested) { // We have a nested query. }
Impact : High.
Removed the generic version of some request descriptors for which the corresponding requests do not contain inferrable properties.
These descriptors were generated unintentionally.
When migrating, the generic type parameter must be removed from the type, e.g., AsyncSearchStatusRequestDescriptor<TDocument> should become just AsyncSearchStatusRequestDescriptor .
List of affected descriptors:
AsyncQueryDeleteRequestDescriptor<TDocument>
AsyncQueryGetRequestDescriptor<TDocument>
AsyncSearchStatusRequestDescriptor<TDocument>
DatabaseConfigurationDescriptor<TDocument>
DatabaseConfigurationFullDescriptor<TDocument>
DeleteAsyncRequestDescriptor<TDocument>
DeleteAsyncSearchRequestDescriptor<TDocument>
DeleteDataFrameAnalyticsRequestDescriptor<TDocument>
DeleteGeoipDatabaseRequestDescriptor<TDocument>
DeleteIpLocationDatabaseRequestDescriptor<TDocument>
DeleteJobRequestDescriptor<TDocument>
DeletePipelineRequestDescriptor<TDocument>
DeleteScriptRequestDescriptor<TDocument>
DeleteSynonymRequestDescriptor<TDocument>
EqlDeleteRequestDescriptor<TDocument>
EqlGetRequestDescriptor<TDocument>
GetAsyncRequestDescriptor<TDocument>
GetAsyncSearchRequestDescriptor<TDocument>
GetAsyncStatusRequestDescriptor<TDocument>
GetDataFrameAnalyticsRequestDescriptor<TDocument>
GetDataFrameAnalyticsStatsRequestDescriptor<TDocument>
GetEqlStatusRequestDescriptor<TDocument>
GetGeoipDatabaseRequestDescriptor<TDocument>
GetIpLocationDatabaseRequestDescriptor<TDocument>
GetJobsRequestDescriptor<TDocument>
GetPipelineRequestDescriptor<TDocument>
GetRollupCapsRequestDescriptor<TDocument>
GetRollupIndexCapsRequestDescriptor<TDocument>
GetScriptRequestDescriptor<TDocument>
GetSynonymRequestDescriptor<TDocument>
IndexModifyDataStreamActionDescriptor<TDocument>
PreprocessorDescriptor<TDocument>
PutGeoipDatabaseRequestDescriptor<TDocument>
PutIpLocationDatabaseRequestDescriptor<TDocument>
PutScriptRequestDescriptor<TDocument>
PutSynonymRequestDescriptor<TDocument>
QueryVectorBuilderDescriptor<TDocument>
RankDescriptor<TDocument>
RenderSearchTemplateRequestDescriptor<TDocument>
SmoothingModelDescriptor<TDocument>
StartDataFrameAnalyticsRequestDescriptor<TDocument>
StartJobRequestDescriptor<TDocument>
StopDataFrameAnalyticsRequestDescriptor<TDocument>
StopJobRequestDescriptor<TDocument>
TokenizationConfigDescriptor<TDocument>
UpdateDataFrameAnalyticsRequestDescriptor<TDocument>
Impact : High.
Removed (TDocument, IndexName) descriptor constructors and related request APIs for all requests with IndexName and Id path parameters.
For example:
// 8.x public IndexRequestDescriptor(TDocument document, IndexName index, Id? id) { } public IndexRequestDescriptor(TDocument document, IndexName index) { } public IndexRequestDescriptor(TDocument document, Id? id) { } public IndexRequestDescriptor(TDocument document) { }
// 9.0 public IndexRequestDescriptor(TDocument document, IndexName index, Id? id) { } public IndexRequestDescriptor(TDocument document, Id? id) { } public IndexRequestDescriptor(TDocument document) { }
These overloads caused invocation ambiguities since both, IndexName and Id implement implicit conversion operators from string .
Alternative with same semantics:
// Descriptor constructor. new IndexRequestDescriptor(document, "my_index", Id.From(document));
// Request API method. await client.IndexAsync(document, "my_index", Id.From(document), ...);
Impact : High.
In places where previously long or double was used to represent a date/time/duration value, DateTimeOffset or TimeSpan is now used instead.
Impact : High.
Removed ExtendedBoundsDate / ExtendedBoundsDateDescriptor , ExtendedBoundsFloat / ExtendedBoundsFloatDescriptor .
Replaced by ExtendedBounds<T> , ExtendedBoundsOfFieldDateMathDescriptor , and ExtendedBoundsOfDoubleDescriptor .
Impact : Low.
Removed Field.Format property and corresponding constructor and inferrer overloads.
This property has not been used for some time (replaced by the FieldAndFormat type).
Impact : Low.
Field / Fields static factory methods and conversion operators no longer return nullable references but throw exceptions instead ( Field ) if the input string / Expression / PropertyInfo argument is null .
This makes implicit conversions to Field more user-friendly without requiring the null-forgiveness operator ( ! ) ( read more ).
Impact : Low.
Removed FieldValue.IsLazyDocument , FieldValue.IsComposite , and the corresponding members in the FieldValue.ValueKind enum.
These values have not been used for some time.
Impact : High.
Removed FieldSort parameterless constructor.
Please use the new constructor instead:
public FieldSort(Elastic.Clients.Elasticsearch.Field field)
Impact : Low.
Removed static FieldSort.Empty member.
Sorting got reworked which makes this member obsolete ( read more ).
Impact : Low.
All descriptor types are now implemented as struct instead of class .
Update Elastic.Transport to 1.1.0 by @flobernd in #8992
Elastic.Transport to 1.1.0 by @flobernd in #8992
Elastic-Cluster-Name response header (sent by Elasticsearch 9.6+ when http.headers.cluster_name.enabled is set) as the db.elasticsearch.cluster.name span attributeParseAllHeaders or an overlapping ResponseHeadersToParse was used while OpenTelemetry listeners were activeIdFrom path and script upserts) now infer routing from the document instead of omitting it"routing":null for types without a routing property, and Delete<T>(doc) / DeleteMany<T>(...) keep routing and _index inferenceRoutingResolver.Resolve() no longer allocates on any path (join-field routing drops from 160 B/op to 0 B/op)Certificates (_ssl/certificates), Cluster.RemoteInfo, DanglingIndices.DeleteDanglingIndex / ImportDanglingIndex, Ilm.ExplainLifecycle, Indices.AddBlock and Ml.PreviewDatafeed endpointsmoving_avg pipeline aggregation (Aggregation.MovingAvg with EWMA, Holt, Holt-Winters, linear and simple models)MaxConsecutiveExtractionFailures to DatafeedConfig and the put/update datafeed requestsAnalysisStats to DataframeAnalyticsFull Changelog: 8.19.26...8.19.27
Warning This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
Warning
This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
InnerRetriever.Normalizer and InnerRetriever.Weight are now optional (ScoreNormalizer? andfloat? instead of required), following the spec change that made normalizer and weight optional on the linear[SetsRequiredMembers] constructor no longer takes normalizer and weightRoleDescriptor.Global, QueryRole.Global and RoleDescriptorRead.Global now use a singleGlobalPrivilege instead of a collection, matching the server-side parser, which only accepts an object for theglobal privilege. The Global descriptor methods replace their params array overloads with a single-objectFull Changelog: 8.19.25...8.19.26
Warning This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
Warning
This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.
aliases, each with an optional move_on_creation flag, through the new DestinationAlias type.KnnRetriever.NumCandidates is now optional (int? instead of required int), following the spec change that made num_candidates optional on the kNN retriever. The [SetsRequiredMembers] constructor no longer takes a numCandidates argument.TransformSummary.Dest and UpdateTransformResponse.Dest now use Elastic.Clients.Elasticsearch.TransformManagement.Destination instead of Elastic.Clients.Elasticsearch.Core.Reindex.Destination.Full Changelog: 8.19.24...8.19.25
Warning This release regenerates the client against the latest specification and contains a few breaking changes. Please review the list below before…
Warning
This release regenerates the client against the latest specification and contains a few breaking changes. Please review the list below before upgrading.
Utf8JsonReader is constructed over a multi-segment ReadOnlySequence<byte>, which unblocks sequence-based deserializers such as a streaming reader over a PipeReaderFrequentItemSets aggregations now round-trip correctly. The generated variant used an empty discriminator where the converter expected frequent_item_sets, so the property always read back as nullRoleTemplateQuery. Previously the union had no discriminator between the two object arms, so any object-shaped query was unconditionally read as a regular QueryDsl.QuerySpanQuery.SpanGap now returns null instead of a default KeyValuePair when the union holds a different variant, so SpanGap is not null is no longer always truebasic query parameter on GetTransformStats, which returns a cheaper subset of statistics by skipping operations_behind, changes_last_detected_at, last_search_time and the checkpoint timestampsIndexSettings.Unassigned exposing index.unassigned.node_left.delayed_timeout, OnScriptError on runtime field definitions, and Allocations shard-allocation statistics on node statsTextIndexPrefixes.MinChars and MaxChars become optional (int?) and the two-argument TextIndexPrefixes(int, int) constructor is removed. This also fixes reading responses that omit either value, which previously failed the required-member checkJinaAIServiceSettings.ElementType is renamed to EmbeddingType, matching the embedding_type wire nameNodeInfoDiscover.SeedProviders changes from IReadOnlyCollection<string> to ICollection<string>, and a scalar seed_providers value from the node info API now deserializes instead of throwingFull Changelog: 8.19.23...8.19.24
Add plugin-defined (non-exhaustive) variant registry by @flobernd in #8911
Unknown* carrier and re-serialize losslessly — no data is dropped for plugin-defined or future variants the client doesn't modelsettings.Variants.Register<IProperty, MyPluginProperty>("my_plugin"); registrations are scoped per client instance and AOT-safe — see the Plugin-defined variant types documentation for detailsUnknown* carrier types for all variant families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, suggesters, rescorers) to support the non-exhaustive variant registryFull Changelog: 8.19.22...8.19.23
Regenerate client by @flobernd in #8897 and #8906
DataStreamLifecycle gains EffectiveRetention and RetentionDeterminedBy; new GlobalRetention and RetentionSource types; GetDataLifecycleResponse now exposes GlobalRetention_mvt content-type alignment: chat_completion_unified / stream_completion send Content-Type: application/json; _mvt uses the versioned application/vnd.elasticsearch+vnd.mapbox-vector-tile Accept headerFull Changelog: 8.19.21...8.19.22
Regenerate client by @flobernd in #8897
ContentType: application/json for ChatCompletionUnified and StreamCompletion streaming inference requestsSearchMvt Accept header to application/vnd.elasticsearch+vnd.mapbox-vector-tile (Elasticsearch product-flavored content-type)Elastic.Transport to 0.17.1max_page_search_size values for pivot (500) and latest (5000) transformsFull Changelog: 8.19.20...8.19.21
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →