That’s really sad that the marketplace doesn’t have the download URLs anymore.
However, they’re still queryable the API, and, if you just install regular VSCode, then the extension searchbar → gear icon still shows the “Download VSIX” option.
Per e.g. How can I install Visual Studio Code extensions offline? - Stack Overflow, you can create a small index.html
file that you can open in your browser
index.html
<!DOCTYPE html>
<html>
<body>
<span>search term: </span><input id="q" type="text">
<pre id="res">
<script>
async function searchVsix(searchString, count = 10) {
let res = await fetch(
`https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery`, {
method: "POST",
body: JSON.stringify({
assetTypes: [], filters: [{
criteria: [
{ filterType: 8, value: `Microsoft.VisualStudio.Code` },
{ filterType: 10, value: searchString },
{ filterType: 12, value: `37888` },
],
direction: 2, sortBy: 4, sortOrder: 0, // by install count
pageSize: count, pageNumber: 0, pagingToken: null,
}], flags: 870,
}),
headers: { "content-type": "application/json" },
});
let j = await res.json();
console.log(j.results[0]);
return j.results[0].extensions.map(e => ({
publisher: e.publisher.publisherName,
name: e.extensionName,
vsixs: e.versions.map(ver => ({
version: ver.version,
targetPlatform: ver.targetPlatform,
source: ver.files.find(f => f.assetType === `Microsoft.VisualStudio.Services.VSIXPackage`).source
}))
}));
}
const qIn = document.getElementById("q");
const show = document.getElementById("res");
qIn.addEventListener("change", async (ev) => {
const q = qIn.value;
if (!q) return;
const res = await searchVsix(q);
show.textContent = "";
console.log(res);
res.forEach(extension => {
extension.vsixs.forEach(vsix => {
const a = document.createElement("a");
a.textContent = `${extension.publisher}.${extension.name}-${vsix.version}-${vsix.targetPlatform}`;
a.download = `${extension.publisher}.${extension.name}-${vsix.version}-${vsix.targetPlatform}.zip`;
a.style.display = "block";
a.href = vsix.source;
a.target = "_blank"; // sandboxing :(
a.referrerPolicy = "no-referrer";
a.onclick = (ev) => { window.open(vsix.source, "_blank"); }; // sandboxing :(
show.appendChild(a);
});
});
});
</script>
</body>
</html>
And you can just search for an extension name and grab the download URLs.