grafana/k6 · error
k6/experimental/grpc has been graduated, please use k6/net/g
Error message
k6/experimental/grpc has been graduated, please use k6/net/grpc instead. See https://grafana.com/docs/k6/latest/javascript-api/k6-net-grpc/ for more information.
What it means
k6/experimental/grpc graduated to the stable k6/net/grpc module; the experimental import path was removed from the registry and now resolves to the removedModule stub, which throws at import-instantiation time.
Source
Thrown at internal/js/jsmodules.go:107
// external is always prefixed with `k6/x`
for _, e := range external {
result[e.Name] = e.Module
}
return result
}
type removedModule struct {
errMsg string
}
func newRemovedModule(errMsg string) modules.Module {
return &removedModule{errMsg: errMsg}
}
func (rm *removedModule) NewModuleInstance(vu modules.VU) modules.Instance {
common.Throw(vu.Runtime(), errors.New(rm.errMsg))
return nil
}
type warnExperimentalModule struct {
once sync.Once
msg string
base modules.Module
}
func newWarnExperimentalModule(base modules.Module, msg string) modules.Module {
return &warnExperimentalModule{
msg: msg,
base: base,
}
}
func (w *warnExperimentalModule) NewModuleInstance(vu modules.VU) modules.Instance {View on GitHub (pinned to 93accf6570)
Solutions
- Change the import to 'k6/net/grpc': `import grpc from 'k6/net/grpc'`
- The Client API (grpc.newClient etc.) is unchanged; only the specifier needs updating in most scripts
Example fix
// before import grpc from 'k6/experimental/grpc'; // after import grpc from 'k6/net/grpc';
Defensive patterns
Strategy: validation
Validate before calling
grep -rn "k6/experimental/grpc" . --include='*.js' && { echo 'migrate to k6/net/grpc' >&2; exit 1; } || true Prevention
- Use 'k6/net/grpc' in all new gRPC scripts
- Codemod old imports during the k6 upgrade PR, not later
- Keep gRPC proto loading via opener/importer unchanged — only the specifier moved
When it happens
Trigger: `import grpc from 'k6/experimental/grpc'` on a current k6 build.
Common situations: gRPC scripts from the experimental era run after upgrading k6; shared company libraries still importing the old specifier.
Related errors
- k6/experimental/redis has been removed. Please migrate to th
- k6/experimental/browser has been graduated, please use k6/br
- k6/experimental/timers has been graduated, and it's now glob
- k6/experimental/tracing has been removed. All of it function
- k6/experimental/webcrypto has been graduated and it's now gl
AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15).
Data as JSON: /api/errors/4047ba0505ee941c.
Report an issue: GitHub.