k6
v1.8.3A modern load testing tool, using Go and JavaScript
- Maintenance
- Active175 commits in 3 months · bus factor 3
- License
- AGPL-3.0Copyleft · OSI-approved
- Security
- No advisories publishedScorecard 7.7/10
- Supported versions
- No scheduleendoflife.date does not track this project
32.3k stars · 1.7k forks · 771 open issues · last release 2 days ago · data checked 5 hours ago
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#5777Following the Go module versioning conventions, the k6 module path has changed from
go.k6.io/k6togo.k6.io/k6/v2.Any extension or external package that imports
go.k6.io/k6must update all import paths togo.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 pausek6 resumek6 scalek6 status
Migration: There is no replacement. These commands relied on the
externally-controlledexecutor, which has also been removed in v2.0.0 (see below).Removed externally-controlled executor #5846
The
externally-controlledexecutor 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 thatk6 pause,k6 resume,k6 scale, andk6 statusrelied on.Migration: There is no replacement. Any test script with
executor: externally-controlledwill 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 logincommand 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/redismodule. 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.
- #5237 Deprecates the
- 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/nonzerolabels instead of separate metrics. - #5333 OpenTelemetry output configuration:
K6_OTEL_EXPORTER_TYPEis deprecated in favor ofK6_OTEL_EXPORTER_PROTOCOLto align with OpenTelemetry standards.
Breaking changes for undefined behaviours
- #5320, #5239, #5342 Automatic extension resolution now only inspects ES module
importstatements and no longer supports CommonJSrequire()calls. CommonJSrequire()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 k6directives 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.
- #5164 OpenTelemetry output now exports rate metrics as a single counter with
Release history
All releases on GitHubk6 v1.8.3 is here! This patch release includes:
- A browser fix for clicking a missing element handle
- Security updates for
golang.org/x/netandgithub.com/klauspost/compress - Updates to the JavaScript runtime and other dependencies
Security updates
- #6667 Updates
golang.org/x/nettov0.62.0andgithub.com/klauspost/compresstov1.20.4to address known vulnerabilities.
Bug fixes
- #6617 Fixes a browser panic when
click()is called on a missing element handle. The call now throws a catchableTypeError.
Maintenance and internal improvements
- #6650 Updates Sobek and
regexp2, and refreshes JavaScript compatibility and TC39 test expectations. - #6648 Updates
github.com/andybalholm/brotlitov1.2.8. - #6600 Updates
github.com/grafana/k6providertov0.5.1. - #6601 Updates
golang.org/x/crypto,x/sync,x/sys,x/term,x/text, andx/time. - #6653 Adjusts leak checks for Go tip on Windows.
- #6649 Updates the
v1.xlint and CI workflows.