Skip to content

Add extension usage telemetry #6109

Description

@inancgumus

Problem

k6 records which built-in modules a test uses but deliberately excludes extensions, so we have no visibility into which extensions people actually run. With binary provisioning now GA and a public catalog of official and community extensions, that blind spot blocks decisions about which extensions to support, promote, or retire. Cloud-executed runs are partly tracked, but local execution, which is most OSS usage, stays invisible.

Significance

Extension adoption has become a core product signal: it tells us which community extensions deserve promotion to official, where to spend maintenance effort, and how well binary provisioning is being adopted versus custom builds. Today product, the k6 engine team, and extension maintainers all make those calls on guesswork. The catalog's value depends on knowing what its users actually reach for, and right now we are guessing.

Cost of inaction

We keep promoting and deprecating extensions blind, spending effort on unused ones while missing popular community extensions that should become official. Every release we ship without this loses adoption history we can never recover. The decisions the catalog exists to support stay anecdote-driven.

Desired state

Anyone can see which catalog extensions are used, at what version, and through which surface they were used (an imported module, an output, or a subcommand) for both local and cloud runs, regardless of whether the binary was built with xk6 or produced by binary provisioning. The data rides the existing anonymous usage report, so users keep one familiar opt-out and have nothing new to configure. Private and unlisted extensions are never reported, only the ones already public in the catalog, so the long-standing privacy concern that kept extensions out of telemetry stays addressed.

Done when

  • A used catalog importable extension (e.g. k6/x/sql) appears in the report with module, version, and kind: js.
  • A used catalog subcommand (e.g. k6 x docs) is reported with kind: subcommand.
  • A used catalog output extension (an xk6-output-* via --out) is reported with kind: output; built-in outputs like json are not. The public catalog doesn't list output extensions (no report until added to the catalog).
  • Multiple extensions used in one run are each reported.
  • Network or catalog failure never fails or delays the run: with a warm catalog cache a cataloged extension is still reported; with no cache, nothing is reported (fail closed).
  • --no-usage-report / K6_NO_USAGE_REPORT suppresses all of it (run and subcommand paths); there is no separate opt-out.
  • Built-in modules and outputs reporting is unchanged.
  • A private, unlisted, or unknown extension is never reported, even when used.
  • An extension baked into the binary but not used in the run is not reported.
  • Reporting is identical for an xk6-built binary and a binary-provisioning-built binary.

Out of scope

  • Populating the catalog with output extensions.
  • Counting unique users or installations (telemetry issue).
  • Telling apart xk6 builds from binary provisioning (#6111).

Related

Metadata

Metadata

Assignees

Labels

No labels
No labels

Fields

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions