Publishing IDE Extensions: From Build to Marketplace
You built an extension. Now you want it out there. The docs are scattered. Microsoft says one thing, Open VSX another. I spent hours figuring out the actual path to publishing IDE extensions - build a .vsix, upload to two platforms, done. No bullshit. Here's what works.
>
Build a .vsix file, upload it to two platforms, and you're done. That's publishing IDE extensions
in practice.
VS CodeOpen VSXCursor
What This Guide Covers //
Publishing IDE extensions to Microsoft Marketplace (VS Code) and Open VSX (Cursor, Antigravity).
Same .vsix file for both. One build, two uploads.
The Two Marketplaces
Here's what you need to know:
Microsoft Marketplace - For Visual Studio Code
Open VSX - For Cursor IDE and Antigravity IDE (they use the same platform)
Important: Cursor and Antigravity both use Open VSX. Same .vsix file, same upload process. No difference. One upload covers both IDEs.
This is the packaged version of your extension. Everything gets compiled into one file.
The Process
Compile your extension - Build your TypeScript/JavaScript code
Package it - Use vsce to create the .vsix file
Test it locally - Install the .vsix file before publishing
Don't Skip Local Testing //
Testing your .vsix file locally is non-negotiable. Install it locally, test all features, make
sure everything works. I've seen extensions ship with broken icons because someone skipped this
step.
Important: Testing your .vsix file locally is super important. I am writing a dedicated guide for this process, but for now: install it locally, test all features, make sure everything works. Don't skip this step.
Versioning is Critical
Keep the same filename when you update versions. The marketplaces handle versioning internally based on your package.json.
Important: When you build a new version, tell your AI agent (or yourself) what version number to output. Update it in package.json first, then package.
Example:
First version: my-extension-1.0.0.vsix
Update version in package.json to 1.0.1
Build: my-extension-1.0.1.vsix (or keep same name, marketplace reads version from package.json)
Step 2: Configure Your Extension
Your package.json is where the magic happens. Key fields you need:
publisher - Your unique publisher ID (create account first)
version - Semantic versioning (1.0.0, 1.0.1, etc.)
name - Extension identifier (lowercase, no spaces)
displayName - What users see
description - Brief description (used in search)
categories - Helps users find your extension
keywords - Important for search (array of strings)
engines.vscode - Minimum VS Code version required
Pro tip: Keep config snippets short. Don't paste entire files. Show the important parts.
Step 3: The Most Important Part - README.md
This is critical. Your README.md file is what gets exposed in the marketplace. It's how users find you. It's how search works. It's everything.
Why It Matters
Search rankings - Marketplaces index README content
User decisions - Users read README to decide if they want your extension
Discoverability - Keywords in README help users find you
Professionalism - A good README builds trust
The Critical Detail
Your README.md must be included in the packaged .vsix file. That's how it gets to the marketplace. Make sure it's in your extension directory before packaging.
What Makes a Great README
Immediate description - Tell users exactly what your extension does in the first paragraph
Features - Clear list of what it does
Installation - How to install it
See It In Action - Screenshots, GIFs, videos
How to Use - Clear usage instructions
Keywords - Strategically placed throughout (think like your users)
>
Your README is your extension's sales page. Make it excellent. The marketplace is a search engine
your README is what gets indexed.
There's so much more to cover about README.md that a dedicated guide is in the works. But for now, know this: Your README is your extension's sales page. Make it excellent.
Step 4: Create Your Accounts
You need accounts on both platforms. Do this before publishing.
One upload, two IDEs. Smooth like a tender loving schmuse-katze. π±
Mission Accomplished //
Build your .vsix. Upload to two platforms. Make sure your README.md is excellent. That's
publishing IDE extensions. The hard part is building a great extension. The publishing part? Just
logistics.
Quick Checklist
Before you publish:
[ ] Extension compiled and tested
[ ] .vsix file created and tested locally (see dedicated guide)
[ ] package.json configured with publisher ID
[ ] Version number updated
[ ] README.md included in extension directory
[ ] README.md is professional and keyword-rich
[ ] Accounts created on both marketplaces
[ ] Screenshots ready (at least 3-5)
[ ] Extension tested in target IDEs
Common Mistakes
Don't do this:
β Forget to include README.md in your extension directory
β Skip testing the .vsix file locally
β Use generic descriptions
β Forget to update version numbers
β Publish without proper README.md
Do this:
β Test thoroughly before publishing
β Write an excellent README.md
β Use clear, descriptive names
β Include visual examples (screenshots/GIFs)
β Keep extensions updated
That's It
Build your .vsix file. Upload to two platforms. Make sure your README.md is excellent. Mission accomplished. π
The process is straightforward once you know the steps. The hard part is building a great extension. The publishing part? That's just logistics.
Get your extension out there. Share your work. Help other developers.
Questions? Issues? Build it, test it, publish it. That's how you learn.
Article Stats
2Marketplaces
ActiveStatus
Latest Blog Posts
Investigation2026-09-13
It's NemoClaw's fault.
NemoClaw 0.0.123 ships smart-memory docs for a door it welded shut. Four locks, one stale manual, one OpenClaw crash β and qwen3-embedding:4b sitting idle in Ollama.
Opinion2026-09-06
When Are You Getting Absorbed?
Absorption is not a maybe. MCP-connected corporate agents empty seats floor by floor β and the Agent War is already lit.
Opinion2026-09-06
Is OpenClaw About to Become DeadClaw?
OpenClaw becomes DeadClaw when the Gateway stays too complex for real users. Consumer-ready defaultsβnot more pluginsβare what get Agents to work out of the box.
Opinion2026-09-06
Your AI Agent Needs a Door. I Built One.
I use WebMCP because my sites are Agent-first. The product is the Agent Gateway β MCP, REST, notify, discovery β so YOUR AI AGENT connects to bernhardrieder.com without screenshot theater. WebMCP is the in-page door.
A
B
C
This article is part of a Semantic Cluster. All links are managed by the Digital Architect AI.