My Experience with Publishing an Extension for All VS Code IDEs
I've been working on an extremely basic VSCode extension:
Thanks for the idea Marco! And it was so easy to switch from OpenAI to Lllama via Groq using @aisdk š„
ā David Gomes (@davidrfgomes) August 12, 2025
Feels much better now, still not sure how to make it useful (possibly need to send the model a bit more than what's highlighted). https://t.co/XP5pjZ166O pic.twitter.com/DEZ2aIGCB6
The idea is to have an ever-present summary of what "you're looking at" in your IDE. Of course, there's a lot of work to do in other to make this remotely useful... I probably need to look at open files, commit history, open tabs, and definitely use the LSP server in order to come up with a much better summary.
Anyhow, I've already published it just in case anyone wants to try it:
But wait, why are there two links? Well, that's because there's two marketplaces for VSCode extensions:
- Microsoft's official marketplace (~80K extensions)
- Open VSX, which is ran by the Eclipse Foundation (~6K extensions)
But wait, why is the Eclipse foundation involved here? Well, besides the notorious Eclipse IDE, the Eclipse Foundation also builds the Theia IDE. It is an open-source VS Code alternative (sort of like VSCodium but it's not an actual VS Code fork; rather, it's built using Monaco Editor from the ground up).
So, what marketplaces should one publish to?
First of all, it really depends on how much you care about IDEs other than VSCode... However, there's a growing list of IDEs that are based off of VSCode in different ways:
- Cursor
- VSCodium
- Kiro
- Windsurf
- GitLab Web IDE
- ...and more!
And if you want to target these IDEs, then you'll want to publish to Open VSX as well. But how?
In theory, you can get away with just publishing to the VSCode Marketplace and then leveraging a nightly script that the Open VSX team put together which will re-publish your extension to Open VSX. Simply edit this mega-JSON file in a PR: https://github.com/EclipseFdn/publish-extensions/blob/master/extensions.json, and then your extension will be "synced" from one marketplace to the other.
However, notice that this file has not been edited in 3 months (as of writing this). So, if you want the "fast path", you should manually publish to both marketplaces, which isn't so hard. This is a very simple GitHub Actions workflow for publishing to both marketplaces:
name: Publish VS Code Extension
on:
workflow_run:
workflows: ["Build VS Code Extension"]
types:
- completed
branches:
- main
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'release' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run compile
- name: Download build artifact
if: github.event_name == 'workflow_run'
uses: actions/download-artifact@v4
with:
name: extension-vsix
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ github.event.workflow_run.id }}
- name: Package VSIX (if not from artifact)
if: github.event_name == 'release'
run: npx vsce package
- name: Publish to VS Code Marketplace
run: npx vsce publish --no-dependencies
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
- name: Publish to Open VSX Registry
run: npx ovsx publish --no-dependencies
env:
OVSX_PAT: ${{ secrets.OVSX_PAT }}
Notice that the two CLIs (vsce
and ovsx
) are very similar. Furthermore, it'd be better to separate this job into two separate workflows.
The entire workflow above was generated by AI for me, and without me specifying that I wanted both marketplaces (my exact prompt was let's now add another workflow to publish this extension to the VSCode marketplace. it should run after the build workflow
). So, I can only assume that publishing to both marketplaces is a somewhat popular thing to do nowadays.
What's the hard part then?
The hard part... is signing up and getting access tokens for both marketplaces (VSCE_PAT
and OVSX_PAT
in the workflow above). Unfortunately, neither the VS Code Marketplace nor Open VSX have a great UX around signing up and getting an access token to be able to publish extensions.
For Open VSX, you have to sign up and then follow a bunch of steps which includes signing an Eclipse Foundation agreement (which in turn requires linking your GitHub account). The UX is a bit confusing, but you'll eventually figure it out.
For Microsoft's marketplace, I actually found it harder (because you essentially have to sign up for Azure). But, at least, they have decent docs on it.
Anyway, once you have access tokens you just have to put them in your GitHub secrets and that's it! They last a year at most, so every year you'll have to re-figure this out.
What are the differences between the two marketplaces?
In all fairness, that would warrant its own blog post and I simply don't have the expertise yet to provide full commentary on it. I did, however, find this thread on Cursor's forums to have a ton of insights in case you want to learn more. But essentially, Microsoft's marketplace is much larger, is much more established, and it has more security in place.
As more and more VS Code "distributions" come around, I strongly believe that Open VSX will get more love and attention. In a way, VS Code being partially open-source has allowed it to become a quasi-Android for IDEs. So, hopefully in the future Open VSX will become stronger!
And to finish this blog post, here's my extension showing up just fine on VSCodium:

Feel free to reach out on X if you have any thoughts!