Vector v0.60.0 release notes

Upgrading Vector
When upgrading, we recommend stepping through minor versions as these can each contain breaking changes while Vector is pre-1.0. These breaking changes are noted in their respective upgrade guides.

Vector Changelog

2 breaking changes

  • Datadog metrics series v1 removed
    The datadog_metrics sink no longer accepts series_api_version: v1, which was deprecated in 0.56.0. Configurations that select v1 now fail to load.
    Thanks to pront for contributing PR #26558!
  • InfluxDB sinks require an explicit version

    The version option is now required for the influxdb_logs and influxdb_metrics sinks. Omitting it was deprecated in 0.58.0, and the version is no longer inferred from the configured settings. Configurations without version now fail to load.

    Settings that belong to the other version are now rejected even when set to null. For example, version: "2" with database: null fails with unknown field 'database'. Remove these settings from the configuration.

    Thanks to JinchengCao for contributing PR #26659!

1 security changes

  • Bound the sample transform’s per-group state with the new max_state_bytes option, which defaults to 128 MiB and evicts the least recently used groups to prevent unbounded memory growth from high-cardinality or very large group_by values. Each group counts the size of its rendered group_by value plus a fixed per-group overhead.
    Thanks to thomasqueirozb for contributing PR #26362!

2 new features

  • The VRL playground’s program editor now provides autocompletion for functions, enum values, event fields and variables, along with signature help while typing function arguments and hover documentation for functions.
    Thanks to MathieuSlt for contributing PR #26545!
  • The kubernetes_logs source now enriches events with the owning Namespace’s annotations, in addition to its labels. Add namespace_annotation_fields.namespace_annotations to customize or suppress the output field (default: .kubernetes.namespace_annotations).
    Thanks to srstrickland for contributing PR #25970!

6 enhancements

  • The Avro codec now supports encoding and decoding Date and TimeMillis values.
    Thanks to omwbennett for contributing PR #26112!
  • The opentelemetry source now supports decoding.codec: otlp and decoding.signal_types options. This is not a new feature but a replacement for the (now deprecated) use_otlp_decoding flag. Please see the dedicated migration notice.
    Thanks to pront for contributing PR #26690!
  • Add internal_metrics.include_group_tag to the sample transform. When enabled, component_discarded_events_total includes a group tag showing which group_by group an event belonged to when it was discarded. This option is disabled by default because configurations with many group values can produce a large number of unique metric tags.
    Thanks to arun.pidugu for contributing PR #26404!
  • Share the default log schema definition across new events instead of allocating a separate copy for each event to improve log event ingestion performance.
    Thanks to bruceg for contributing PR #26712!
  • Add internal_metrics.include_group_tag to the throttle transform. When enabled, component_discarded_events_total includes a group tag showing which key_field group exceeded the rate limit. This option is disabled by default because configurations with many group values increase metric cardinality.
    Thanks to arun.pidugu for contributing PR #26402!
  • Improve VRL performance when reading variable subpaths and event or metadata fields.
    Thanks to gwenaskell for contributing PR #26649!

10 bug fixes

  • Fixed the internal_logs source silently dropping events under high load. Events dropped when the underlying broadcast receiver lags now increment the standard component_discarded_events_total{intentional="false"} metric so the loss is observable.
    Thanks to thomasqueirozb for contributing PR #25218!
  • Fixed a disk buffer bug that could cause Vector to read from the wrong data file after many file rotations. This occurred when a file ID calculation exceeded 65,535 and wrapped incorrectly, even if only a few buffer files existed on disk.
    Thanks to xfocus3 for contributing PR #25539!
  • The kubernetes_logs source no longer drops Namespace and Node labels from the Vector log namespace metadata (%kubernetes_logs.namespace_labels and %kubernetes_logs.node_labels) when namespace_annotation_fields.namespace_labels or node_annotation_fields.node_labels is set to "". An empty path now only suppresses the legacy event field, matching how pod_annotation_fields behaves.
    Thanks to srstrickland for contributing PR #25970!
  • Restored Kerberos (sasl.mechanism: GSSAPI) support for the kafka source and sink in the official x86_64-unknown-linux-gnu release artifacts (.tar.gz, .deb, .rpm). Since v0.56.0, these binaries failed with Cyrus/libsasl2 is missing a GSSAPI module.
    Thanks to thomasqueirozb for contributing PR #26570!
  • Reuse cached upstream schema definitions when building transforms and validating sinks, reducing startup and reload overhead for topologies with shared inputs.
    Thanks to jh7459-gh for contributing PR #26587!
  • The Debian package now ships /etc/vector/vector.yaml as a dpkg conffile (a stub with no active sources or sinks), so local modifications to it are preserved across package upgrades instead of being unknown to the package manager.

    Because the path was not previously a conffile, a file already present there is moved aside before the new conffile is unpacked and restored immediately afterwards, byte-for-byte. Upgrades therefore complete without the interactive “file created by you” conffile prompt that would otherwise break unattended apt and dpkg runs.

    Thanks to koenserry for contributing PR #26600!
  • Preserve native OTLP log event names in the opentelemetry source. Decoded logs expose event_name, while OTLP decoding preserves eventName; no duplicate log attribute is needed.
    Thanks to bpceee for contributing PR #26643!
  • Fixes an issue where components selected for an explicit reload remained selected for later configuration reloads. This could unnecessarily restart unchanged components and reset their in-memory state.
    Thanks to arunpidugu for contributing PR #25911!
  • The prometheus_remote_write source now interprets metrics ending with _total as counters.
    Thanks to AyseGokmen for contributing PR #26100!
  • Vector now reports the underlying error when a source or sink task fails at runtime; previously, it only said the task completed with an error. That includes failures to bind a listening socket (for example Address already in use (os error 48)), broker subscribe and consume errors, checkpoint file errors, sink runtime errors, and sources that stop because their downstream channel closed. Vector now includes the panic payload in its logs.
    Thanks to gwenaskell for contributing PR #26549!

2 chore

  • The datadog_metrics sink no longer accepts series_api_version: v1, which was deprecated in 0.56.0. Configurations that select v1 now fail to load.
    Thanks to pront for contributing PR #26558!
  • The version option is now required for the influxdb_logs and influxdb_metrics sinks. Omitting it was deprecated in 0.58.0, and the version is no longer inferred from the configured settings. Configurations without version now fail to load.

    Settings that belong to the other version are now rejected even when set to null. For example, version: "2" with database: null fails with unknown field 'database'. Remove these settings from the configuration.

    Thanks to JinchengCao for contributing PR #26659!

VRL Changelog

0.37.0 (2026-10-19)

Enhancements

  • Avoid allocating lookup paths for each event and metadata field read.

Thanks to gwenaskell for contributing PR #1987!

  • VRL variable subpath reads clone only the selected value, reducing the cost of reading fields from large objects and arrays.

Thanks to gwenaskell for contributing PR #1984!

Fixes

  • The lexer no longer panics on a program with consecutive comment lines inside a block when a later comment contains a non-ASCII character, and no longer fails to lex such a program when a later comment contains a quote.

Thanks to DeviousCardi for contributing PR #1995!

  • The keyvalue filter in parse_grok and parse_groks no longer panics on unquoted NaN values such as ratio=NaN. These values are now kept as strings.

Thanks to tessneau for contributing PR #1990!

Download Version 0.60.0

macOS
tar.gz
Windows
zip
Windows (MSI)
msi

Deprecation Announcements

See the deprecations page for all active and historical deprecations.

Boolean shorthand for object-valued configuration options

Boolean shorthand for object-valued configuration options is deprecated. Use the object form instead so that each setting has one consistent representation and the options being configured are explicit.

Existing boolean values continue to work. Removal is not yet scheduled. We will give users at least one month to migrate before removing this shorthand.

This applies to healthcheck on sinks, global and sink acknowledgements, jetstream on the NATS sink, and acknowledgements on the Splunk HEC source. Ordinary boolean options, such as healthcheck.enabled, are unaffected.

Please also see the dedicated note for use_otlp_decoding.

Settings with an enabled field

For healthcheck, global and sink acknowledgements, NATS sink jetstream, and Splunk HEC source acknowledgements, replace the boolean with an object containing the same value in enabled. For example, within a sink configuration, replace:

healthcheck: false
acknowledgements: true

with:

healthcheck:
  enabled: false
acknowledgements:
  enabled: true

Other options in these objects retain their defaults. Use the same transformation for either true or false.

OpenTelemetry use_otlp_decoding configuration option

The opentelemetry source’s use_otlp_decoding option is deprecated. Switch to decoding with codec: otlp to preserve the same behavior as use_otlp_decoding: true.

To preserve the OTLP representation of all signals, replace:

use_otlp_decoding: true

with:

decoding:
  codec: otlp

To preserve OTLP only for selected signals, replace:

use_otlp_decoding:
  logs: false
  metrics: false
  traces: true

with:

decoding:
  codec: otlp
  signal_types: ["traces"]

Existing boolean and object settings still work, but produce a deprecation warning.

When migrating:

  • Leave out signal_types to keep all signals in OTLP format. Any types not included will remain in Vector’s native format.
  • If you currently use use_otlp_decoding: false, remove it and leave out decoding. Native conversion remains the default.
  • Use codec: otlp and the signal names logs, metrics, and traces. Other values are not supported.
  • Remove use_otlp_decoding when adding decoding. Setting both prevents Vector from starting.