{"record":{"id":"bdac8d20906e5678","repo":"grafana/k6","slug":"k6-experimental-browser-has-been-graduated-please","errorCode":null,"errorMessage":"k6/experimental/browser has been graduated, please use k6/browser instead.Please update your imports to use k6/browser instead of k6/experimental/browser, For more information, see the migration guide at the link: https://grafana.com/docs/k6/latest/using-k6-browser/migrating-to-k6-v0-52/","messagePattern":"k6/experimental/browser has been graduated, please use k6/browser instead\\.Please update your imports to use k6/browser instead of k6/experimental/browser, For more information, see the migration guide at the link: https://grafana\\.com/docs/k6/latest/using-k6-browser/migrating-to-k6-v0-52/","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/jsmodules.go","lineNumber":107,"sourceCode":"\n\t// external is always prefixed with `k6/x`\n\tfor _, e := range external {\n\t\tresult[e.Name] = e.Module\n\t}\n\n\treturn result\n}\n\ntype removedModule struct {\n\terrMsg string\n}\n\nfunc newRemovedModule(errMsg string) modules.Module {\n\treturn &removedModule{errMsg: errMsg}\n}\n\nfunc (rm *removedModule) NewModuleInstance(vu modules.VU) modules.Instance {\n\tcommon.Throw(vu.Runtime(), errors.New(rm.errMsg))\n\n\treturn nil\n}\n\ntype warnExperimentalModule struct {\n\tonce sync.Once\n\tmsg  string\n\tbase modules.Module\n}\n\nfunc newWarnExperimentalModule(base modules.Module, msg string) modules.Module {\n\treturn &warnExperimentalModule{\n\t\tmsg:  msg,\n\t\tbase: base,\n\t}\n}\n\nfunc (w *warnExperimentalModule) NewModuleInstance(vu modules.VU) modules.Instance {","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/jsmodules.go#L89-L125","documentation":"k6/experimental/browser graduated to the stable k6/browser module in k6 v0.52 and the experimental path was removed. The removedModule stub throws this error when the old import is instantiated, pointing at the v0.52 migration guide.","triggerScenarios":"`import { browser } from 'k6/experimental/browser'` in a script executed on k6 >= v0.52 (with the old path removed).","commonSituations":"Browser scripts predating v0.52 run on a newer binary; CI images bumped to latest k6 without updating test scripts.","solutions":["Change the import to 'k6/browser': `import { browser } from 'k6/browser'`","Review the migration guide for behavioral changes (e.g. waitForTimeout removal, options moves) and fix any follow-on errors"],"exampleFix":"// before\nimport { browser } from 'k6/experimental/browser';\n\n// after\nimport { browser } from 'k6/browser';","handlingStrategy":"validation","validationCode":"# Codemod the graduated import\nsed -i \"s|k6/experimental/browser|k6/browser|g\" tests/**/*.js\ngrep -rn \"k6/experimental/browser\" tests/ && exit 1 || true","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Standardize on 'k6/browser' in shared fixtures and templates","Add a repo lint that fails on 'k6/experimental/browser'","Read the v0.52 browser migration guide when upgrading across that boundary"],"tags":["javascript","modules","browser","migration","removed-feature"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}