Skip to content

k6

v1.8.3
grafana/k6

A modern load testing tool, using Go and JavaScript

Version of grafana/k6 you run

CompareView on GitHub

Breaking changes

What to check before upgrading, taken from the notes of the last 30 releases.

  • v2.2.0Aug 10, 2026

    Breaking changes

    There are no breaking changes in this release.

  • v2.1.0Jun 30, 2026

    Breaking changes

    There are no breaking changes in this release.

  • v1.8.0Jun 8, 2026

    Breaking changes

    There are no breaking changes in this release.

  • v2.0.0May 11, 2026

    Breaking changes

    These are changes that require you to update your scripts, CI/CD pipelines, or configuration files before upgrading.

    Go module path changed to go.k6.io/k6/v2 #5777

    Following the Go module versioning conventions, the k6 module path has changed from go.k6.io/k6 to go.k6.io/k6/v2.

    Any extension or external package that imports go.k6.io/k6 must update all import paths to go.k6.io/k6/v2. For the vast majority of extensions this is the only change needed — a mechanical find-and-replace across the codebase:

    go.k6.io/k6/ → go.k6.io/k6/v2/
    

    For example:

    // Before
    import "go.k6.io/k6/js/modules"
    
    // After
    import "go.k6.io/k6/v2/js/modules"
    

    Removed CLI commands #5653

    The following commands for controlling a running test have been removed. They have not been functional for most use cases since the REST API they relied on was limited to specific execution modes:

    • k6 pause
    • k6 resume
    • k6 scale
    • k6 status

    Migration: There is no replacement. These commands relied on the externally-controlled executor, which has also been removed in v2.0.0 (see below).

    Removed externally-controlled executor #5846

    The externally-controlled executor has been removed. It was legacy code from an older k6 Cloud architecture that allowed external systems to scale VUs and pause/resume a running test via the k6 REST API — the capability that k6 pause, k6 resume, k6 scale, and k6 status relied on.

    Migration: There is no replacement. Any test script with executor: externally-controlled will fail to start. Migrate to a different executor based on the desired load profile (e.g., ramping-vus, constant-vus, constant-arrival-rate).

    Removed k6 login command #5134

    The top-level k6 login command and its subcommands (k6 login cloud, k6 login influxdb) have been removed.

  • v1.7.0Mar 25, 2026

    Breaking changes

    There are no breaking changes in this release.

  • v1.6.0Feb 10, 2026

    Breaking changes

    There are no breaking changes in this release.

  • v1.5.0Jan 5, 2026

    Breaking changes

    _As per our stability guarantees, breaking changes across minor releases are allowed only for experimental features._

    • #5237 Deprecates the experimental/redis module. The module will be removed in a future release. Users should migrate to alternative solutions, such as the official k6 Redis extension.

    Deprecation of First Input Delay (FID) Web Vital

    Following the official web vitals guidance, First Input Delay (FID) is no longer a Core Web Vital as of September 9, 2024, having been replaced by Interaction to Next Paint (INP). The k6 browser module already emits INP metrics, and we're planning to deprecate FID support to align with industry standards.

    FID only measures the delay before the browser runs your event handler, so it ignores the time your code takes and the delay to paint the UI—often underestimating how slow an interaction feels. INP captures the full interaction latency (input delay + processing + next paint) across a page’s interactions, so it better reflects real user-perceived responsiveness and is replacing FID.

    Action required

    If you're currently using FID in your test scripts for thresholds or relying on it in external integrations, you should migrate to using INP as soon as possible.

    // Instead of relying on FID
    export const options = {
      thresholds: {
        // 'browser_web_vital_fid': ['p(95)<100'], // Deprecated
        'browser_web_vital_inp': ['p(95)<200'], // Use INP instead
      },
    };
    

    This change ensures k6 browser testing stays aligned with modern web performance best practices and Core Web Vitals standards.

  • v1.4.0Nov 10, 2025

    Breaking changes

    As per our stability guarantees, breaking changes across minor releases are allowed only for experimental features.

    Breaking changes for experimental modules

    • #5164 OpenTelemetry output now exports rate metrics as a single counter with zero/nonzero labels instead of separate metrics.
    • #5333 OpenTelemetry output configuration: K6_OTEL_EXPORTER_TYPE is deprecated in favor of K6_OTEL_EXPORTER_PROTOCOL to align with OpenTelemetry standards.

    Breaking changes for undefined behaviours

    • #5320, #5239, #5342 Automatic extension resolution now only inspects ES module import statements and no longer supports CommonJS require() calls. CommonJS require() calls are dynamic, and it is not possible to know for certain if they will be called, or if they will be called with static strings - the only way they were even previously loaded. This functionality was a quirk of the previous implementation and had numerous problems. Additionally, use k6 directives are now only recognized when they appear at the beginning of files (after optional shebang and whitespace/comments). This was the original intention, but due to implementation bugs, it did not accurately reflect what was happening.

Release history

All releases on GitHub
BadgeLatest version of grafana/k6[![version](/badge/grafana/k6)](/p/grafana/k6)

k6 v1.8.3 is here! This patch release includes:

  • A browser fix for clicking a missing element handle
  • Security updates for golang.org/x/net and github.com/klauspost/compress
  • Updates to the JavaScript runtime and other dependencies

Security updates

  • #6667 Updates golang.org/x/net to v0.62.0 and github.com/klauspost/compress to v1.20.4 to address known vulnerabilities.

Bug fixes

  • #6617 Fixes a browser panic when click() is called on a missing element handle. The call now throws a catchable TypeError.

Maintenance and internal improvements

  • #6650 Updates Sobek and regexp2, and refreshes JavaScript compatibility and TC39 test expectations.
  • #6648 Updates github.com/andybalholm/brotli to v1.2.8.
  • #6600 Updates github.com/grafana/k6provider to v0.5.1.
  • #6601 Updates golang.org/x/crypto, x/sync, x/sys, x/term, x/text, and x/time.
  • #6653 Adjusts leak checks for Go tip on Windows.
  • #6649 Updates the v1.x lint and CI workflows.

Full release notesCompare with previous