The standalone Rstest extension (rstack.rstest, source in web-infra-dev/rstest packages/vscode) is being retired in favor of the unified Rstack extension (rstack.rstack, this repo). rstack.rstack already covers everything the old extension does. This issue tracks the sunset. Rslint (rstack.rslint) will follow the same process once this one is done.
Current state
- The old extension stands down when
rstack.rstack is installed (src/migrationNotice.ts in rstest), and its README says it is retired.
- As of 2026-09-29:
- Marketplace:
rstack.rstest has about 700 installs; rstack.rstack has 156.
- Open VSX:
rstack.rstest has 57k downloads; rstack.rstack has 4.4k.
- Cursor does not show registry deprecation flags. For Cursor users, a prompt from the old extension is the only migration signal they get.
Decisions
- No settings migration. The old extension's README gets a mapping table from
rstest.* to rstack.rstest.*. rstest.nodeExecutable maps to rstack.nodeExecutable.
- No changes to
rstack.rstack for the migration. All migration logic lives in the old extension's final release.
- No
extensionPack / extensionDependencies link between the two extensions.
- "Don't show again" is stored in
globalState, never in the user's settings.json.
- Supported core range for the final release is
@rstest/core ^0.12.0.
- Ship the final release before requesting deprecation. Once an extension is flagged deprecated, VS Code hides its Update action, and
disallowInstall also stops auto-update.
Final release behavior
The final release of the old extension checks these cases in order:
rstack.rstack is installed and enabled.
- Stand down, as it does today.
- Prompt: "Rstack has taken over; uninstall this extension."
- Uninstall Rstest runs
workbench.extensions.uninstallExtension on its own ID, then offers a reload.
- Don't show again sets a
globalState flag.
- Only check whether Rstack is installed. Do not also require workspace trust or
rstack.rstest.enable.
- The local
@rstest/core does not satisfy ^0.12.0.
- Do not start the worker.
- Show an error on every activation: "This extension is no longer maintained and only supports @rstest/core ^0.12.0 (found X). Install Rstack."
- There is no "Don't show again", because the extension cannot work in this case.
- This needs a new semver check. The current
versionCheck.ts only verifies that the @rstest/core/api export and createRstest exist, and has no upper bound.
- Only the old extension is present. This includes the case where Rstack is installed but disabled, because
getExtension only returns enabled extensions.
- Run normally.
- Prompt: "This extension is no longer maintained; install Rstack."
- Install Rstack runs
workbench.extensions.installExtension('rstack.rstack', { enable: true }).
- Don't show again sets a
globalState flag.
Checklist
Phase 0: rstack-editor
Phase 1: final rstack.rstest release (web-infra-dev/rstest)
Phase 2: registries and docs (2 to 4 weeks after Phase 1, once auto-update has reached most users)
Phase 3: stop CI and publishing in rstest
Phase 4: remove the source (once installs have dropped off)
References
The standalone Rstest extension (
rstack.rstest, source in web-infra-dev/rstestpackages/vscode) is being retired in favor of the unified Rstack extension (rstack.rstack, this repo).rstack.rstackalready covers everything the old extension does. This issue tracks the sunset. Rslint (rstack.rslint) will follow the same process once this one is done.Current state
rstack.rstackis installed (src/migrationNotice.tsin rstest), and its README says it is retired.rstack.rstesthas about 700 installs;rstack.rstackhas 156.rstack.rstesthas 57k downloads;rstack.rstackhas 4.4k.Decisions
rstest.*torstack.rstest.*.rstest.nodeExecutablemaps torstack.nodeExecutable.rstack.rstackfor the migration. All migration logic lives in the old extension's final release.extensionPack/extensionDependencieslink between the two extensions.globalState, never in the user'ssettings.json.@rstest/core^0.12.0.disallowInstallalso stops auto-update.Final release behavior
The final release of the old extension checks these cases in order:
rstack.rstackis installed and enabled.workbench.extensions.uninstallExtensionon its own ID, then offers a reload.globalStateflag.rstack.rstest.enable.@rstest/coredoes not satisfy^0.12.0.versionCheck.tsonly verifies that the@rstest/core/apiexport andcreateRstestexist, and has no upper bound.getExtensiononly returns enabled extensions.workbench.extensions.installExtension('rstack.rstack', { enable: true }).globalStateflag.Checklist
Phase 0: rstack-editor
previewflag fromrstack.rstackPhase 1: final
rstack.rstestrelease (web-infra-dev/rstest)^0.12.0semver guard on the local@rstest/coredisplayNamepackages/vscode/README.mdpackages/vscode/package.jsonfrombump.config.mtsandscripts/checkVersionConsistency.mjsPhase 2: registries and docs (2 to 4 weeks after Phase 1, once auto-update has reached most users)
rstack.rstest→rstack.rstack,disallowInstall: false) in Deprecated extensions microsoft/vscode-discussions#1. Allow about 3 weeks; they may ask to verify publisher ownership by email.extension-control/extensions.jsonwith the same entryrstack.rstestreferences in rstest docs, templates, and devcontainer examples withrstack.rstack. VS Code still recommends deprecated IDs listed in a repo's.vscode/extensions.json.Phase 3: stop CI and publishing in rstest
release_vscode_extensionjob from.github/workflows/release.yml.github/workflows/test.ymlVSCE_PAT/OVSX_PATand thevscode-marketplaceenvironment. First confirm the token is not shared with this repo's release.Phase 4: remove the source (once installs have dropped off)
git rm -r packages/vscode, then clean up the remaining references:package.jsontest:vscodeknip.jsonc.github/renovate.json5pnpm-workspace.yaml(@vscode/vsce-sign,hoistPattern).gitignore.vscode/launch.jsonand.vscode/tasks.jsonAGENTS.md.agents/skills/create-release-blog/SKILL.mddisallowInstall: true. On Open VSX, change an entry's values rather than deleting it: deleting the entry does not undo a deprecation.rstack.rslint(web-infra-dev/rslintpackages/vscode-extension)References