Selling VS Code Extensions Off the Marketplace: Why Developers Switch

Selling VS Code Extensions Off the Marketplace: Why Developers Switch
If you open the VS Code Marketplace right now and scroll through the most-installed extensions, you will notice something. Many of them are built by indie developers. Some have two million installs. And none of them earn a dollar from VS Code directly, because the marketplace has no payment layer. Microsoft never built one. That has been the case for years and in 2026 it is still the case.
For a while this looked like a problem. In hindsight it turned into an opportunity. Extension developers can freely distribute the core tool through the marketplace while selling the premium version through their own store, and Microsoft explicitly allows this. The extensions that figured this out early are the ones making real money.
This is a practical guide on how to sell VS Code extensions the modern way. Free on the marketplace, paid pro features gated behind a license, and the whole monetization layer handled by 3DIMLI.
Why The Marketplace Alone Is Not Enough
The marketplace is incredible for reach. It is terrible for revenue. There is no way to charge users inside the extension gallery, no way to take payments at install, and no built-in subscription engine. If you want money, you have to build the store yourself or plug into one.
This is not a bug, it is a distribution platform. Microsoft wants VS Code to be universally free to install. They leave monetization to the extension authors. That is actually the ideal arrangement for indie devs, because it means you keep control of the customer, the pricing, and the brand.
The extension authors who are making real income treat the marketplace as a discovery channel and treat their own store as the business.
The Hybrid Model That Actually Works
The winning pattern in 2026 is simple.
- A free version of the extension lives on the VS Code Marketplace.
- The free version is useful on its own.
- Pro features are visible in the UI but gated behind a license key.
- Users click Upgrade, land on your 3DIMLI product page, buy, and get a key.
- They paste the key into a VS Code setting, the extension verifies it, pro features unlock.
This gives you the Marketplace's reach without giving up any revenue. It also lets you price freely instead of being stuck inside whatever pricing structure a platform would impose.
Why 3DIMLI Fits VS Code Extensions Specifically
There are five things that matter when picking a store for a VS Code extension, and 3DIMLI handles all of them without forcing you to bolt on third-party services.
Zero Platform Commission
The most obvious one. Other creator platforms take 5 to 10 percent of every sale. A marketplace like CodeCanyon takes 30 to 50. 3DIMLI takes zero. You pay only the underlying payment processor fee, which is what Gumroad or Payhip would charge on top of their own cut anyway. Over a year on a modestly successful extension this is thousands of dollars staying in your pocket.
Direct Payouts To PayPal, Stripe, Or Razorpay
Payouts go straight from the buyer's card to your connected account. No weekly payout cycle, no minimum threshold to clear, no mystery hold periods. If you sold ten copies today, you can see the money today.
A Real License Verification API
This is the one that separates 3DIMLI from most of its competitors. When a buyer purchases your extension on 3DIMLI, they get a unique Order Item ID. That ID is their license key. Your extension calls the 3DIMLI verification API, confirms the key is legitimate, and learns which tier the buyer purchased. No custom database, no homemade key generator, no compliance risk.
Tiered License Based Pricing
You can offer a single extension listing with multiple license tiers. A Solo license for individual devs, a Team license for five seats, and a Company license with a bigger seat count and priority support. Each tier has its own price and its own activation rules. All tracked through the same product.
Branded Store At Your Own URL
When a developer is about to pay $79, they want to see a real storefront. A custom 3DIMLI store URL with your logo and product lineup looks like a real software company, which matters more for conversions than most devs give it credit for.
The User Flow, Step By Step
User installs free extension from Marketplace
|
v
User tries a premium feature
|
v
Extension shows a small Upgrade prompt in the editor
|
v
User clicks and browser opens the 3DIMLI product page
|
v
User completes checkout on 3DIMLI
|
v
License key (Order Item ID) arrives by email + on success page
|
v
User opens VS Code settings -> pastes key into "myExtension.licenseKey"
|
v
Extension POSTs key to your verify function
|
v
Your function calls 3DIMLI verification API
|
v
Response returns valid + tier
|
v
Pro features unlocked, status bar shows "Pro"
Implementation In The Extension
The cleanest pattern is to keep license verification on a tiny serverless endpoint you control, and have the extension talk only to that endpoint. This gives you room to add throttling, caching, and logging without shipping those concerns inside the extension bundle.
Setting Definition In package.json
"contributes": {
"configuration": {
"title": "My Extension Pro",
"properties": {
"myExtension.licenseKey": {
"type": "string",
"default": "",
"description": "Paste your license key from 3DIMLI to unlock Pro features."
}
}
}
}
Minimal Activation Code
import * as vscode from "vscode";
import axios from "axios";
let isPro = false;
let licenseTier: string | null = null;
export async function activate(context: vscode.ExtensionContext) {
const config = vscode.workspace.getConfiguration("myExtension");
const key = config.get<string>("licenseKey");
const result = await verifyLicense(key);
isPro = result.valid;
licenseTier = result.tier ?? null;
updateStatusBar();
vscode.workspace.onDidChangeConfiguration(async (e) => {
if (e.affectsConfiguration("myExtension.licenseKey")) {
const newKey = vscode.workspace
.getConfiguration("myExtension")
.get<string>("licenseKey");
const r = await verifyLicense(newKey);
isPro = r.valid;
licenseTier = r.tier ?? null;
updateStatusBar();
if (r.valid) {
vscode.window.showInformationMessage(
`Pro unlocked. Tier: ${r.tier}`
);
}
}
});
context.subscriptions.push(
vscode.commands.registerCommand("myExtension.openUpgrade", () => {
vscode.env.openExternal(
vscode.Uri.parse("https://www.3dimli.com/yourstore/your-extension")
);
})
);
}
async function verifyLicense(key: string | undefined) {
if (!key) return { valid: false };
try {
const res = await axios.post("https://your-worker.example.com/verify", {
key,
});
return res.data;
} catch {
return { valid: false };
}
}
function updateStatusBar() { /* pro badge in status bar */ }
Your worker function then calls the 3DIMLI verification endpoint, returns the result, and optionally caches for a few hours. This keeps your real infrastructure simple and reuses 3DIMLI as the source of truth. The full flow is documented inside the 3DIMLI support docs.
Picking The Right Features To Gate
This is where most extensions either over-gate and kill install numbers, or under-gate and never convert.
Good pro candidates.
- AI-powered suggestions with real API costs behind them.
- Cloud sync for settings, snippets, or project templates.
- Team-only features like shared configurations and enforced linting rules.
- Premium themes, icon packs, or advanced UI customization.
- Priority support, private Discord channel, or early access to new versions.
Bad pro candidates.
- Core productivity functions the free version clearly needs.
- Features the open source community will obviously fork anyway.
- Cosmetic tweaks that do not change how the extension is used.
The rule of thumb is that the free tier should feel generous, and the pro tier should feel obviously valuable for the people it is aimed at. If a power user cannot name three reasons to upgrade within thirty seconds of reading your pricing page, the gating is wrong.
Pricing Patterns That Convert
Extensions tend to do well in three price buckets in 2026.
- $19 to $29 one-time for utility extensions aimed at individuals.
- $49 to $99 annual for workflow extensions with ongoing updates.
- $199 to $399 per seat per year for team-focused extensions sold to engineering managers.
Tiered license pricing on 3DIMLI lets you combine any two of these inside the same listing. For instance, a Solo license at $29 one-time and a Team license at $199 per year, same extension, different unlock behavior.
The Upgrade Moment In The UI
The single biggest lever on conversion inside a VS Code extension is how you handle the upgrade moment. Get it wrong and users uninstall. Get it right and people actually thank you for the nudge.
Subtle patterns that work.
- A small "Pro" tag on menu items that require a license.
- A command palette entry called "Upgrade to Pro" that opens the product page.
- A status bar item showing "Free" when no license is active, clickable to open upgrade info.
- A welcome notification on first install with a friendly one-liner and a dismiss button.
What to avoid.
- Modal dialogs that block the editor on load.
- Repeated toast popups every few minutes.
- Fake errors pretending a feature is broken when it is actually gated.
Developers are a specific audience. They will pay happily for tools that respect their time and will rage-review anything that feels manipulative.
Where To Sell: Comparison
| Feature | Gumroad | SendOwl | Whop | 3DIMLI |
|---|---|---|---|---|
| Commission | 10% + fees | Flat monthly | 3% + fees | 0% |
| License Verification API | Basic | Basic | Limited | Full public API |
| Tiered licenses in one product | No | Partial | Limited | Yes, native |
| Direct payouts | Weekly hold | Yes | Weekly | PayPal/Stripe/Razorpay |
| Custom branded store URL | Subdomain only | Yes | Whop subdomain | Custom URL included |
Anti-Piracy Without Hurting Real Users
You cannot fully prevent piracy in a client-side JavaScript extension. What you can do is make legitimate use easier and legitimate renewal cheaper than whatever pirates are offering.
- Bind licenses to a machine fingerprint or user identifier on first activation.
- Re-verify quietly in the background once a day.
- Allow a generous offline grace window so flaky wifi never locks out a paying user.
- Keep the actual premium logic calling out to a server where possible, so a cracked build has to reimplement the backend too.
Do not ship aggressive DRM. It annoys paying customers more than it stops casual piracy.
Growing The Install Base
Marketplace SEO matters more than most extension devs admit. The title, the first sentence of the description, the tags, and the hero image all move the ranking. Ship a short looping GIF that shows a real user flow in the first five seconds.
Outside the marketplace, target the communities your users actually live in. A dev-focused YouTube channel or a niche subreddit can send more converting traffic than a Hacker News hit. And keep a changelog on your 3DIMLI product page so returning visitors can see the extension is alive and maintained.
You can also list adjacent digital products on 3DIMLI alongside the extension. Since 3DIMLI supports nine product types including Software, Graphics, Ebooks, Video, and more, you could bundle the extension with a paid tutorial or a cheatsheet PDF and lift the average order value.
The Takeaway
The VS Code Marketplace is great at getting your extension in front of developers. It is bad at turning those developers into paying customers. The hybrid model of free distribution plus paid licenses fixes that completely, and in 2026 the tooling has finally caught up.
3DIMLI gives you zero commission, direct payouts, tiered license pricing, a real verification API, and a branded store, all without stitching together five services. If you have built an extension worth paying for, there is no reason not to let users pay you for it.
Start your 3DIMLI store free at https://www.3dimli.com/register.