<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Extensions on Grafana Labs</title><link>https://grafana.com/docs/k6/v2.3.x/extensions/</link><description>Recent content in Extensions on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/k6/v2.3.x/extensions/index.xml" rel="self" type="application/rss+xml"/><item><title>Explore extensions</title><link>https://grafana.com/docs/k6/v2.3.x/extensions/explore/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/extensions/explore/</guid><content><![CDATA[&lt;h1 id=&#34;explore-extensions&#34;&gt;Explore extensions&lt;/h1&gt;
&lt;p&gt;Extensions can be used to extend the core k6 features to fit your performance-testing use cases. There are two main categories of extensions: official and community.&lt;/p&gt;
&lt;h2 id=&#34;official-extensions&#34;&gt;Official extensions&lt;/h2&gt;
&lt;p&gt;These are extensions owned and maintained by Grafana Labs, with support for a wide range of versions.&lt;/p&gt;




  


&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Extension&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Versions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-dns&#34;&gt;xk6-dns&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DNS resolution and lookups in your tests&lt;/td&gt;
&lt;td&gt;v1.0.1, v1.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-faker&#34;&gt;xk6-faker&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generate fake data in your tests&lt;/td&gt;
&lt;td&gt;v0.4.4, v0.4.3, v0.4.2, v0.4.1, v0.4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-icmp&#34;&gt;xk6-icmp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ICMP protocol support for k6&lt;/td&gt;
&lt;td&gt;v0.2.0, v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-mqtt&#34;&gt;xk6-mqtt&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MQTT protocol support for k6&lt;/td&gt;
&lt;td&gt;v0.2.0, v0.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-redis&#34;&gt;xk6-redis&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Extension for Redis database&lt;/td&gt;
&lt;td&gt;v0.3.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-sql&#34;&gt;xk6-sql&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Load-test SQL Servers&lt;/td&gt;
&lt;td&gt;v1.0.5, v1.0.4, v1.0.3, v1.0.2, v1.0.1, v1.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-sql-driver-mysql&#34;&gt;xk6-sql-driver-mysql&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;xk6-sql driver extension for MySQL database support&lt;/td&gt;
&lt;td&gt;v0.2.1, v0.2.0, v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-sql-driver-postgres&#34;&gt;xk6-sql-driver-postgres&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;xk6-sql driver extension for Postgres database support&lt;/td&gt;
&lt;td&gt;v0.1.1, v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-ssh&#34;&gt;xk6-ssh&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Use SSH connections in your tests&lt;/td&gt;
&lt;td&gt;v0.1.3, v0.1.2, v0.1.1, v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-tcp&#34;&gt;xk6-tcp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TCP protocol support for k6&lt;/td&gt;
&lt;td&gt;v0.2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-docs&#34;&gt;xk6-docs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CLI k6 docs for AI agents and users. It comes with an agent skill to help AI agents to write k6 scripts with best practices.&lt;/td&gt;
&lt;td&gt;v0.0.8, v0.0.7, v0.0.6, v0.0.5, v0.0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-subcommand-explore&#34;&gt;xk6-subcommand-explore&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Explore k6 extensions for Automatic Resolution&lt;/td&gt;
&lt;td&gt;v1.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&#34;community-extensions&#34;&gt;Community extensions&lt;/h2&gt;
&lt;p&gt;These are extensions developed by the community, with support for specific versions.&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;We&amp;rsquo;re working on a process for community folks to submit their extensions.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;





  


&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Extension&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Versions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana-cold-storage/xk6-disruptor&#34;&gt;xk6-disruptor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add fault injection capabilities to k6, following the chaos engineering principles.&lt;/td&gt;
&lt;td&gt;v0.3.17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/mostafa/xk6-kafka&#34;&gt;xk6-kafka&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Load test Apache Kafka. Includes support for Avro messages.&lt;/td&gt;
&lt;td&gt;v1.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-kubernetes&#34;&gt;xk6-kubernetes&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A k6 extension for interacting with Kubernetes clusters while testing.&lt;/td&gt;
&lt;td&gt;v0.10.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-loki&#34;&gt;xk6-loki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Test Grafana Loki log ingestion endpoints&lt;/td&gt;
&lt;td&gt;v1.0.1, v1.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/Tango-Tango/xk6-msgpack&#34;&gt;xk6-msgpack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;k6 MessagePack extension&lt;/td&gt;
&lt;td&gt;v0.0.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-client-prometheus-remote&#34;&gt;xk6-client-prometheus-remote&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Test Prometheus Remote Write-compatible endpoints&lt;/td&gt;
&lt;td&gt;v0.3.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-sql-driver-azuresql&#34;&gt;xk6-sql-driver-azuresql&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;xk6-sql driver extension for Microsoft Azure SQL database support&lt;/td&gt;
&lt;td&gt;v0.1.1, v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-sql-driver-clickhouse&#34;&gt;xk6-sql-driver-clickhouse&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;xk6-sql driver extension for ClickHouse database support&lt;/td&gt;
&lt;td&gt;v0.1.1, v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-sql-driver-sqlserver&#34;&gt;xk6-sql-driver-sqlserver&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;xk6-sql driver extension for Microsoft SQL Server database support&lt;/td&gt;
&lt;td&gt;v0.1.1, v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/phymbert/xk6-sse&#34;&gt;xk6-sse&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Server Sent Event&lt;/td&gt;
&lt;td&gt;v0.1.11, v0.1.10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-tls&#34;&gt;xk6-tls&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TLS certificates validation and inspection&lt;/td&gt;
&lt;td&gt;v0.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-client-tracing&#34;&gt;xk6-client-tracing&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This extension provides k6 with the required functionality required to load test distributed tracing backends.&lt;/td&gt;
&lt;td&gt;v0.0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/grafana/xk6-subcommand-httpbin&#34;&gt;xk6-subcommand-httpbin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Run a local httpbin server from k6&lt;/td&gt;
&lt;td&gt;v1.0.1, v1.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&#34;use-extensions&#34;&gt;Use extensions&lt;/h2&gt;
&lt;p&gt;There are two ways to use extensions when running a k6 test script.&lt;/p&gt;
&lt;h3 id=&#34;automatic-extension-resolution&#34;&gt;Automatic extension resolution&lt;/h3&gt;
&lt;p&gt;You can use these extensions without any additional configuration. k6 automatically resolves and loads them when you use them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;JavaScript extensions&lt;/strong&gt; are loaded when you 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/run/#use-automatic-extension-resolution&#34;&gt;import them in your test script&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subcommand extensions&lt;/strong&gt; are loaded when you invoke them using &lt;code&gt;k6 x &amp;lt;subcommand&amp;gt;&lt;/code&gt;. Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/subcommand-extensions/#use-automatic-extension-resolution&#34;&gt;subcommand extensions&lt;/a&gt; for details.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;custom-k6-binary&#34;&gt;Custom k6 binary&lt;/h3&gt;
&lt;p&gt;If you have developed your own k6 extension or want to use an extension that&amp;rsquo;s not available through automatic extension resolution, you have to build a custom k6 binary. The process involves using the xk6 tool to compile k6 with your desired extensions included. Custom binaries give you the flexibility to incorporate any extension from the k6 ecosystem.&lt;/p&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/run/#use-extensions-with-a-custom-k6-binary&#34;&gt;build a custom k6 binary guide&lt;/a&gt; to learn how to create your own k6 binary with custom extensions.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-caution&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Caution&lt;/p&gt;&lt;p&gt;Many other extensions maintained by members of the k6 ecosystem are available in &lt;a href=&#34;https://github.com/topics/xk6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;GitHub&lt;/a&gt;. These extensions aren&amp;rsquo;t maintained nor audited by Grafana Labs.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

]]></content><description>&lt;h1 id="explore-extensions">Explore extensions&lt;/h1>
&lt;p>Extensions can be used to extend the core k6 features to fit your performance-testing use cases. There are two main categories of extensions: official and community.&lt;/p></description></item><item><title>Run a test with extensions</title><link>https://grafana.com/docs/k6/v2.3.x/extensions/run/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/extensions/run/</guid><content><![CDATA[&lt;h1 id=&#34;run-a-test-with-extensions&#34;&gt;Run a test with extensions&lt;/h1&gt;
&lt;p&gt;There are two different ways to run your k6 test script depending on the k6 extension you want to use: using the automatic extension resolution, or building a custom k6 binary.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/install-k6/&#34;&gt;Install k6&lt;/a&gt; v1.2.0 or higher.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;use-automatic-extension-resolution&#34;&gt;Use automatic extension resolution&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s as easy as importing them. Example with &lt;a href=&#34;https://github.com/grafana/xk6-faker&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;xk6-faker&lt;/a&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;JavaScript&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-javascript&#34;&gt;import faker from &amp;#39;k6/x/faker&amp;#39;;

export default function () {
  console.log(faker.person.firstName());
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then, you can run your script as usual, and k6 automatically detects the extension and loads it:&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;sh&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-sh&#34;&gt;k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Shell tab-completion also triggers automatic extension resolution. When you press Tab after typing an extension import path, k6 provisions the extension if it isn&amp;rsquo;t already available.&lt;/p&gt;
&lt;h3 id=&#34;limitations&#34;&gt;Limitations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Only works with Official and Community extensions.&lt;/li&gt;
&lt;li&gt;Output extensions aren&amp;rsquo;t supported.&lt;/li&gt;
&lt;li&gt;Running scripts from stdin isn&amp;rsquo;t supported.&lt;/li&gt;
&lt;li&gt;Only files with extensions &lt;code&gt;.js&lt;/code&gt;, &lt;code&gt;.ts&lt;/code&gt; or &lt;code&gt;.tar&lt;/code&gt; can be used.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;disable-automatic-extension-resolution&#34;&gt;Disable automatic extension resolution&lt;/h3&gt;
&lt;p&gt;You can disable this feature by setting the environment variable &lt;code&gt;K6_AUTO_EXTENSION_RESOLUTION&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;. If provided, the previous example
fails because k6 can&amp;rsquo;t load the extension dynamically.&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_AUTO_EXTENSION_RESOLUTION=false k6 run test.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;use-extensions-with-a-custom-k6-binary&#34;&gt;Use extensions with a custom k6 binary&lt;/h2&gt;
&lt;p&gt;To run other extensions (including ones you create), you need to build a custom k6 binary with &lt;a href=&#34;https://github.com/grafana/xk6/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;xk6&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can do this locally with Go or use the xk6 Docker image.&lt;/p&gt;



  

  


&lt;div data-element=&#34;tabs&#34;&gt;
  &lt;div data-element=&#34;tabs-bar&#34;&gt;
    
      &lt;div data-element=&#34;tab&#34; data-key=&#34;0&#34; data-label=&#34;go-and-xk6&#34;&gt;go-and-xk6&lt;/div&gt;
    
      &lt;div data-element=&#34;tab&#34; data-key=&#34;1&#34; data-label=&#34;docker-in-linux&#34;&gt;docker-in-linux&lt;/div&gt;
    
  &lt;/div&gt;
  &lt;div data-element=&#34;tab-content&#34;&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;go-and-xk6&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-go-and-xk6&#34;&gt;xk6 build \
  --with github.com/grafana/xk6-sql@v0.0.1 \
  --with github.com/grafana/xk6-output-influxdb&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&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;docker-in-linux&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-docker-in-linux&#34;&gt;docker run --rm -u &amp;#34;$(id -u):$(id -g)&amp;#34; -v &amp;#34;${PWD}:/xk6&amp;#34; grafana/xk6 build \
  --with github.com/grafana/xk6-sql@v0.0.1 \&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For more details, refer to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/run/build-k6-binary-using-go/&#34;&gt;Build a k6 binary using Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/run/build-k6-binary-using-docker/&#34;&gt;Build a k6 binary using Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="run-a-test-with-extensions">Run a test with extensions&lt;/h1>
&lt;p>There are two different ways to run your k6 test script depending on the k6 extension you want to use: using the automatic extension resolution, or building a custom k6 binary.&lt;/p></description></item><item><title>Create a k6 extension</title><link>https://grafana.com/docs/k6/v2.3.x/extensions/create/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/extensions/create/</guid><content><![CDATA[&lt;h1 id=&#34;create-a-k6-extension&#34;&gt;Create a k6 extension&lt;/h1&gt;
&lt;p&gt;If you find a gap in your testing process that no k6 extension can fix,
consider building your own extension. Use the tutorials below to get started.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/javascript-extensions/&#34;&gt;Create a JavaScript extension&lt;/a&gt; to extend the JavaScript functionality of your script or add support for a new network protocol to test.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/output-extensions/&#34;&gt;Create an Output extension&lt;/a&gt; to process the metrics emitted by k6 or publish them to unsupported backend stores.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/secret-source_extensions/&#34;&gt;Create a Secret Source extension&lt;/a&gt; to provide secrets to your k6 script at runtime.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/subcommand-extensions/&#34;&gt;Create a Subcommand extension&lt;/a&gt; to add custom CLI commands under the &lt;code&gt;k6 x&lt;/code&gt; namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;necessary-knowledge&#34;&gt;Necessary knowledge&lt;/h2&gt;
&lt;p&gt;Anyone who can use the command line to edit files and install software should be able to follow along.
But, if you want to create an extension for more than the purposes of demonstration,
there&amp;rsquo;s some background knowledge you should have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You should be familiar with both Go(lang), JavaScript, and their tooling&lt;/li&gt;
&lt;li&gt;You should understand how the 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/go-js-bridge/&#34;&gt;&lt;em&gt;Go-to-JavaScript&lt;/em&gt;&lt;/a&gt; bridge works within k6&lt;/li&gt;
&lt;/ul&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;If you maintain a public xk6 repository and wish to have your extension listed in our 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/explore/&#34;&gt;registry&lt;/a&gt;,
be sure to review the 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/extensions-registry/#registry-requirements&#34;&gt;requirements&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;avoid-unneeded-work&#34;&gt;Avoid unneeded work&lt;/h2&gt;
&lt;p&gt;These actions may save you the trouble of building a whole new extension when its not needed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Confirm that a similar extension doesn&amp;rsquo;t already exist for your use case. Take a look at
the 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/explore/&#34;&gt;Extensions listing&lt;/a&gt; and the &lt;a href=&#34;https://github.com/topics/xk6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;xk6&lt;/code&gt; topic on GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Prefer generic solutions. For example, if you can test a system with a generic protocol like &lt;em&gt;MQTT&lt;/em&gt;, prefer
&lt;a href=&#34;https://github.com/pmalhaire/xk6-mqtt&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;xk6-mqtt&lt;/a&gt; over a new extension for some custom protocol.&lt;/li&gt;
&lt;li&gt;Lean toward writing pure JavaScript libraries over building an extension in Go.
A JavaScript library will be better supported, more straightforward, and reusable than an extension.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="create-a-k6-extension">Create a k6 extension&lt;/h1>
&lt;p>If you find a gap in your testing process that no k6 extension can fix,
consider building your own extension. Use the tutorials below to get started.&lt;/p></description></item><item><title>Submit an extension</title><link>https://grafana.com/docs/k6/v2.3.x/extensions/submit-extension/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/extensions/submit-extension/</guid><content><![CDATA[&lt;h1 id=&#34;submit-an-extension&#34;&gt;Submit an extension&lt;/h1&gt;
&lt;p&gt;Extensions are a core part of the k6 ecosystem, providing capabilities not available in the k6 core. Adding your extension to the registry makes it available to all k6 users, in open-source and Grafana Cloud k6.&lt;/p&gt;
&lt;p&gt;There are two main categories of extensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Official&lt;/strong&gt;: Owned and maintained by Grafana Labs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community&lt;/strong&gt;: Developed by the community. Anyone can contribute.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Submit a Community extension when your project fills a gap not covered by k6 or existing extensions.&lt;/p&gt;
&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start&lt;/h2&gt;
&lt;p&gt;Read the contribution guidelines in &lt;a href=&#34;https://github.com/grafana/k6-extension-registry&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;grafana/k6-extension-registry&lt;/a&gt; — they are the authoritative source for the exact registry file format, field names, and naming conventions. The requirements your extension repository must meet are at 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/create/extensions-registry/&#34;&gt;extensions registry requirements&lt;/a&gt;. Read both before submitting.&lt;/p&gt;
&lt;p&gt;If something in the repository documentation is unclear, open an issue asking for clarification.&lt;/p&gt;
&lt;h2 id=&#34;extension-prerequisites&#34;&gt;Extension prerequisites&lt;/h2&gt;
&lt;p&gt;Your extension repository must meet a minimum bar before you submit. The full list is in the registry repository, but at a minimum your extension must have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A LICENSE file using an allowed license&lt;/li&gt;
&lt;li&gt;A README that explains what the extension does and how to use it&lt;/li&gt;
&lt;li&gt;A valid &lt;code&gt;go.mod&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;At least one runnable example in an &lt;code&gt;examples&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;At least one versioned release&lt;/li&gt;
&lt;li&gt;A GitHub workflow with &lt;code&gt;golangci-lint&lt;/code&gt; running on every pull request and every merge on the &lt;code&gt;main&lt;/code&gt; branch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these requirements are automatically checked by the &lt;code&gt;xk6 lint --preset community&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;Submissions that don&amp;rsquo;t meet these requirements will fail automated checks. Don&amp;rsquo;t rely on a reviewer to catch missing prerequisites.&lt;/p&gt;
&lt;h2 id=&#34;run-the-checks-locally-first&#34;&gt;Run the checks locally first&lt;/h2&gt;
&lt;p&gt;The registry includes a Makefile that lets you run the automated checks on your machine. Always do this before opening a pull request. CI does not run automatically on new pull requests — a maintainer must manually allow it. Running checks locally catches failures early and avoids wasting that trigger on a submission that would have failed immediately.&lt;/p&gt;
&lt;h2 id=&#34;submission-steps&#34;&gt;Submission steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Fork &lt;code&gt;grafana/k6-extension-registry&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add your extension to the registry file, following the format documented in the repository.&lt;/li&gt;
&lt;li&gt;Open a pull request using the provided pull request template. Fill it out completely.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;what-happens-after-you-open-a-pull-request&#34;&gt;What happens after you open a pull request&lt;/h2&gt;
&lt;h3 id=&#34;automated-checks&#34;&gt;Automated checks&lt;/h3&gt;
&lt;p&gt;A maintainer will trigger the automated checks if the submission is legitimate — meaning it fills a clear product gap or adds a feature, with no evidence of user security risks or harassment.&lt;/p&gt;
&lt;p&gt;Once triggered, the checks validate your registry entry and your extension repository against the documented requirements. Human review does not begin until all automated checks pass. If checks fail, consult the check output and the documentation linked above, fix the issues, and push — a maintainer will re-trigger CI.&lt;/p&gt;
&lt;h3 id=&#34;maintainer-review&#34;&gt;Maintainer review&lt;/h3&gt;
&lt;p&gt;Once checks pass, a maintainer will manually review your extension repository, not just the registry entry. The key question is whether the extension is genuinely useful to the k6 community, and the overall quality and trustworthiness of the project.&lt;/p&gt;
&lt;p&gt;Passing automated checks does not guarantee acceptance. They are a necessary condition, not a sufficient one.&lt;/p&gt;
&lt;p&gt;There is no guaranteed review turnaround time. Maintainers actively monitor the submission queue. There is no need to follow up — any comments or decisions will appear directly on the pull request.&lt;/p&gt;
&lt;p&gt;Reviewers may close pull requests that appear stale.&lt;/p&gt;
&lt;h3 id=&#34;what-reviewers-may-ask-or-decide&#34;&gt;What reviewers may ask or decide&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accepted&lt;/strong&gt; — your extension is merged into the registry and will be available soon to k6 local and Cloud runs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changes requested&lt;/strong&gt; — address the feedback on your registry entry or extension repository before the review continues.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rejected&lt;/strong&gt; — the extension does not meet the criteria at this time. The maintainer will explain why. If circumstances change, you are welcome to open a new submission.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ongoing-responsibilities&#34;&gt;Ongoing responsibilities&lt;/h3&gt;
&lt;p&gt;When you list an extension, you take on its basic maintenance over time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Security vulnerabilities&lt;/strong&gt;: Address significant security issues using your best judgment. There is no formal response SLA, but known vulnerabilities left unaddressed may result in removal from the registry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;k6 compatibility&lt;/strong&gt;: New k6 versions ship regularly. Watch the &lt;a href=&#34;https://github.com/grafana/k6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;grafana/k6&lt;/a&gt; repository on GitHub for release notifications and keep your extension compatible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User issues&lt;/strong&gt;: Support and respond to issues filed against your extension repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;decommission&#34;&gt;Decommission&lt;/h3&gt;
&lt;p&gt;If you can no longer maintain the extension, open a pull request removing it from the registry. If that is not practical, opening an issue or leaving a clear signal on the registry repository is enough — maintainers just need to know.&lt;/p&gt;
&lt;p&gt;Additional decommissioning cases may apply. For more details, refer to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/extensions/decommission-extension/&#34;&gt;Decommission an extension&lt;/a&gt; guide.&lt;/p&gt;
]]></content><description>&lt;h1 id="submit-an-extension">Submit an extension&lt;/h1>
&lt;p>Extensions are a core part of the k6 ecosystem, providing capabilities not available in the k6 core. Adding your extension to the registry makes it available to all k6 users, in open-source and Grafana Cloud k6.&lt;/p></description></item><item><title>Add a new version</title><link>https://grafana.com/docs/k6/v2.3.x/extensions/add-extension-version/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/extensions/add-extension-version/</guid><content><![CDATA[&lt;h1 id=&#34;add-a-new-version&#34;&gt;Add a new version&lt;/h1&gt;
&lt;p&gt;When a new version is released, the registry doesn&amp;rsquo;t automatically include it. This is by design, to prevent unexpected behavior.&lt;/p&gt;
&lt;h2 id=&#34;process&#34;&gt;Process&lt;/h2&gt;
&lt;p&gt;To make a new version of your extension available in the registry, open a pull request to &lt;a href=&#34;https://github.com/grafana/k6-extension-registry&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;grafana/k6-extension-registry&lt;/a&gt; updating your extension entry with the new version.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t update the registry, the new version won&amp;rsquo;t be available to k6 users through automatic extension resolution or Grafana Cloud k6.&lt;/p&gt;
]]></content><description>&lt;h1 id="add-a-new-version">Add a new version&lt;/h1>
&lt;p>When a new version is released, the registry doesn&amp;rsquo;t automatically include it. This is by design, to prevent unexpected behavior.&lt;/p>
&lt;h2 id="process">Process&lt;/h2>
&lt;p>To make a new version of your extension available in the registry, open a pull request to &lt;a href="https://github.com/grafana/k6-extension-registry" target="_blank" rel="noopener noreferrer">grafana/k6-extension-registry&lt;/a> updating your extension entry with the new version.&lt;/p></description></item><item><title>Decommission an extension</title><link>https://grafana.com/docs/k6/v2.3.x/extensions/decommission-extension/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/extensions/decommission-extension/</guid><content><![CDATA[&lt;h1 id=&#34;decommission-an-extension&#34;&gt;Decommission an extension&lt;/h1&gt;
&lt;p&gt;This page covers the decommissioning process for k6 extensions and explains what extension owners and users can expect.&lt;/p&gt;
&lt;p&gt;Decommissioning applies to two scenarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single version&lt;/strong&gt; — a specific release is retired, for example when it reaches end of life or has a critical security issue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entire extension&lt;/strong&gt; — the extension as a whole is retired.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;communication&#34;&gt;Communication&lt;/h2&gt;
&lt;p&gt;The k6 core team aims to notify affected users and owners before any removal when possible. The team tries to provide known alternatives and add removal notices directly to the registry listings.&lt;/p&gt;
&lt;p&gt;Notifications may come through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A dedicated section in the release notes&lt;/li&gt;
&lt;li&gt;A dedicated section or page in the k6 official docs&lt;/li&gt;
&lt;li&gt;An issue on the original extension&amp;rsquo;s repository&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;official-extensions&#34;&gt;Official extensions&lt;/h2&gt;
&lt;p&gt;Official extensions follow the 
    &lt;a href=&#34;/docs/k6/v2.3.x/reference/versioning-and-stability-guarantees/&#34;&gt;same support process and timelines&lt;/a&gt; as the k6 core product.&lt;/p&gt;
&lt;p&gt;Extensions are first marked as deprecated, giving users advance notice and a clear migration path. Support is only dropped upon the release of a subsequent major version.&lt;/p&gt;
&lt;h2 id=&#34;community-extensions&#34;&gt;Community extensions&lt;/h2&gt;
&lt;p&gt;Community extensions are maintained by their owners. Owners are encouraged to follow the same notice process as official extensions and to notify the k6 team to update the registry listing.&lt;/p&gt;
&lt;p&gt;The k6 core team may remove a community extension or specific version from the registry at any time if it no longer meets the registry criteria.&lt;/p&gt;
&lt;h2 id=&#34;exceptions-for-immediate-removal&#34;&gt;Exceptions for immediate removal&lt;/h2&gt;
&lt;p&gt;The k6 core team may remove an extension immediately, without a grace period, when required by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A security vulnerability with critical severity&lt;/li&gt;
&lt;li&gt;A legal or licensing obligation&lt;/li&gt;
&lt;li&gt;A critical safety concern&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In these cases, the k6 core team will communicate the removal as soon as possible, including the reason and any available mitigation or alternative.&lt;/p&gt;
]]></content><description>&lt;h1 id="decommission-an-extension">Decommission an extension&lt;/h1>
&lt;p>This page covers the decommissioning process for k6 extensions and explains what extension owners and users can expect.&lt;/p>
&lt;p>Decommissioning applies to two scenarios:&lt;/p></description></item></channel></rss>