Foreword
CodeBind Docs 写完、VS Marketplace也挂上去了,本以为Cursor那边搜一下就能装。结果发现:Cursor扩展市场不跟Microsoft那套走,得另发一份到Open VSX。下面把VS Code怎么发、Open VSX怎么发、以及这趟踩的坑一起记下来,免得下次又忘。
两套市场
Cursor和VS Code的插件市场原本是一套,但是后来微软收紧策略,导致分开了,变成了2个市场。
Cursor里有两套完全不同的“市场”,名字都带marketplace
| 名字 | 实际装啥 | 怎么上架 |
|---|---|---|
| Extensions(扩展面板) | VS Code 那类插件,CBD 就是这个 | 发到 Open VSX |
| Plugins(Customize / cursor.com/marketplace) | rules、skills、MCP、hooks | 另搞一套 .cursor-plugin/,走人工审核 |
CBD是正经VS Code扩展,跟Cursor Plugin那套无关。想让人在Cursor里 Ctrl+Shift+X 搜到,只发Microsoft Marketplace不够,必须再发Open VSX。
官方也写明了:Cursor第三方扩展走Open VSX,中间再套一层他们自己的安全扫描代理。
VS Code插件
官方文档:Publishing Extensions。下面按我实际走过的顺序记。
0. 扩展本身先能装
本地 npm run compile 过,扩展开发宿主里跑得起来,上架前最好再过一遍测试。打包工具用官方的 @vscode/vsce(老包名 vsce 别再用)。
package.json 至少这些要齐,缺了会拒:
| 字段 | 说明 |
|---|---|
name |
扩展名,小写、短横线,进 ID 的那截 |
publisher |
发布者 ID,跟市场里建的一模一样 |
version |
semver,每次改内容再发必须升 |
engines.vscode |
最低 VS Code 版本 |
displayName / description |
市场展示用 |
icon |
建议 128×128 PNG |
repository |
仓库地址,市场页会挂链接 |
另外README、CHANGELOG、LICENSE建议都有,市场页长什么样,基本看README。CBD还补了 keywords、categories、galleryBanner,好看一点而已。
扩展完整ID = publisher.name,例如 codebind.codebind-docs。这个ID以后基本改不了,起名字时想清楚。
1. Azure DevOps搞一个PAT
Marketplace 认证挂在 Azure DevOps 上,所以要先搞 Personal Access Token:
- 打开 Azure DevOps,用微软账号登录(跟后面建 Publisher 用同一个)
- 用户设置 → Personal access tokens → New Token
- Organizations 选 All accessible organizations(选成某个具体 org 很容易发不出去)
- Scopes 勾 Marketplace → Manage
- 创建后立刻复制,关掉就再也看不见了
这完全是Agent的说法,实际个人作者根本不需要,直接走下步即可
2. 创建Publisher

- 打开 https://marketplace.visualstudio.com/manage
- Create publisher
- ID:唯一标识,进URL,创建后不能改(CBD用的
codebind) - Name:市场上显示的名字,品牌文案,这个还能动
ID别跟显示名搞混:ID是机器认的,Name是给人看的。
3. 打包 / 发布
命令行一把梭:
npm run compile
npx @vscode/vsce publish --no-dependencies
# CBD 仓库里等价于:npm run publish:vsce
publish 内部会跑 vscode:prepublish(一般就是compile),再上传。
先打 .vsix 再网页传(更稳,出问题好排查):
npm run package
# → codebind-docs-x.y.z.vsix
然后到manage页,进入你的publisher,选择New Extension或更新已有扩展,再上传 .vsix。

本地试装:
code --install-extension codebind-docs-x.y.z.vsix
或命令面板:Extensions: Install from VSIX...。
4. 更新版本时注意
- 改了README截图、描述、代码,都要bump
version,同一版本号覆盖不了 unpublish和“彻底删除”不是一回事,删除后名字可能被永久占用,慎用.vscodeignore写清楚,别把node_modules、测试产物、开发脚本打进包,反过来媒体、out/、README别误忽略
CBD这边VS市场页:
https://marketplace.visualstudio.com/items?itemName=codebind.codebind-docs
Token
拿token,需要先新建一个组织,新建一个项目,然后就能拿到个人token了
https://go.microsoft.com/fwlink/?LinkId=307137

默认只能一年,而且由于政策变动,目前只支持到26年12月1号,后续看情况吧

Open VSX
Cursor扩展面板吃的是Open VSX,步骤和VS平行、账号体系完全两套。

- open-vsx.org 用GitHub登录
- 注册Eclipse Foundation账号,GitHub Username填成同一个GitHub
- 个人设置里Log in with Eclipse,签Open VSX Publisher Agreement(没签完一律发不出去)
- 生成Access Token
- 创建namespace(对应
package.json的publisher) ovsx publish或网页拖.vsix
npx ovsx create-namespace codebinddocs -p <token>
npx ovsx publish codebind-docs-x.y.z.vsix -p <token>
# 或:npm run publish:ovsx
仓库里 publish:vsce / publish:ovsx 两边各发一遍就行。注意:Open VSX的namespace可以和VS的publisher不同(我就是因为撞名被迫拆开的)。
Token

拿token比较简单,直接生成即可,后续给到CI流程进行自动化
认领namespace
发完以后页面上很可能还有一条警告,大意是:
This version of the “CodeBind Docs” extension was published by elmagnificogi. That user account is not a verified publisher of the namespace “codebinddocs” of this extension.
意思是:扩展已经发上去了,但 codebinddocs 这个命名空间还没被官方认定归你所有。
Open VSX和VS Marketplace不一样:
| VS Marketplace | Open VSX | |
|---|---|---|
| 建 publisher / namespace | 你就是所有者 | 你只是 contributor,能发版 |
| 验证勾 | 建好就有 | 还要再 claim ownership 一次 |
所以:elmagnificogi 能发版,但还不是 codebinddocs 的verified owner。扩展能用、Cursor也能搜到,只是详情页带 ⚠️。
消掉警告的办法:去 EclipseFdn/open-vsx.org 开一个Issue,申请命名空间所有权,大致写:
- Open VSX / GitHub用户名:
elmagnificogi - 要认领的namespace:
codebinddocs - 证明你是维护者,例如仓库、VS市场页链接
标题可以写成:Namespace Ownership Request: codebinddocs。
管理员通过后,namespace变成verified,你就是owner,警告会消失(有时再发一个新版本才完全干净)。

实际我已经获得授权了,但是依然未认证,这个需要github上继续联系对方,他应该只是设置了publisher,但是没把你设置为owner,导致这个命名空间一直没有被切换过来。
踩坑
以为发了VS就能在Cursor搜到
社区里一堆人踩过:VS Marketplace有货,Cursor扩展面板搜不到。原因就是上面那条,Cursor默认吃Open VSX,不自动镜像Microsoft市场。
临时办法:本机装 .vsix(Extensions: Install from VSIX...)。长期还是得发Open VSX。
没签Eclipse协议
报错大意:
You need to sign the Eclipse Foundation Open VSX Publisher Agreement…
Open VSX是Eclipse基金会管的,发布者协议必须签。注意:
- “Eclipse Contributor Agreement”和这个不是一回事
- 登录Eclipse时用的GitHub,得和open-vsx.org登录的是同一个
- 签完回到Profile,能看到协议相关入口才算过
namespace太像,不让建
想建 codebind,直接被拒:
Namespace name ‘codebind’ is too similar to existing namespace(s): CodeMind.
Open VSX有typosquatting / 相似度检查,名字撞得太近就不给你。跟CodeMind差几个字母,系统觉得用户会搞混,讲道理偏严,但也没地方跟机器人扯皮。
最后改成 codebinddocs,扩展ID变成:codebinddocs.codebind-docs。
显示名照样可以叫CodeBind Docs,变的是URL / ID那截,不是产品名。
VS那边改不了publisher
第一反应:那我把VS Marketplace也改成 codebinddocs,两边统一?
不行。publisher.name 是扩展唯一身份:
- Publisher ID创建后改不了
- 你自己改
package.json再发,市场会当成另一个新扩展 - 老用户不会自动迁,下载量也不合并
- 真要迁移得找Marketplace Support申请transfer,现在很少批,还一堆副作用
所以现实方案是:
- VS Marketplace:继续
codebind.codebind-docs - Open VSX / Cursor:用
codebinddocs.codebind-docs
两边ID不一致,难看一点,但比下架重来强。下架还可能把名字永久占死,更亏。
删除改名
后续VS这边重新建publish,名字改成了一样的,就是删了之前的,但是上传就一直提示插件已经存在了

VS Marketplace自大约2025年中起的政策是:
扩展一旦被 Remove(删除),
name(ID 里第二段,例如codebind-docs)会永久占用,原作者也不能再用。
干,所以现在要换个name上传,真的离谱了
Summary
上架扩展本身不难,难的是两个市场两套规矩,还都叫marketplace。Publisher核心就三件事:身份(账号 / 协议)、命名空间(撞名真的会卡死)、版本与打包(升版本、.vsix、两边各发)。
CBD现在:
- VS:codebinddocs.codebinddocs
- Cursor:codebinddocs
Quote
https://github.com/eclipse-openvsx/openvsx/wiki/Namespace-Access
https://github.com/EclipseFdn/open-vsx.org/wiki/Guidelines-on-Namespace-Requests