<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Grafana Labs</title><link>https://grafana.com/docs/k6/v2.3.x/reference/</link><description>Recent content in Reference on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/k6/v2.3.x/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Integrations &amp; Tools</title><link>https://grafana.com/docs/k6/v2.3.x/reference/integrations/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/reference/integrations/</guid><content><![CDATA[&lt;h1 id=&#34;integrations--tools&#34;&gt;Integrations &amp;amp; Tools&lt;/h1&gt;
&lt;h2 id=&#34;test-authoring&#34;&gt;Test authoring&lt;/h2&gt;
&lt;p&gt;Codeless tools to speed up the test creation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/test-authoring/test-builder/&#34;&gt;Test Builder&lt;/a&gt; - Inspired by the Postman API Builder. Codeless UI tool to generate a k6 test quickly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ai-assistants-mcp&#34;&gt;AI assistants (MCP)&lt;/h2&gt;
&lt;p&gt;MCP (Model Context Protocol) integrations help you author and run k6 scripts from MCP-compatible editors and assistants.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To validate and run scripts, browse documentation, and generate tests using an AI assistant, refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/configure-ai-assistant/&#34;&gt;Configure your AI assistant&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To scaffold k6 skills and auto-register the k6 MCP server in supported editors with one command, refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/configure-ai-assistant/bootstrap-with-k6-x-agent/&#34;&gt;Bootstrap your editor with &lt;code&gt;k6 x agent&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ide-extensions&#34;&gt;IDE extensions&lt;/h2&gt;
&lt;p&gt;Code k6 scripts in your IDE of choice. Empower your development workflow with IDE extensions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=k6.k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Visual Studio Code Extension&lt;/a&gt; - Run k6 tests from VS Code.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://plugins.jetbrains.com/plugin/16141-k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;IntelliJ IDEA&lt;/a&gt; - Run k6 tests from IntelliJ IDEs.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/configure-k6-intellisense/&#34;&gt;IntelliSense&lt;/a&gt; - Get code autocompletion and in-context documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;converters&#34;&gt;Converters&lt;/h2&gt;
&lt;p&gt;Generate a k6 script quickly from an existing file.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/k6io/har-to-k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;HAR-to-k6&lt;/a&gt; - Convert a HAR file to a k6 script.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/apideck-libraries/postman-to-k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Postman-to-k6&lt;/a&gt; - Convert a Postman collection to a k6 script.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/load-testing-your-api-with-swagger-openapi-and-k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenAPI generator&lt;/a&gt; - Convert a Swagger/OpenAPI specification to a k6 script.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;result-store-and-visualization&#34;&gt;Result store and visualization&lt;/h2&gt;
&lt;p&gt;k6 can output test results to various formats and 3rd-party services.&lt;/p&gt;
&lt;div class=&#34;column-list&#34;&gt;
  &lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/amazon-cloudwatch/&#34;&gt;Amazon CloudWatch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/apache-kafka/&#34;&gt;Apache Kafka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/csv/&#34;&gt;CSV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/datadog/&#34;&gt;Datadog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/dynatrace/&#34;&gt;Dynatrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/elasticsearch/&#34;&gt;Elasticsearch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/cloud/&#34;&gt;Grafana Cloud k6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/grafana-cloud-prometheus/&#34;&gt;Grafana Cloud Prometheus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/grafana-dashboards/&#34;&gt;Grafana Dashboards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/influxdb/&#34;&gt;InfluxDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/json/&#34;&gt;JSON file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/netdata/&#34;&gt;Netdata&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/new-relic/&#34;&gt;New Relic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/prometheus-remote-write/&#34;&gt;Prometheus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/statsd/&#34;&gt;StatsD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/timescaledb/&#34;&gt;TimescaleDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;h2 id=&#34;continuous-integration-and-continuous-delivery&#34;&gt;Continuous Integration and Continuous Delivery&lt;/h2&gt;
&lt;p&gt;By automating load testing with your CI / CD tools, you can quickly see when a code change has introduced a performance regression.&lt;/p&gt;
&lt;div class=&#34;column-list&#34;&gt;
  &lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-k6-with-aws-codebuild/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AWS CodeBuild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-load-testing-with-azure-pipelines/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Azure Pipelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-k6-with-bamboo/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Bamboo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-k6-with-buddy-devops/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Buddy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-load-testing-with-circleci/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CircleCI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.flagger.app/usage/webhooks#k6-load-tester&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Flagger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/load-testing-using-github-actions/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;GitHub Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-load-testing-with-gitlab/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-k6-with-google-cloud-build/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google Cloud Build&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/integrating-load-testing-with-jenkins/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jenkins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/performance-testing-in-keptn-using-k6/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Keptn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/load-testing-using-teamcity-and-k6/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TeamCity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;h2 id=&#34;chaos-engineering&#34;&gt;Chaos engineering&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://k6.io/blog/chaos-engineering-with-k6-and-steadybit&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Steadybit&lt;/a&gt; - Using k6 and Steadybit for chaos engineering.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/testing-guides/injecting-faults-with-xk6-disruptor/xk6-disruptor/&#34;&gt;xk6-disruptor&lt;/a&gt; - A k6 extension for injecting faults into k6 tests.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://chaostoolkit.org/drivers/k6/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ChaosToolkit&lt;/a&gt; - A collection of k6 actions and probes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://litmuschaos.github.io/litmus/experiments/categories/load/k6-loadgen/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;LitmusChaos&lt;/a&gt; - Simulate load generation to the target application as a part of chaos testing on Kubernetes using Litmus.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;test-management&#34;&gt;Test management&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/microsoftazure/load-testing-with-azure-devops-and-k6-839be039b68a&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Azure Test Plan&lt;/a&gt; - k6 load testing with Azure DevOps.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/kwidera/introducing-testrail-in-you-k6-tests-eck&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TestRail&lt;/a&gt; - Introducing TestRail in your k6 tests.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubeshop.github.io/testkube/test-types/executor-k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Testkube&lt;/a&gt; - Load testing with Testkube.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.tracetest.io/tools-and-integrations/integrations/k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tracetest&lt;/a&gt; - Trace-based testing with Tracetest.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.getxray.app/display/XRAYCLOUD/Performance&amp;#43;and&amp;#43;load&amp;#43;testing&amp;#43;with&amp;#43;k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Xray&lt;/a&gt; - Using Xray to validate test results in JIRA.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;mailto:support@k6.io&#34;&gt;Reach out to us&lt;/a&gt; if you have a tool or add-on that works well with k6, and we will list it here!&lt;/p&gt;
]]></content><description>&lt;h1 id="integrations--tools">Integrations &amp;amp; Tools&lt;/h1>
&lt;h2 id="test-authoring">Test authoring&lt;/h2>
&lt;p>Codeless tools to speed up the test creation.&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="/docs/k6/v2.3.x/using-k6/test-authoring/test-builder/">Test Builder&lt;/a> - Inspired by the Postman API Builder. Codeless UI tool to generate a k6 test quickly.&lt;/li>
&lt;/ul>
&lt;h2 id="ai-assistants-mcp">AI assistants (MCP)&lt;/h2>
&lt;p>MCP (Model Context Protocol) integrations help you author and run k6 scripts from MCP-compatible editors and assistants.&lt;/p></description></item><item><title>Archive Command</title><link>https://grafana.com/docs/k6/v2.3.x/reference/archive/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/reference/archive/</guid><content><![CDATA[&lt;h1 id=&#34;archive-command&#34;&gt;Archive Command&lt;/h1&gt;
&lt;h2 id=&#34;what-is-an-archive&#34;&gt;What is an archive?&lt;/h2&gt;
&lt;p&gt;When the complexity of a k6 test goes beyond a single JS file it quickly becomes cumbersome to
find and bundle up all the dependencies (JS, 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/init-context/open/&#34;&gt;open()&lt;/a&gt;&amp;rsquo;ed data files, TLS
client certs, etc.). k6 archives are a native way to bundle and distribute, or share, a test.&lt;/p&gt;
&lt;p&gt;A k6 archive is simply a &lt;a href=&#34;https://en.wikipedia.org/wiki/Tar_%28computing%29&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;tar&lt;/a&gt; file with all
files needed to execute a k6 test.&lt;/p&gt;
&lt;h2 id=&#34;how-to-create-and-run-an-archive&#34;&gt;How to create and run an archive&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s say that you normally execute a test using:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now if you replace &lt;code&gt;run&lt;/code&gt; with &lt;code&gt;archive&lt;/code&gt; k6 will run the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/test-lifecycle/&#34;&gt;init stage&lt;/a&gt; of
the code to determine which JS files are being imported and what data files are being

    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/init-context/open/&#34;&gt;&lt;code&gt;open()&lt;/code&gt;&lt;/a&gt;&amp;rsquo;ed and bundles all of the files up
into a tar file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 archive script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This would produce a tar file on disk called &lt;code&gt;archive.tar&lt;/code&gt; (you can change that by setting
&lt;code&gt;-O filename.tar&lt;/code&gt;). It&amp;rsquo;s also easy to run an archive, as &lt;code&gt;k6 run&lt;/code&gt; is compatible with archive
files you can execute:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;-overriding-options&#34;&gt;⚠️ Overriding options&lt;/h3&gt;
&lt;p&gt;As always you can override options using CLI flags or environment variables when
running an archive.&lt;/p&gt;&lt;/blockquote&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 run archive.tar&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;use-cases&#34;&gt;Use cases&lt;/h2&gt;
&lt;p&gt;Archive files have a variety of use cases, but they all share the common need to bundle
of a test&amp;rsquo;s files into a single file for easy distribution.&lt;/p&gt;
&lt;h3 id=&#34;sharing-a-test&#34;&gt;Sharing a test&lt;/h3&gt;
&lt;p&gt;By bundling up a test into an archive it&amp;rsquo;s easy to share the test with your teammates by
simply storing or sending a single tar file. As we saw in the previous section, your teammates
can execute the archive by running &lt;code&gt;k6 run archive.tar&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;preparing-tests-for-ci&#34;&gt;Preparing tests for CI&lt;/h3&gt;
&lt;p&gt;If you have a complex CI pipeline and your load tests are separated from your application
code, you could store k6 archives as build artifacts whenever the load test source code
is changed, and then pull in those k6 archives from the artifacts storage for test execution
as needed.&lt;/p&gt;
&lt;h3 id=&#34;k6-cloud-execution&#34;&gt;k6 Cloud Execution&lt;/h3&gt;
&lt;p&gt;k6 offers a commercial service for running large scale and geographically
distributed load tests on managed cloud infrastructure. Cloud executed tests are triggered
from the k6 command-line via the &lt;code&gt;k6 cloud run script.js&lt;/code&gt; command (similar to &lt;code&gt;k6 run&lt;/code&gt;) which will
trigger an implicit creation of a k6 archive that is uploaded and distributed to k6 cloud
load generators for execution.&lt;/p&gt;
&lt;h4 id=&#34;uploading-an-archive-to-k6-cloud&#34;&gt;Uploading an archive to k6 Cloud&lt;/h4&gt;
&lt;p&gt;Under certain scenarios, such as scheduled executions, users might want to upload an archive to k6 Cloud without triggering
a test execution in the process.&lt;/p&gt;
&lt;p&gt;To cater to this use case, the &lt;code&gt;k6 cloud upload&lt;/code&gt; command was introduced. This command allows users to upload an archive to k6 Cloud
without triggering a test execution. The command syntax is as follows:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud upload archive.tar&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;distributed-execution&#34;&gt;Distributed Execution&lt;/h3&gt;
&lt;p&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/set-up-distributed-k6/usage/executing-k6-scripts-with-testrun-crd/#multi-file-tests&#34;&gt;k6-operator&lt;/a&gt; can distribute a k6 test across a Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;When a k6 test has multiple files, you can use the archive functionality to bundle the k6 test in a single &lt;em&gt;archived&lt;/em&gt; file and pass this file to run the test.&lt;/p&gt;
&lt;h2 id=&#34;contents-of-an-archive-file&#34;&gt;Contents of an archive file&lt;/h2&gt;
&lt;p&gt;An archive contains the original source of the JS code, any 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/init-context/open/&#34;&gt;&lt;code&gt;open()&lt;/code&gt;&lt;/a&gt;&amp;rsquo;ed
data files, 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/protocols/ssl-tls/ssl-tls-client-certificates/&#34;&gt;SSL/TLS client certificates&lt;/a&gt; as well as a
&lt;code&gt;metadata.json&lt;/code&gt; with all the options (a cascading of the options set on the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;CLI&lt;/a&gt;,
via 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;Environment variables&lt;/a&gt; and 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;in-script options&lt;/a&gt;
(&lt;code&gt;export let options = {...}&lt;/code&gt;)).&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s create an archive from the following sample test. Here is the layout in the filesystem
of the files:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;/home/johndoe/tests/api-test $ tree
.
├── utils
|   └-- common.js
├── endpoints
|   ├── login.js
|   └-- search.js
├── node_modules
|   └-- somelib
|       └-- lib.js
├── data
|   └-- users.json
└-- script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now, if the current working directory is &lt;code&gt;/home/johndoe/tests/api-test/&lt;/code&gt; and we run
&lt;code&gt;k6 archive script.js&lt;/code&gt; we&amp;rsquo;d get a tar file called &lt;code&gt;archive.tar&lt;/code&gt; (you can change the name of the
file using &lt;code&gt;-O filename.tar&lt;/code&gt;). The contents of the archive file would look like something like
this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;├-- data
├-- files
|   └-- home
|       └-- nobody &amp;lt;-- the username has been anonymized (see section further down)
|           └-- tests
|               └-- api-test
|                   └-- data
|                       └-- users.json
├-- metadata.json
└-- scripts
    └-- home
        └-- nobody &amp;lt;-- the username has been anonymized (see section further down)
            └-- tests
                └-- api-test
                    ├-- script.js
                    ├-- utils
                    |   └-- common.js
                    ├-- endpoints
                    |   ├-- login.js
                    |   └-- search.js
                    └-- node_modules
                        └-- somelib
                            └-- lib.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Breaking down the file structure we get:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;data&lt;/strong&gt; contains the source code of the main JS file (&lt;code&gt;script.js&lt;/code&gt; in this example).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;files&lt;/strong&gt; contains the full original directory tree of all 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/init-context/open/&#34;&gt;&lt;code&gt;open()&lt;/code&gt;&lt;/a&gt;&amp;rsquo;ed data files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;metadata.json&lt;/strong&gt; The resolved &amp;ldquo;default&amp;rdquo; options for this test based on 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;CLI flags&lt;/a&gt;,

    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;Environment variables&lt;/a&gt; and 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;in-script options&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;scripts&lt;/em&gt;&lt;/strong&gt; contains the full original directory tree of all &lt;code&gt;import&lt;/code&gt;&amp;lsquo;ed JS dependencies.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;#34;type&amp;#34;: &amp;#34;js&amp;#34;,
  &amp;#34;options&amp;#34;: {
    &amp;#34;paused&amp;#34;: null,
    &amp;#34;vus&amp;#34;: null,
    &amp;#34;duration&amp;#34;: null,
    &amp;#34;iterations&amp;#34;: null,
    &amp;#34;stages&amp;#34;: null,
    &amp;#34;setupTimeout&amp;#34;: null,
    &amp;#34;teardownTimeout&amp;#34;: null,
    &amp;#34;rps&amp;#34;: null,
    &amp;#34;maxRedirects&amp;#34;: null,
    &amp;#34;userAgent&amp;#34;: null,
    &amp;#34;batch&amp;#34;: null,
    &amp;#34;batchPerHost&amp;#34;: null,
    &amp;#34;httpDebug&amp;#34;: null,
    &amp;#34;insecureSkipTLSVerify&amp;#34;: null,
    &amp;#34;tlsCipherSuites&amp;#34;: null,
    &amp;#34;tlsVersion&amp;#34;: {
      &amp;#34;min&amp;#34;: &amp;#34;&amp;#34;,
      &amp;#34;max&amp;#34;: &amp;#34;&amp;#34;
    },
    &amp;#34;tlsAuth&amp;#34;: null,
    &amp;#34;throw&amp;#34;: null,
    &amp;#34;thresholds&amp;#34;: null,
    &amp;#34;blacklistIPs&amp;#34;: null,
    &amp;#34;hosts&amp;#34;: null,
    &amp;#34;noConnectionReuse&amp;#34;: null,
    &amp;#34;ext&amp;#34;: null,
    &amp;#34;summaryTrendStats&amp;#34;: null,
    &amp;#34;systemTags&amp;#34;: [
      &amp;#34;url&amp;#34;,
      &amp;#34;name&amp;#34;,
      &amp;#34;check&amp;#34;,
      &amp;#34;error&amp;#34;,
      &amp;#34;tls_version&amp;#34;,
      &amp;#34;method&amp;#34;,
      &amp;#34;subproto&amp;#34;,
      &amp;#34;status&amp;#34;,
      &amp;#34;group&amp;#34;,
      &amp;#34;proto&amp;#34;
    ],
    &amp;#34;tags&amp;#34;: null
  },
  &amp;#34;filename&amp;#34;: &amp;#34;/home/johndoe/tests/api-test/script.js&amp;#34;,
  &amp;#34;pwd&amp;#34;: &amp;#34;/home/johndoe/tests/api-test/&amp;#34;,
  &amp;#34;env&amp;#34;: {}
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;what-an-archive-file-does-not-contain&#34;&gt;What an archive file does not contain&lt;/h2&gt;
&lt;p&gt;We try to be cautious with what we include in an archive file. Some things we do to that end:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We anonymize the username found in any path to JS and data file dependencies&lt;/li&gt;
&lt;li&gt;By default, k6 omits environment variables from the system in the archive.
However, if you use the flag &lt;code&gt;--include-system-env-vars&lt;/code&gt;, k6 includes the environment variables in the archive (along with any variables passed with &lt;code&gt;--env&lt;/code&gt;).
To avoid including system environment variables in the archive, you can use the k6 archive flag &lt;code&gt;--exclude-env-vars&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="archive-command">Archive Command&lt;/h1>
&lt;h2 id="what-is-an-archive">What is an archive?&lt;/h2>
&lt;p>When the complexity of a k6 test goes beyond a single JS file it quickly becomes cumbersome to
find and bundle up all the dependencies (JS,
&lt;a href="/docs/k6/v2.3.x/javascript-api/init-context/open/">open()&lt;/a>&amp;rsquo;ed data files, TLS
client certs, etc.). k6 archives are a native way to bundle and distribute, or share, a test.&lt;/p></description></item><item><title>Cloud commands</title><link>https://grafana.com/docs/k6/v2.3.x/reference/cloud-commands/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/reference/cloud-commands/</guid><content><![CDATA[&lt;h1 id=&#34;cloud-commands&#34;&gt;Cloud commands&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;k6 cloud&lt;/code&gt; command and its subcommands run and manage tests in Grafana Cloud k6 from the command line. Use them to authenticate, run or upload tests, and inspect the projects, tests, and load zones available in your stack.&lt;/p&gt;
&lt;h2 id=&#34;authentication&#34;&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Every &lt;code&gt;k6 cloud&lt;/code&gt; subcommand requires an API token and a configured stack. Authenticate once with &lt;a href=&#34;#k6-cloud-login&#34;&gt;&lt;code&gt;k6 cloud login&lt;/code&gt;&lt;/a&gt;, or set the &lt;code&gt;K6_CLOUD_TOKEN&lt;/code&gt; and &lt;code&gt;K6_CLOUD_STACK_ID&lt;/code&gt; environment variables:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;K6_CLOUD_TOKEN=&amp;lt;YOUR_API_TOKEN&amp;gt; K6_CLOUD_STACK_ID=&amp;lt;YOUR_STACK_ID&amp;gt; k6 cloud run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For instructions on how to generate a token, refer to &lt;a href=&#34;/docs/grafana-cloud/testing/k6/author-run/tokens-and-cli-authentication/&#34;&gt;Tokens and CLI authentication&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;k6-cloud-login&#34;&gt;k6 cloud login&lt;/h2&gt;
&lt;p&gt;Authenticate with Grafana Cloud k6 and save the token and stack to the k6 configuration file so that later &lt;code&gt;k6 cloud&lt;/code&gt; commands can reuse them. Run it without flags to be prompted interactively for your token and stack:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud login&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also pass the values directly, where the stack is a full URL or a slug:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud login --token &amp;lt;YOUR_API_TOKEN&amp;gt; --stack &amp;lt;YOUR_STACK_URL_OR_SLUG&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Option&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;-t&lt;/code&gt;, &lt;code&gt;--token&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The API token to authenticate with.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--stack&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The stack (URL or slug) where commands run by default.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;-s&lt;/code&gt;, &lt;code&gt;--show&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Display the saved token and stack information, then exit.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;-r&lt;/code&gt;, &lt;code&gt;--reset&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Reset the stored token and stack information.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;For the full cloud testing workflow, refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/run-k6-test-script/#run-a-test-using-grafana-cloud-k6&#34;&gt;Run a k6 test script&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;k6-cloud-run&#34;&gt;k6 cloud run&lt;/h2&gt;
&lt;p&gt;Run a test in Grafana Cloud k6. k6 builds an 
    &lt;a href=&#34;/docs/k6/v2.3.x/reference/archive/&#34;&gt;archive&lt;/a&gt; from your script and its resources, uploads it, and runs the test on cloud infrastructure while streaming status to your terminal:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To run the test locally and stream only the results to Grafana Cloud, use &lt;code&gt;--local-execution&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud run --local-execution script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;k6 cloud run&lt;/code&gt; accepts the same options as 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/reference/&#34;&gt;&lt;code&gt;k6 run&lt;/code&gt;&lt;/a&gt;, plus cloud-specific flags such as &lt;code&gt;--exit-on-running&lt;/code&gt; and &lt;code&gt;--show-logs&lt;/code&gt;. For local execution and result streaming, refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/real-time/cloud/&#34;&gt;Cloud output&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;k6-cloud-upload&#34;&gt;k6 cloud upload&lt;/h2&gt;
&lt;p&gt;Upload a test to Grafana Cloud k6 without running it. This uploads the 
    &lt;a href=&#34;/docs/k6/v2.3.x/reference/archive/&#34;&gt;archive&lt;/a&gt; k6 produces from your script and its resources:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud upload script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;k6-cloud-project-list&#34;&gt;k6 cloud project list&lt;/h2&gt;
&lt;p&gt;List all projects in the configured stack.&lt;/p&gt;
&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud project list [flags]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;options&#34;&gt;Options&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Option&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Output the project list as a JSON array. Without this flag, the output is a human-readable table.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;output&#34;&gt;Output&lt;/h3&gt;
&lt;p&gt;The default output is a table with the project &lt;code&gt;ID&lt;/code&gt;, &lt;code&gt;NAME&lt;/code&gt;, and whether it&amp;rsquo;s the stack&amp;rsquo;s &lt;code&gt;DEFAULT&lt;/code&gt; project:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;text&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-text&#34;&gt;Projects for https://my-team.grafana.net:

ID       NAME               DEFAULT
123456   default            yes
234567   Checkout service   no&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;k6-cloud-test-list&#34;&gt;k6 cloud test list&lt;/h2&gt;
&lt;p&gt;List the load tests of a Grafana Cloud k6 project.&lt;/p&gt;
&lt;p&gt;The project to list tests for is resolved in the following order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;--project-id&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;K6_CLOUD_PROJECT_ID&lt;/code&gt; environment variable (cloud config &lt;code&gt;projectID&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The default project of the configured stack, populated by &lt;code&gt;k6 cloud login&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If none of these resolve to a project, the command returns an error.&lt;/p&gt;
&lt;h3 id=&#34;usage-1&#34;&gt;Usage&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud test list [flags]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;options-1&#34;&gt;Options&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Option&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--project-id&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;ID of the project to list tests for. Defaults to the configured project.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Output the test list as a JSON array. Without this flag, the output is a human-readable table.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;output-1&#34;&gt;Output&lt;/h3&gt;
&lt;p&gt;The default output is a table with each test&amp;rsquo;s &lt;code&gt;ID&lt;/code&gt;, &lt;code&gt;NAME&lt;/code&gt;, and &lt;code&gt;CREATED&lt;/code&gt; and &lt;code&gt;UPDATED&lt;/code&gt; timestamps (in UTC):&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;text&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-text&#34;&gt;Tests in project 123456:

ID       NAME              CREATED            UPDATED
789012   Checkout flow     2026-01-15 09:30   2026-02-01 14:22
789013   Homepage load     2026-01-20 11:05   2026-01-28 08:47&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;k6-cloud-load-zone-list&#34;&gt;k6 cloud load-zone list&lt;/h2&gt;
&lt;p&gt;List all load zones available in the configured stack, including the public (Grafana-managed) zones and any &lt;a href=&#34;/docs/grafana-cloud/testing/k6/author-run/private-load-zone-v2/&#34;&gt;private load zones&lt;/a&gt; you&amp;rsquo;ve set up. Use it to confirm a zone&amp;rsquo;s identifier and whether it&amp;rsquo;s currently usable before you reference it from a script.&lt;/p&gt;
&lt;h3 id=&#34;usage-2&#34;&gt;Usage&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 cloud load-zone list [flags]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;options-2&#34;&gt;Options&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Option&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Output the load zone list as a JSON array. Without this flag, the output is a human-readable table.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;output-2&#34;&gt;Output&lt;/h3&gt;
&lt;p&gt;The default output is a table with each zone&amp;rsquo;s &lt;code&gt;ID&lt;/code&gt; (the identifier you reference from a script, such as &lt;code&gt;amazon:us:ashburn&lt;/code&gt;), &lt;code&gt;NAME&lt;/code&gt;, &lt;code&gt;TYPE&lt;/code&gt; (&lt;code&gt;public&lt;/code&gt; or &lt;code&gt;private&lt;/code&gt;), and whether it&amp;rsquo;s currently &lt;code&gt;AVAILABLE&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;text&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-text&#34;&gt;Load zones for https://my-team.grafana.net:

ID                    NAME                     TYPE      AVAILABLE
amazon:us:ashburn     Ashburn, US (Amazon)     public    yes
amazon:sa:cape town   Cape Town, SA (Amazon)   public    yes
my-cluster            My private cluster       private   no&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With &lt;code&gt;--json&lt;/code&gt;, the same data is emitted as a JSON array:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;[
  {
    &amp;#34;id&amp;#34;: 1,
    &amp;#34;k6_load_zone_id&amp;#34;: &amp;#34;amazon:us:ashburn&amp;#34;,
    &amp;#34;name&amp;#34;: &amp;#34;Ashburn, US (Amazon)&amp;#34;,
    &amp;#34;public&amp;#34;: true,
    &amp;#34;available&amp;#34;: true
  },
  {
    &amp;#34;id&amp;#34;: 2,
    &amp;#34;k6_load_zone_id&amp;#34;: &amp;#34;my-cluster&amp;#34;,
    &amp;#34;name&amp;#34;: &amp;#34;My private cluster&amp;#34;,
    &amp;#34;public&amp;#34;: false,
    &amp;#34;available&amp;#34;: false
  }
]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To learn how to reference load zones from a test, refer to &lt;a href=&#34;/docs/grafana-cloud/testing/k6/author-run/use-load-zones/&#34;&gt;Declare load zones from the CLI&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="cloud-commands">Cloud commands&lt;/h1>
&lt;p>The &lt;code>k6 cloud&lt;/code> command and its subcommands run and manage tests in Grafana Cloud k6 from the command line. Use them to authenticate, run or upload tests, and inspect the projects, tests, and load zones available in your stack.&lt;/p></description></item><item><title>Glossary</title><link>https://grafana.com/docs/k6/v2.3.x/reference/glossary/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/reference/glossary/</guid><content><![CDATA[&lt;h1 id=&#34;glossary&#34;&gt;Glossary&lt;/h1&gt;
&lt;p&gt;What we talk about when we talk about k6.&lt;/p&gt;
&lt;p&gt;In discussion about k6, some terms have a precise, technical meaning.
If a certain term in these docs confuses you, consult this list for a definition.&lt;/p&gt;
&lt;Glossary&gt;
&lt;div class=&#34;column-list&#34;&gt;
  &lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#application-performance-monitoring&#34;&gt;Application performance monitoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#concurrent-sessions&#34;&gt;Concurrent sessions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#checks&#34;&gt;Checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#custom-resource&#34;&gt;Custom resource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#data-correlation&#34;&gt;Data correlation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#data-parameterization&#34;&gt;Data parameterization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dynamic-data&#34;&gt;Dynamic data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#endurance-testing&#34;&gt;Endurance testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#environment-variables&#34;&gt;Environment variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#execution-segment&#34;&gt;Execution segment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#sobek&#34;&gt;Sobek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#graceful-stop&#34;&gt;Graceful stop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#happy-path&#34;&gt;Happy path&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#http-archive&#34;&gt;HTTP archive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#iteration&#34;&gt;Iteration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#k6-cloud&#34;&gt;k6 Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#k6-options&#34;&gt;k6 options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#kubernetes&#34;&gt;Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#load-test&#34;&gt;Load test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#load-zone&#34;&gt;Load zone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#lifecycle-function&#34;&gt;Lifecycle function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#metric&#34;&gt;Metric&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#metric-sample&#34;&gt;Metric sample&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#operator-pattern&#34;&gt;Operator pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#parallelism&#34;&gt;Parallelism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reliability&#34;&gt;Reliability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#requests-per-second&#34;&gt;Requests per second&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#saturation&#34;&gt;Saturation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scenario&#34;&gt;Scenario&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scenario-executor&#34;&gt;Scenario executor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#smoke-test&#34;&gt;Smoke test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#soak-test&#34;&gt;Soak test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#stability&#34;&gt;Stability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#stress-test&#34;&gt;Stress test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#system-under-test&#34;&gt;System under test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#test-run&#34;&gt;Test run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#test-concurrency&#34;&gt;Test concurrency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#test-duration&#34;&gt;Test duration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#test-script&#34;&gt;Test script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#threshold&#34;&gt;Threshold&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#throughput&#34;&gt;Throughput&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#virtual-user&#34;&gt;Virtual user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#yaml&#34;&gt;YAML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;/Glossary&gt;
&lt;DescriptionList&gt;
&lt;h2 id=&#34;application-performance-monitoring&#34;&gt;Application performance monitoring&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(Or APM)&lt;/em&gt;. The practice of monitoring the performance, availability, and reliability of a system.&lt;/p&gt;
&lt;h2 id=&#34;concurrent-sessions&#34;&gt;Concurrent sessions&lt;/h2&gt;
&lt;p&gt;The number of simultaneous VU requests in a test run.&lt;/p&gt;
&lt;h2 id=&#34;checks&#34;&gt;Checks&lt;/h2&gt;
&lt;p&gt;Checks are true/false conditions that evaluate the content of some value in the JavaScript runtime.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/checks/&#34;&gt;Checks reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;custom-resource&#34;&gt;Custom resource&lt;/h2&gt;
&lt;p&gt;An extension to the &lt;a href=&#34;#kubernetes&#34;&gt;Kubernetes&lt;/a&gt; API.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Kubernetes reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;data-correlation&#34;&gt;Data correlation&lt;/h2&gt;
&lt;p&gt;The process of taking &lt;a href=&#34;#dynamic-data&#34;&gt;dynamic data&lt;/a&gt; received from the system under test and reusing the data in a subsequent request.
&lt;br/&gt;
&lt;br/&gt;

    &lt;a href=&#34;/docs/k6/v2.3.x/examples/correlation-and-dynamic-data/&#34;&gt;Correlation and dynamic data example&lt;/a&gt;,
    &lt;a href=&#34;/docs/k6/v2.3.x/testing-guides/api-load-testing/#correlation-and-data-parameterization&#34;&gt;Correlation in testing APIs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;data-parameterization&#34;&gt;Data parameterization&lt;/h2&gt;
&lt;p&gt;The process of turning test values into reusable parameters, e.g. through variables and shared arrays.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/examples/data-parameterization/&#34;&gt;Data parameterization examples&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;dynamic-data&#34;&gt;Dynamic data&lt;/h2&gt;
&lt;p&gt;Data that might change or will change during test runs or across test runs. Common examples are order IDs, session tokens, or timestamps.&lt;br/&gt;&lt;br&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/examples/correlation-and-dynamic-data/&#34;&gt;Correlation and dynamic data example&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;endurance-testing&#34;&gt;Endurance testing&lt;/h2&gt;
&lt;p&gt;A synonym for &lt;a href=&#34;#soak-test&#34;&gt;soak testing&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;environment-variables&#34;&gt;Environment variables&lt;/h2&gt;
&lt;p&gt;User-definable values which may be utilized by the operating system and other programs.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/environment-variables/&#34;&gt;Using environment variables&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;execution-segment&#34;&gt;Execution segment&lt;/h2&gt;
&lt;p&gt;A partition, or fractional portion, of an overall &lt;a href=&#34;#test-run&#34;&gt;test run&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/reference/#execution-segment&#34;&gt;The execution-segment options&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;sobek&#34;&gt;Sobek&lt;/h2&gt;
&lt;p&gt;A JavaScript engine written in Go. k6 binaries are embedded with Sobek, enabling test scripting in JavaScript.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/grafana/sobek&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Sobek repository&lt;/a&gt; fork of &lt;a href=&#34;https://github.com/dop251/goja&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;goja&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;graceful-stop&#34;&gt;Graceful stop&lt;/h2&gt;
&lt;p&gt;A period that lets VUs finish an iteration at the end of a load test. Graceful stops prevent abrupt halts in execution.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/scenarios/concepts/graceful-stop/&#34;&gt;Graceful stop reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;happy-path&#34;&gt;Happy path&lt;/h2&gt;
&lt;p&gt;The default system behavior that happens when a known input produces an expected output. A common mistake in performance testing happens when scripts account only for the best case (in other words, the happy path). Most load tests try to discover system errors, so test scripts should include exception handling.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Happy_path&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Happy path (Wikipedia)&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;http-archive&#34;&gt;HTTP archive&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(Or HAR file)&lt;/em&gt;. A file containing logs of browser interactions with the system under test. All included transactions are stored as JSON-formatted text. You can use these archives to generate test scripts (for example, with the har-to-k6 Converter).&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;http://www.softwareishard.com/blog/har-12-spec/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;HAR 1.2 Specification&lt;/a&gt;,
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/test-authoring/create-tests-from-recordings/using-the-har-converter/&#34;&gt;HAR converter&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;iteration&#34;&gt;Iteration&lt;/h2&gt;
&lt;p&gt;A single run in the execution of the &lt;code&gt;default function&lt;/code&gt;, or scenario &lt;code&gt;exec&lt;/code&gt; function. You can set iterations across all VUs, or per VU.&lt;br/&gt;&lt;br/&gt;The 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/test-lifecycle/&#34;&gt;test life cycle&lt;/a&gt; document breaks down each stage of a k6 script, including iterations in VU code.&lt;/p&gt;
&lt;h2 id=&#34;json&#34;&gt;JSON&lt;/h2&gt;
&lt;p&gt;An open standard, human-readable data-serialization format originally derived from JavaScript.&lt;/p&gt;
&lt;h2 id=&#34;k6-cloud&#34;&gt;k6 Cloud&lt;/h2&gt;
&lt;p&gt;The proper name for the entire cloud product, comprising both k6 Cloud Execution and k6 Cloud Test Results.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;/docs/grafana-cloud/testing/k6/&#34;&gt;k6 Cloud docs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;k6-options&#34;&gt;k6 options&lt;/h2&gt;
&lt;p&gt;Values that configure a k6 test run. You can set options with command-line flags, environment variables, and in the script.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;k6 Options&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;kubernetes&#34;&gt;Kubernetes&lt;/h2&gt;
&lt;p&gt;An open-source system for automating the deployment, scaling, and management of containerized applications.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://kubernetes.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Kubernetes website&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;load-test&#34;&gt;Load test&lt;/h2&gt;
&lt;p&gt;A test that assesses the performance of the system under test in terms of concurrent users or requests per second.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/testing-guides/test-types/load-testing/&#34;&gt;Load Testing&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;load-zone&#34;&gt;Load zone&lt;/h2&gt;
&lt;p&gt;The geographical instance from which a test runs.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;/docs/grafana-cloud/testing/k6/author-run/private-load-zone-v2/&#34;&gt;Private load zones&lt;/a&gt;,&lt;a href=&#34;/docs/grafana-cloud/testing/k6/author-run/use-load-zones/&#34;&gt;Declare load zones from the CLI&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;lifecycle-function&#34;&gt;Lifecycle function&lt;/h2&gt;
&lt;p&gt;A function called in a specific sequence in the k6 runtime. The most important lifecycle function is the default function, which runs the VU code.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/test-lifecycle/&#34;&gt;Test lifecycle&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;metric&#34;&gt;Metric&lt;/h2&gt;
&lt;p&gt;A measure of how the system performs during a test run. &lt;code&gt;http_req_duration&lt;/code&gt; is an example of a built-in k6 metric. Besides built-ins, you can also create custom metrics.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/metrics/&#34;&gt;Metrics&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;metric-sample&#34;&gt;Metric sample&lt;/h2&gt;
&lt;p&gt;A single value for a metric in a test run. For example, the value of &lt;code&gt;http_req_duration&lt;/code&gt; from a single VU request.&lt;/p&gt;
&lt;h2 id=&#34;operator-pattern&#34;&gt;Operator pattern&lt;/h2&gt;
&lt;p&gt;Extends &lt;a href=&#34;#kubernetes&#34;&gt;Kubernetes&lt;/a&gt;, enabling cluster management of &lt;a href=&#34;#custom-resource&#34;&gt;custom resources&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/operator/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Kubernetes reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;parallelism&#34;&gt;Parallelism&lt;/h2&gt;
&lt;p&gt;The simultaneous execution of multiple tasks by dividing a problem into smaller independent parts.&lt;/p&gt;
&lt;h2 id=&#34;reliability&#34;&gt;Reliability&lt;/h2&gt;
&lt;p&gt;The probability that a system under test performs as intended.&lt;/p&gt;
&lt;h2 id=&#34;requests-per-second&#34;&gt;Requests per second&lt;/h2&gt;
&lt;p&gt;The rate at which a test sends requests to the system under test.&lt;/p&gt;
&lt;h2 id=&#34;saturation&#34;&gt;Saturation&lt;/h2&gt;
&lt;p&gt;A condition when a system&amp;rsquo;s reaches full resource utilization and can handle no additional request.&lt;/p&gt;
&lt;h2 id=&#34;scenario&#34;&gt;Scenario&lt;/h2&gt;
&lt;p&gt;An object in a test script that makes in-depth configurations to how VUs and iterations are scheduled. With scenarios, your test runs can model diverse traffic patterns.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/scenarios/&#34;&gt;Scenarios reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;scenario-executor&#34;&gt;Scenario executor&lt;/h2&gt;
&lt;p&gt;An property of a &lt;a href=&#34;#scenario&#34;&gt;scenario&lt;/a&gt; that configures VU behavior.&lt;/p&gt;
&lt;p&gt;You can use executors to configure whether to designate iterations as shared between VUs or to run per VU, or to configure or whether the VU concurrency is constant or changing.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/scenarios/executors/&#34;&gt;Executor reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;smoke-test&#34;&gt;Smoke test&lt;/h2&gt;
&lt;p&gt;A regular load test configured for minimum load. Smoke tests verify that the script has no errors and that the system under test can handle a minimal amount of load.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/testing-guides/test-types/smoke-testing/&#34;&gt;Smoke Testing&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;soak-test&#34;&gt;Soak test&lt;/h2&gt;
&lt;p&gt;A test that tries to uncover performance and reliability issues stemming from a system being under pressure for an extended duration.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/testing-guides/test-types/soak-testing/&#34;&gt;Soak Testing&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;stability&#34;&gt;Stability&lt;/h2&gt;
&lt;p&gt;A system under test’s ability to withstand failures and errors.&lt;/p&gt;
&lt;h2 id=&#34;stress-test&#34;&gt;Stress test&lt;/h2&gt;
&lt;p&gt;A test that assess the availability and stability of the system under heavy load.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/testing-guides/test-types/stress-testing/&#34;&gt;Stress Testing&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;system-under-test&#34;&gt;System under test&lt;/h2&gt;
&lt;p&gt;The software that the load test tests. This could be an API, a website, infrastructure, or any combination of these.&lt;/p&gt;
&lt;h2 id=&#34;test-run&#34;&gt;Test run&lt;/h2&gt;
&lt;p&gt;An individual execution of a test script over all configured iterations.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/get-started/running-k6/&#34;&gt;Running k6&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;test-concurrency&#34;&gt;Test concurrency&lt;/h2&gt;
&lt;p&gt;In k6 Cloud, the number of tests running at the same time.&lt;/p&gt;
&lt;h2 id=&#34;test-duration&#34;&gt;Test duration&lt;/h2&gt;
&lt;p&gt;The length of time that a test runs. When duration is set as an option, VU code runs for as many iterations as possible in the length of time specified.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/reference/#duration&#34;&gt;Duration option reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;test-script&#34;&gt;Test script&lt;/h2&gt;
&lt;p&gt;The actual code that defines how the test behaves and what requests it makes, along with all (or at least most) configuration needed to run the test.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/examples/single-request/&#34;&gt;Single Request example&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;threshold&#34;&gt;Threshold&lt;/h2&gt;
&lt;p&gt;A pass/fail criteria that evaluates whether a metric reaches a certain value. Testers often use thresholds to codify SLOs.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/thresholds/&#34;&gt;Threshold reference&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;throughput&#34;&gt;Throughput&lt;/h2&gt;
&lt;p&gt;The rate of successful message delivery. In k6, throughput is measured in requests per second.&lt;/p&gt;
&lt;h2 id=&#34;virtual-user&#34;&gt;Virtual user&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(Or VU)&lt;/em&gt;. The simulated users that run separate and concurrent iterations of your test script.&lt;br/&gt;&lt;br/&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/reference/#vus&#34;&gt;The VU option&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;yaml&#34;&gt;YAML&lt;/h2&gt;
&lt;p&gt;Rhymes with &amp;ldquo;camel,&amp;rdquo; provides a human-readable data-serialization format commonly used for configuration files.&lt;/p&gt;
&lt;/DescriptionList&gt;
]]></content><description>&lt;h1 id="glossary">Glossary&lt;/h1>
&lt;p>What we talk about when we talk about k6.&lt;/p>
&lt;p>In discussion about k6, some terms have a precise, technical meaning.
If a certain term in these docs confuses you, consult this list for a definition.&lt;/p></description></item><item><title>Versioning and stability guarantees</title><link>https://grafana.com/docs/k6/v2.3.x/reference/versioning-and-stability-guarantees/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/reference/versioning-and-stability-guarantees/</guid><content><![CDATA[&lt;h1 id=&#34;versioning-and-stability-guarantees&#34;&gt;Versioning and stability guarantees&lt;/h1&gt;
&lt;p&gt;As innovation sometimes requires introducing bold and extensive changes that might impact the workflow of k6’s consumers, our goal is to ensure stability, predictability, and ease of use for all users of k6, including those leveraging it in the cloud and other products built on top of the open source project.&lt;/p&gt;
&lt;p&gt;In the following sections, we define workflows, guarantees, and constraints applied to k6 software, starting with version v1.0.0.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;This document serves as an explicit allow list policy. Only APIs specifically mentioned within this document are covered by our stability guarantees. Any API not explicitly included is not covered by this policy and may be subject to breaking changes.&lt;/p&gt;
&lt;p&gt;If you believe an API should be added to this allow list but is currently missing, please open a new issue in the &lt;a href=&#34;https://github.com/grafana/k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;k6 repository&lt;/a&gt; to initiate discussion on its potential inclusion.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;versioning-strategy&#34;&gt;Versioning strategy&lt;/h2&gt;
&lt;p&gt;k6 strictly follows the &lt;a href=&#34;https://semver.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Semantic Versioning 2.0.0&lt;/a&gt; versioning scheme. This versioning scheme defines three kinds of software versions, categorizing their relationship to the key concept of breaking changes.&lt;/p&gt;
&lt;h3 id=&#34;breaking-change&#34;&gt;Breaking change&lt;/h3&gt;
&lt;p&gt;As per the &lt;a href=&#34;https://semver.org/spec/v2.0.0.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Semantic Versioning 2.0.0&lt;/a&gt; specification, we define a breaking change as a change to k6 that&amp;rsquo;s not backward compatible.&lt;/p&gt;
&lt;p&gt;Breaking changes imply that the consumer of k6 is expected to make some effort to adapt to the changes being made.&lt;/p&gt;
&lt;h3 id=&#34;major-version&#34;&gt;Major version&lt;/h3&gt;
&lt;p&gt;A major version contains backward incompatible API changes.&lt;/p&gt;
&lt;p&gt;Quoting the &lt;a href=&#34;https://semver.org/#spec-item-8&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SemVer 2.0.0 specification on major versions&lt;/a&gt; directly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Major version X (X.y.z | X &amp;gt; 0) &lt;strong&gt;MUST&lt;/strong&gt; be incremented if any backward-incompatible changes are introduced to the public API. This may also include minor and patch-level changes. Patch and minor versions &lt;strong&gt;MUST&lt;/strong&gt; be reset to 0 when the major version is incremented.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;While it&amp;rsquo;s possible that a new major version with breaking changes may remain compatible with the previous version, this should not be expected.&lt;/p&gt;
&lt;h3 id=&#34;minor-version&#34;&gt;Minor version&lt;/h3&gt;
&lt;p&gt;A minor version contains backward-compatible API additions/changes.&lt;/p&gt;
&lt;p&gt;Quoting the &lt;a href=&#34;https://semver.org/#spec-item-7&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SemVer 2.0.0 specification on minor versions&lt;/a&gt; directly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Minor version Y (x.Y.z | x &amp;gt; 0) &lt;strong&gt;MUST&lt;/strong&gt; be incremented if new, backward-compatible functionality is introduced to the public API.&lt;/em&gt;
&lt;em&gt;It MUST be incremented if any public API functionality is marked as deprecated.&lt;/em&gt;
&lt;em&gt;It MAY be incremented if substantial new functionality or improvements are introduced within the private code.&lt;/em&gt;
&lt;em&gt;It MAY include patch-level changes. The patch version MUST be reset to 0 when the minor version is incremented.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;patch-version&#34;&gt;Patch version&lt;/h3&gt;
&lt;p&gt;A patch version contains bug fixes &lt;strong&gt;that do not affect&lt;/strong&gt; the API.&lt;/p&gt;
&lt;p&gt;Quoting the &lt;a href=&#34;https://semver.org/#spec-item-6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SemVer 2.0.0 specification on patch versions&lt;/a&gt; directly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Patch version Z (x.y.Z | x &amp;gt; 0) &lt;strong&gt;MUST&lt;/strong&gt; be incremented if only backward compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect behavior.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;release-strategy&#34;&gt;Release strategy&lt;/h2&gt;
&lt;p&gt;A k6 release is a set of changes that updates or adds new functionalities to the product, made globally available under a unique and new identifiable version.&lt;/p&gt;
&lt;p&gt;k6 follows and aligns with the &lt;a href=&#34;/docs/release-life-cycle/&#34;&gt;Grafana Labs release stages&lt;/a&gt;. Not all changes follow every step of the release stages in a strict or sequential manner. Most of the changes directly pass from Experimental to General availability (GA).&lt;/p&gt;
&lt;h3 id=&#34;frequency&#34;&gt;Frequency&lt;/h3&gt;
&lt;p&gt;The release schedule for new k6 versions is:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Version&lt;/th&gt;
              &lt;th&gt;Cadence&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Major&lt;/td&gt;
              &lt;td&gt;Once per year&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Minor&lt;/td&gt;
              &lt;td&gt;Every six weeks&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Patch&lt;/td&gt;
              &lt;td&gt;As needed, based on priorities&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;In alignment with the practice observed in the Grafana ecosystem, this allows us to maintain a regular rhythm, offering opportunities for better feature planning, communication, and visibility around releases, as well as regular cleanup of deprecated functionalities, helping reduce technical debt over time.&lt;/p&gt;
&lt;h2 id=&#34;what-is-our-stable-and-supported-api-surface&#34;&gt;What is our stable and supported API surface?&lt;/h2&gt;
&lt;p&gt;In defining the stable API surface for k6, we aim to provide clear and stable interfaces guaranteed to be maintained and supported according to our &lt;a href=&#34;#versioning-strategy&#34;&gt;versioning strategy&lt;/a&gt;. Our stable and supported API surface includes several key components, each critical for our users and their integration workflows.&lt;/p&gt;
&lt;p&gt;Any change to one of the APIs described below will be considered breaking. Note that the following list is intended as an allowlist, and any APIs, libraries, or components not explicitly mentioned are considered excluded. For example, the k6 REST API is an example of an accessible API not covered by the supported API surface.&lt;/p&gt;
&lt;h3 id=&#34;options--command-line-interface&#34;&gt;Options &amp;amp; command-line interface&lt;/h3&gt;
&lt;p&gt;Our stable and supported API surface includes the k6 options set, as exposed to users via the various configuration methods k6 supports: the options object, config file, environment variables, etc.&lt;/p&gt;
&lt;p&gt;The k6 command-line interface (CLI), including commands, subcommands, and flags, is also part of the stable and supported API. These commands are essential for initiating and managing test executions locally and in the cloud.&lt;/p&gt;
&lt;h3 id=&#34;javascript-interpreter&#34;&gt;JavaScript interpreter&lt;/h3&gt;
&lt;p&gt;With k6 scripts written in JavaScript and the environment in which they are executed supporting a specific set of JavaScript syntax and ECMAScript features, the k6 JavaScript interpreter is considered part of the k6 stable and supported API surface.&lt;/p&gt;
&lt;p&gt;This ensures that users can write and execute scripts with predictable behavior and compatibility over the lifespan of their major version of k6.&lt;/p&gt;
&lt;h3 id=&#34;modules&#34;&gt;Modules&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&#34;/docs/k6/latest/javascript-api/&#34;&gt;&lt;em&gt;core&lt;/em&gt; modules&lt;/a&gt; exposed directly to a script by k6, for example, &lt;code&gt;k6&lt;/code&gt;, &lt;code&gt;k6/http&lt;/code&gt;, &lt;code&gt;k6/execution&lt;/code&gt;, are another critical aspect of the k6 experience and of the interface between k6 and its users. As such, they&amp;rsquo;re part of the stable and supported API surface.
It includes any class, properties, methods, function, or relative signature that is part of the module and is publicly exposed and documented.&lt;/p&gt;
&lt;p&gt;The full list of the &lt;em&gt;core&lt;/em&gt; modules is avalilable on the &lt;a href=&#34;/docs/k6/latest/javascript-api/&#34;&gt;JavaScript API&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;Experimental modules, recognizable from their &lt;code&gt;k6/experimental&lt;/code&gt; prefixed import path, are explicitly excluded from the stable and supported API surface.&lt;/p&gt;
&lt;h3 id=&#34;extensions&#34;&gt;Extensions&lt;/h3&gt;
&lt;p&gt;Our stable and supported API surface also includes the extensions API, which empowers internal and external developers to build custom modules and outputs as part of the k6 codebase or as external extensions.&lt;/p&gt;
&lt;p&gt;It covers any package publicly available in &lt;code&gt;go.k6.io/k6/v2&lt;/code&gt;. Consequentially, all the packages under &lt;code&gt;go.k6.io/k6/v2/internal&lt;/code&gt; package are excluded.&lt;/p&gt;
&lt;p&gt;This includes the &lt;a href=&#34;https://pkg.go.dev/go.k6.io/k6/v2/js/modules&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;go.k6.io/k6/v2/js/modules&lt;/a&gt; Go package that internal and external developers have available to build module extensions, as well as the &lt;a href=&#34;https://pkg.go.dev/go.k6.io/k6/v2/output&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;go.k6.io/k6/v2/output&lt;/a&gt; that can be used to build custom outputs for k6.&lt;/p&gt;
&lt;p&gt;It also includes public k6 Go packages that are exposed to developers to facilitate the development of these extensions. For example, the current &lt;a href=&#34;https://pkg.go.dev/go.k6.io/k6/v2/lib&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;go.k6.io/k6/v2/lib&lt;/a&gt; package where the &lt;a href=&#34;https://pkg.go.dev/go.k6.io/k6/v2/lib#State&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;go.k6.io/k6/v2/lib.State&lt;/a&gt; type is placed.&lt;/p&gt;
&lt;h3 id=&#34;output&#34;&gt;Output&lt;/h3&gt;
&lt;p&gt;We guarantee the stability and support of metrics, logs, traces, and profiling outputs that we fully control in an end-to-end flow. This includes the JSON, CSV, cloud metrics, logs and traces outputs, and OpenTelemetry formats while excluding outputs dependent on third-party platforms and protocols.&lt;/p&gt;
&lt;h3 id=&#34;metrics&#34;&gt;Metrics&lt;/h3&gt;
&lt;p&gt;We guarantee the stability of metric names, types, and units. Any changes to these are considered breaking and will be handled according to our &lt;a href=&#34;#versioning-strategy&#34;&gt;versioning strategy&lt;/a&gt;. Doing so ensures that any product or artifact built on top of k6, such as dashboards, can maintain a reliable and consistent experience.&lt;/p&gt;
&lt;h2 id=&#34;deprecation-breaking-changes-and-migration-policy&#34;&gt;Deprecation, breaking changes, and migration policy&lt;/h2&gt;
&lt;h3 id=&#34;breaking-changes&#34;&gt;Breaking changes&lt;/h3&gt;
&lt;p&gt;In a constantly evolving product, &lt;a href=&#34;#breaking-change&#34;&gt;breaking changes&lt;/a&gt; are sometimes unavoidable. They require that k6 users actively react to them because the state after the changes is not backward compatible with the previous state.&lt;/p&gt;
&lt;p&gt;Because we follow the &lt;a href=&#34;https://semver.org/spec/v2.0.0.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SemVer 2.0.0&lt;/a&gt; versioning scheme, we work under the assumption breaking changes will always lead to a new major version. When the k6 team decides to introduce a breaking change, it will automatically define the need for a new major version.&lt;/p&gt;
&lt;p&gt;When k6 releases a new major version, we are expected to be explicit, clearly communicate the breaking changes, and provide instructions for migrating users.&lt;/p&gt;
&lt;p&gt;There are two types of breaking changes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Removal&lt;/li&gt;
&lt;li&gt;Update&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When a breaking change is added, the k6 team will follow the following steps:&lt;/p&gt;
&lt;h4 id=&#34;remove-an-api-or-a-feature&#34;&gt;Remove an API or a feature&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Deprecate a current API or a feature by following the dedicated policy.&lt;/li&gt;
&lt;li&gt;If necessary, add an alternative solution. Ideally, this would be an experimental version within a minor release within the current maintained state. Alternatively, it might be available in a Preview release.&lt;/li&gt;
&lt;li&gt;Provide documentation for the migration path.&lt;/li&gt;
&lt;li&gt;Proceed with removing the API and releasing a new major version.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;update-an-api-or-a-feature&#34;&gt;Update an API or a feature&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Apply the changes, then publish them in the next major version. If the change is significant, it might be convenient to make it available in a Preview release that can support the migration path until a version is globally available.&lt;/li&gt;
&lt;li&gt;Provide documentation for the migration path.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;deprecation&#34;&gt;Deprecation&lt;/h3&gt;
&lt;p&gt;When the k6 team intends to remove an API or a feature, it will be marked as &lt;em&gt;deprecated&lt;/em&gt;. This occurs when an API becomes obsolete, superseded by another API, or otherwise discontinued for business or technological reasons.
Deprecated APIs remain available during their deprecation phase, and we guarantee they will be maintained for the entire lifecycle of the current major version.&lt;/p&gt;
&lt;p&gt;A deprecation will be announced through several layers of communication before it will be officially applied:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Release notes.&lt;/li&gt;
&lt;li&gt;Official documentation.&lt;/li&gt;
&lt;li&gt;When the user directly interacts with the feature.&lt;/li&gt;
&lt;li&gt;An alternative already available is recommended, but it shouldn’t be considered mandatory.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;migration&#34;&gt;Migration&lt;/h3&gt;
&lt;p&gt;When a breaking change is introduced, or an API is superseded, then documentation for a migration guide will be provided to users to help them understand how to move from version to version.
The migration path will be available in the official documentation, and it will be mentioned in all other communication channels.&lt;/p&gt;
&lt;h2 id=&#34;support-and-development-policies&#34;&gt;Support and development policies&lt;/h2&gt;
&lt;p&gt;We define k6 support and development policies according to four states where a k6 version can be implemented. At any given time, we have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The under-development&lt;/strong&gt; version is the next upcoming version of k6. Note that this version might either start a new major version, for example, developing v3.0.0 while the latest release is v2.8.2, or it might be a new minor or patch iteration over the latest release.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The actively maintained&lt;/strong&gt; version is the latest released major version of k6.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The supported&lt;/strong&gt; version is the latest released version of k6 within the previous major version.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The deprecated&lt;/strong&gt; versions are the set of previously released k6 versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As such, during its development and support workflow, the k6 open source project actively develops the next version of k6, maintains the latest major release, supports the previous major version, and doesn&amp;rsquo;t provide any support for releases older than the supported one.&lt;/p&gt;
&lt;p&gt;Any past version of k6 that’s neither being developed, maintained, or supported is considered &lt;strong&gt;deprecated&lt;/strong&gt; and will not receive further updates or development, including bug fixes or security updates. Users are free to use them at their own risk.&lt;/p&gt;
&lt;h3 id=&#34;guidelines&#34;&gt;Guidelines&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Features are not backported&lt;/em&gt; from one major version to any previous one.&lt;/li&gt;
&lt;li&gt;Only changes on the latest release of each support category are provided: &lt;em&gt;at any point in time, there are single officially under-development and actively maintained versions&lt;/em&gt;. We do not support multiple versions of each support path. For example, suppose a bug is found in v1.1.0, and the latest v1.Y.Z published release is v1.3.2. In that case, if and only if the latest release is affected, and the bug or security issue is deemed important enough, only then does the development team define as a priority to publish a fix that will be released in v1.3.3. Users cannot expect a v1.1.1 fix release.&lt;/li&gt;
&lt;li&gt;Other Grafana products, services, and teams building upon k6 are expected to develop their versioning integration built on our support policies.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;bugs--security-issues&#34;&gt;Bugs &amp;amp; Security issues&lt;/h4&gt;
&lt;p&gt;Bugs and security issues come in all shapes and sizes and vary widely in impact. Some are critical, compromising user safety or impacting software functionality, while others are minor annoyances that do not require immediate action.&lt;/p&gt;
&lt;p&gt;The k6 open-source core team, with input from affected stakeholders, is responsible for assessing the severity of these issues.&lt;/p&gt;
&lt;p&gt;We classify bug severity based on their impact on users or product functionality. High-severity bugs prevent a subset of users from using the software properly or at all. Depending on the severity, the team will either release an immediate patch or, for less critical bugs, delay the fix to the next scheduled release.&lt;/p&gt;
&lt;p&gt;Security issues are classified using the CVSS (Common Vulnerability Scoring System) score when available. In its absence, we evaluate the threat in collaboration with the security team and affected teams. This assessment considers the potential threat to customers, users, system health, and data integrity. Like bug fixes, the response will be either an immediate patch release for high-severity issues or a delayed fix for lower-severity issues.&lt;/p&gt;
&lt;h3 id=&#34;guarantees&#34;&gt;Guarantees&lt;/h3&gt;
&lt;h4 id=&#34;under-development&#34;&gt;Under development&lt;/h4&gt;
&lt;p&gt;At any point in the k6 development lifecycle, the next version of k6 is being developed.&lt;/p&gt;
&lt;p&gt;The next version of k6 can be a &lt;a href=&#34;#major-version&#34;&gt;major&lt;/a&gt;, &lt;a href=&#34;#minor-version&#34;&gt;minor&lt;/a&gt;, or &lt;a href=&#34;#patch-version&#34;&gt;patch&lt;/a&gt; one. This developed version is then released according to our &lt;a href=&#34;#versioning-strategy&#34;&gt;versioning strategy and scheme&lt;/a&gt; and becomes the latest maintained version of k6.&lt;/p&gt;
&lt;h4 id=&#34;actively-maintained&#34;&gt;Actively maintained&lt;/h4&gt;
&lt;p&gt;The latest version, released under the currently active &lt;a href=&#34;#major-version&#34;&gt;major version&lt;/a&gt;, is maintained.&lt;/p&gt;
&lt;p&gt;In the event of a bug, security issue, or necessary dependency update:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;If the under-development version is expected to remain within the same &lt;a href=&#34;#major-version&#34;&gt;major version&lt;/a&gt; scope&lt;/strong&gt;, the fix or update is expected to land in said version, which will become, in turn, the next maintained version once released.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If the under-development version is expected to switch to a new &lt;a href=&#34;#major-version&#34;&gt;major version&lt;/a&gt; scope&lt;/strong&gt;, the fix or update will be included in the currently maintained major version scope and released as the latest maintained version (patch).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;supported-k6-version&#34;&gt;Supported k6 version&lt;/h4&gt;
&lt;p&gt;At any point, the prior major version will be in &lt;strong&gt;support&lt;/strong&gt; mode. The supported version of k6 will receive no further updates or features backport but will keep receiving major and security bug fixes. Its &lt;a href=&#34;#minor-version&#34;&gt;minor version&lt;/a&gt; is not expected to change anymore, and it should only see its &lt;a href=&#34;#patch-version&#34;&gt;patch version&lt;/a&gt; grow.&lt;/p&gt;
&lt;h4 id=&#34;deprecated-k6-versions&#34;&gt;Deprecated k6 versions&lt;/h4&gt;
&lt;p&gt;A major version of k6, which is two major versions away from the past (for example, v1.0.0, when the latest version is v3.0.0), is considered &lt;strong&gt;deprecated&lt;/strong&gt; and won’t receive any form of support anymore.
The same applies to a minor version.&lt;/p&gt;
&lt;h3 id=&#34;real-world-scenarios&#34;&gt;Real-world scenarios&lt;/h3&gt;
&lt;h4 id=&#34;a-major-bug-or-security-issue-is-found-with-the-latest-release-of-k6&#34;&gt;A major (bug or security) issue is found with the latest release of k6&lt;/h4&gt;
&lt;p&gt;The latest release of k6 is &lt;strong&gt;actively maintained&lt;/strong&gt;. Within this version’s major scope is a single maintained version, the latest one.&lt;/p&gt;
&lt;p&gt;Thus, when a security issue or bug affects the actively maintained version, the k6 team puts together a fix and publishes a new &lt;a href=&#34;#patch-version&#34;&gt;patch version&lt;/a&gt; of the currently maintained version. Although the under-development version should integrate those changes, we still reserve the right to release a new intermediary release.&lt;/p&gt;
&lt;p&gt;If the issue or bug also affects the supported version of k6, we apply the fix to it and publish a &lt;a href=&#34;#patch-version&#34;&gt;patch version&lt;/a&gt; of the currently supported version of k6.&lt;/p&gt;
&lt;p&gt;If the issue also affects a deprecated version of k6, we take no action and invite users to upgrade to at least the latest &lt;em&gt;supported version&lt;/em&gt; of k6.&lt;/p&gt;
&lt;h4 id=&#34;an-issue-is-found-in-the-supported-version-of-k6&#34;&gt;An issue is found in the supported version of k6&lt;/h4&gt;
&lt;p&gt;When a security issue or bug is found in the currently &lt;strong&gt;supported&lt;/strong&gt; version of k6, the k6 team creates a fix in the support version’s branch. It publishes a new &lt;a href=&#34;#patch-version&#34;&gt;patch version&lt;/a&gt; of the supported version, which becomes the new supported version of k6.&lt;/p&gt;
&lt;p&gt;If the issue also affects the k6 version, which is currently the &lt;a href=&#34;#major-version&#34;&gt;major version&lt;/a&gt;, a separate fix should be released as a &lt;a href=&#34;#patch-version&#34;&gt;patch version&lt;/a&gt; within the maintained version’s major scope.&lt;/p&gt;
&lt;p&gt;If the issue also affects deprecated versions of k6, we take no action and invite users to upgrade to at least the latest &lt;em&gt;supported version&lt;/em&gt; of k6.&lt;/p&gt;
&lt;h4 id=&#34;an-issue-is-found-in-a-deprecated-version-of-k6&#34;&gt;An issue is found in a deprecated version of k6&lt;/h4&gt;
&lt;p&gt;If an issue (security-related or a bug) is found in a &lt;strong&gt;deprecated&lt;/strong&gt; version, we do not take action and recommend that users upgrade to a supported version of k6.&lt;/p&gt;
&lt;h2 id=&#34;experimental&#34;&gt;Experimental&lt;/h2&gt;
&lt;p&gt;Within k6, some APIs, features, and modules are explicitly marked as experimental.&lt;/p&gt;
&lt;p&gt;Those APIs, features, and modules are either made of changes or new capabilities, which we believe are valuable to our users and the development of k6. Still, they are &lt;em&gt;not yet stable&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;An experimental API, feature, or module &lt;em&gt;can undergo a breaking change and be completely removed without prior notice&lt;/em&gt;. Our support policy does not cover experimental APIs, features, and modules. As such, we advise products, projects, and teams not to rely on them explicitly for mission-critical operations and to build upon them if possible.&lt;/p&gt;
&lt;p&gt;They should be marked and communicated internally and, most importantly, externally. When a user interacts with an experimental feature or module, it &lt;em&gt;must&lt;/em&gt; be explicitly communicated to them. How to do it depends on the layer where the change is introduced and can vary case by case.&lt;/p&gt;
&lt;p&gt;For example, a JavaScript module should be recognizable as an experimental module by its import path, which includes the &lt;code&gt;k6/experimental/&lt;/code&gt; prefix. Advertising the experimental state via the official documentation is also highly encouraged. However, using it as a unique level shouldn’t be considered sufficient communication.
The development team is responsible for deciding what the reasonable level is based on the specific case.&lt;/p&gt;
&lt;p&gt;Experimental APIs, features, and modules may eventually become stable. When that happens, it will lead to a new minor version of k6 in most cases. The experimental module import path becomes deprecated and will be removed in a couple of minor releases with a future notice.&lt;/p&gt;
&lt;h2 id=&#34;versioning-policy&#34;&gt;Versioning policy&lt;/h2&gt;
&lt;p&gt;We reserve ourselves the right to modify the versioning strategy and policies as part of a major release, under the constraints that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We maintain a changelog of the modifications we do in the document itself.&lt;/li&gt;
&lt;li&gt;The document remains public and accessible to users.&lt;/li&gt;
&lt;li&gt;We communicate changes in the context of new releases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, let’s assume we decide to introduce a new supported API surface, like the REST API v2. We would amend this document accordingly and publish and enforce the change to the affected workflows as part of the next major release.&lt;/p&gt;
]]></content><description>&lt;h1 id="versioning-and-stability-guarantees">Versioning and stability guarantees&lt;/h1>
&lt;p>As innovation sometimes requires introducing bold and extensive changes that might impact the workflow of k6’s consumers, our goal is to ensure stability, predictability, and ease of use for all users of k6, including those leveraging it in the cloud and other products built on top of the open source project.&lt;/p></description></item></channel></rss>