NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #2294 by repository stars
Last release 3 days ago
05 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Rarely documented
notes for 5 of 27 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
100 releases · first in 2021
One column per quarter.
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
To bring PrivateLoadZone mode closer to how other modes of testing in GCk6 work, we've expanded the API and what is configured through it. ( issue )
To bring PrivateLoadZone mode closer to how other modes of testing in GCk6 work, we've expanded the API and what is configured through it. (issue)
.spec.args in TestRun CRDTo fully accommodate the above change, a new field .spec.args was added to a TestRun CRD (PR): it takes an array of strings as arguments to k6, which allows setting arbitrary values as tags and env vars of the k6 process. This is, in effect, a way to bypass the complex tricks around string escaping and the inability to set certain values in .spec.arguments (issue), which was a fundamental limitation of that configuration type. The new way to set k6 arguments in TestRun CRD looks like this:
apiVersion: k6.io/v1alpha1
kind: TestRun
metadata:
name: k6-sample-with-args
spec:
parallelism: 2
script:
configMap:
name: k6-test
file: test.js
args:
- --tag
- note=arbitrary values are possible "here" # passed to k6 as is
- -e
- PRICE_LABEL=$$100 # passed to k6 as is
- -e
- BASE_URL=$(BASE_URL) # Kubernetes env var will be expanded
runner:
env:
- name: BASE_URL
value: https://test.k6.ioWhen .spec.args is present, it overrides .spec.arguments. But if .spec.args is empty, the .spec.arguments work as before, so this change is backwards compatible.
The PLZ tests were switched to using the .spec.args under the hood.
Warning
Please make sure to update CRD definitions properly during upgrade, to avoid any issues.
We finally have a fix for trying to create start / stop jobs more than once (issue). It has been spamming logs with false positive messages. Thanks, @Guflly!
The bug with invalid lengthy names during Helm chart installation was solved by deliberately trimming all resource names to 63 characters. Thanks, @moko-poi!
Warning
If you have been using a lengthy release name with service.enabled: false, you might encounter the rename of Deployment as part of this upgrade. On a healthy cluster, it shouldn't be an issue. But it makes sense to keep an eye on observability setup, if any: watch out if it picks up the change in name correctly in this case.
kube-api-linter was added as a custom plugin to our golangci-lint workflow, with some basic rules enabled already. Thanks, @moko-poi!
There was a cleanup of potential bugs with shared state around the GCk6 client in the TestRun controller. That should make k6-operator more reliable at scale.
A small refactor to improve readability of the default values in the code (issue). Thanks, @moko-poi!
Key dependencies update:
Full changelog: v1.5.0...v1.6.0
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
.spec.scuttle is deprecated and will be removed in the future. Please see the docs on how to set up Istio and update your TestRun s. Note: This change…
.spec.scuttle is deprecated and will be removed in the future. Please see the docs on how to set up Istio and update your TestRuns. Note: This change comes with the RBAC update to publish Kubernetes events.
We've added the configuration of schedulerName to all Pods in the TestRun. Thanks, @The-Flash-Routine!
Initializer Shell command was refactored into a multi-line script to track additional error cases, like missing k6 binary and other non-standard errors from k6 invocation (issue). Now all such cases are logged by the initializer Pod, and its Job fails explicitly. This should help diagnose the errors in the k6 setup.
terminationGracePeriodSeconds is set to the default value (30s) in all Pods, removing an accidental drift between runners and other Pods. We do not recommend interrupting k6 runners, but if it can't be avoided, this change should help preserve some useful data.
There was a bug in the Helm chart causing erratic and hard-to-diagnose behaviour of the PrivateLoadZone CRD, which was fixed and released as chart 4.4.1. Full description of the impact is here.
This is another maintenance-heavy release.
e2e tests were switched to using expect() instead of fail() in k6 tests: that guarantees the call to teardown in case of failure. This is esp. important in tests based on the xk6-environment.
There has been a lot of work ongoing to improve our security stance:
GO_BUILDER_IMG argument is no longer supported.Notable dependency updates:
go.k6.io/k6/v2 instead of v1 as beforegolangci/golangci-lint to v2.12.1Last but not least, the release process was heavily revamped to maximize the amount of automation and reduce the maintainer's toil.
Full changelog: v1.4.0...v1.5.0
We have changed the hard-coded tag passed to all runner pods: previously, it was job_name . Now, it is testrun_name . As described in the issue , this
We have changed the hard-coded tag passed to all runner pods: previously, it was job_name. Now, it is testrun_name. As described in the issue, this change removes duplicate metrics and reduces cardinality.
Warning
Some dashboards around k6-operator test runs might need updating.
E.g., if you have a query like this:
my_cool_metric{job_name=~"my-testrun-.*"}
You should change it to:
my_cool_metric{testrun_name="my-testrun", instance_id=~".*"}
PrivateLoadZone tests now support secrets out-of-the-box, issue. See more details about this feature in the docs and in the video here.
TLDR: if you have secrets stored in Grafana Cloud k6 and a script that references them, you can run this script with PrivateLoadZone as well.
We expanded the pod template in the PrivateLoadZone CRD to support labels and annotations, issue. This configuration will be applied to all Pods started by k6-operator for this PrivateLoadZone.
As mentioned in the release notes for 1.3.0, this is done gradually via relaxation of validation rules. In practice, this means that only a limited number of fields are available at the moment, but there will be more in the future.
Note
PrivateLoadZone doesn't support mutability yet, so it must be re-created anew if you want to add a new config to it.
Notable version updates:
go.mod at Go 1.25golangci-lint at 2.10.1There has been a lot of polishing around unit tests and e2e tests to improve overall structure and simplify onboarding and long-term maintenance. Among those changes, xk6-environment was finally refactored, addressing a long-running tech debt, and can now be built easily from its repo. This extension is used for isolation of e2e tests.
Lastly, there is now a govulncheck GitHub Action workflow, PR, running weekly and for PRs.
Full Changelog: v1.3.2...v1.4.0
Nothing published for this version
A patch release to fix a #757 - to allow any kind of values in environment variables in initializer pod.
A patch release to fix a #757 - to allow any kind of values in environment variables in initializer pod.
Full Changelog: v1.3.1...v1.3.2
Nothing published for this version
A patch release to fix a bug with environment variables in cloud output mode. Previously, duration of the tests set via environment variables could be
A patch release to fix a bug with environment variables in cloud output mode. Previously, duration of the tests set via environment variables could be calculated incorrectly at initializer step, resulting in potential timeouts from Grafana Cloud k6.
Full Changelog: v1.3.0...v1.3.1
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
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
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
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 →