Skip to content

Instantly share code, notes, and snippets.

@wanglf
Last active February 27, 2025 17:01
Show Gist options
  • Save wanglf/7acc591890dc0d8ceff1e7ec9af32a55 to your computer and use it in GitHub Desktop.
Save wanglf/7acc591890dc0d8ceff1e7ec9af32a55 to your computer and use it in GitHub Desktop.
Download VS Code extensions as VSIX

How to use?

  • Copy content of vsix-bookmarklet, create a bookmark in your browser.
  • Navigate to the web page of the VS Code extension you want to install.
  • Click the bookmark you just created, then click the download button.
    download
  • After download finished, rename the file extension to *.vsix.
  • In VS Code, select Install from VSIX... in the extension context menu.
    vsc

How does it work?

http://stackoverflow.com/a/38866913/1032492

A VS Code extension's offline install package (VSIX) is available at:

https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publisher}/extension/${extension name}/${version}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage

Take the syntax highlight extension for Vue.js as an example:

https://marketplace.visualstudio.com/items?itemName=liuji-jim.vue

  • The itemName query is a composition of publisher and extension name, separated with a dot.
  • The publisher is liuji-jim.
  • The extension name is vue.
  • The latest version number is in More Info section on the right side.
    more

So the package can be downloaded via this URL:

https://liuji-jim.gallery.vsassets.io/_apis/public/gallery/publisher/liuji-jim/extension/vue/0.1.3/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage

javascript:!function(){(function(){for(var%20e={version:%22%22,publisher:%22%22,identifier:%22%22,getDownloadUrl:function(){return[%22https://%22,this.identifier.split(%22.%22)[0],%22.gallery.vsassets.io/_apis/public/gallery/publisher/%22,this.identifier.split(%22.%22)[0],%22/extension/%22,this.identifier.split(%22.%22)[1],%22/%22,this.version,%22/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage%22].join(%22%22)},getFileName:function(){return[this.identifier,%22_%22,this.version,%22.vsix%22].join(%22%22)},getDownloadButton:function(){var%20e=document.createElement(%22a%22);return%20e.innerHTML=%22Download%20VSIX%22,e.href=%22javascript:void(0);%22,e.style.fontFamily=%22wf_segoe-ui,Helvetica%20Neue,Helvetica,Arial,Verdana%22,e.style.display=%22inline-block%22,e.style.padding=%222px%205px%22,e.style.background=%22darkgreen%22,e.style.color=%22white%22,e.style.fontWeight=%22bold%22,e.style.margin=%222px%205px%22,e.setAttribute(%22data-url%22,this.getDownloadUrl()),e.setAttribute(%22data-filename%22,this.getFileName()),e.onclick=function(e){e.target.onclick=null,e.target.innerHTML=%22Downloading%20VSIX...%22;var%20t=new%20XMLHttpRequest;console.log(e.target.getAttribute(%22data-url%22)),t.open(%22GET%22,e.target.getAttribute(%22data-url%22),!0),t.responseType=%22blob%22,t.onprogress=function(t){if(t.lengthComputable){var%20r=t.loaded/t.total*100;e.target.innerHTML=%22Downloading%20VSIX...%22+r.toString()+%22%25%22}},t.onload=function(t){if(200==this.status){var%20r=this.response,n=document.createElement(%22a%22);n.href=window.URL.createObjectURL(r),n.download=e.target.getAttribute(%22data-filename%22),n.click(),e.target.href=n.href,e.target.download=n.download,e.target.innerHTML=%22Download%20VSIX%22}else%20e.target.innerHTML=%22Error.%20Please%20reload%20the%20page%20amd%20try%20again.%22,alert(%22Error%20%22+this.status+%22%20error%20receiving%20the%20document.%22)},t.onerror=function(t){e.target.innerHTML=%22Error.%20Please%20reload%20the%20page%20amd%20try%20again.%22,alert(%22Error%20%22+t.target.status+%22%20occurred%20while%20receiving%20the%20document.%20%22)},t.send()},e}},t={Version:%22version%22,Publisher:%22publisher%22,%22Unique%20Identifier%22:%22identifier%22},r=document.querySelectorAll(%22.ux-table-metadata%20tr%22),n=0;n%3Cr.length;n++){var%20i=r[n],a=i.querySelectorAll(%22td%22);if(2==a.length){var%20o=a[0].innerText.replace(/^\s+|\s+$/g,%22%22),l=a[1].innerText.replace(/^\s+|\s+$/g,%22%22);t.hasOwnProperty(o)%26%26(e[t[o]]=l)}}document.querySelector(%22.vscode-moreinformation%22).parentElement.appendChild(e.getDownloadButton()).scrollIntoView(),e})()}();
@CypherpunkSamurai
Copy link

@CypherpunkSamurai 404 on my end

ah sorry, forgot to make it public. check now

@bsdice
Copy link

bsdice commented Feb 24, 2025

@CypherpunkSamurai Bugreport... if you look for a package that needs binaries (ARM64, x64 etc.) I get Apple binaries. Example: Try "shellcheck". Here I got Apple arm64. Probably because it was the first in the list alphabetically.

I used the Javascriptlet to download [email protected] because I use vscodium on Linux x64. VSIX downloaded is also not of type "universal" with more than one arch.

Also, files are downloaded as Microsoft.VisualStudio.Services.zip would prefer to be named [email protected].

@CypherpunkSamurai
Copy link

@CypherpunkSamurai Bugreport... if you look for a package that needs binaries (ARM64, x64 etc.) I get Apple binaries. Example: Try "shellcheck". Here I got Apple arm64. Probably because it was the first in the list alphabetically.

I used the Javascriptlet to download [email protected] because I use vscodium on Linux x64. VSIX downloaded is also not of type "universal" with more than one arch.

Also, files are downloaded as Microsoft.VisualStudio.Services.zip would prefer to be named [email protected].

Noted. Will address in a patch.

The file name however, I'm unsure if I can add it as it's fetched from the server.

@bsdice
Copy link

bsdice commented Feb 24, 2025

@CypherpunkSamurai Appreciate it. If you look on https://open-vsx.org/extension/timonwong/shellcheck and click Download it gives you a large list of architectures. Anyhow, very tidy and snappy web ui, too. Could be its own vscodium extension, maybe. Like Chromium Web Store for ungoogled-chromium. But people are well advised to just stick with versions that work and not update like mad, to lower malware risk. Update only for known and desireable new features. Like often the case recently with Ruff linter. Thank you!

@grester
Copy link

grester commented Feb 25, 2025

@Nathrai

javascript:(function()%7Bconst%20URL_VSIX_PATTERN%20%3D%20'https%3A%2F%2Fmarketplace.visualstudio.com%2F_apis%2Fpublic%2Fgallery%2Fpublishers%2F%24%7Bpublisher%7D%2Fvsextensions%2F%24%7Bextension%7D%2F%24%7Bversion%7D%2Fvspackage'%3B%0A%0Alet%20itemName%20%3D%20new%20URL(window.location.href).searchParams.get('itemName')%3B%0Alet%20%5Bpublisher%2C%20extension%5D%20%3D%20itemName.split('.')%3B%0Alet%20version%20%3D%20document.querySelector('tbody%20tr%20.version-history-container-column').textContent%3B%0A%0Alet%20url%20%3D%20URL_VSIX_PATTERN.replace('%24%7Bpublisher%7D'%2C%20publisher)%0A%09%09%09%09%09%09%20%20.replace('%24%7Bextension%7D'%2C%20extension)%0A%09%09%09%09%09%09%20%20.replace('%24%7Bversion%7D'%2C%20version)%3B%0A%0Awindow.open(url%2C%20'_blank')%3B%7D)()%3B

Kudos to you!
F Microsoft.

@CypherpunkSamurai
Copy link

@CypherpunkSamurai Appreciate it. If you look on https://open-vsx.org/extension/timonwong/shellcheck and click Download it gives you a large list of architectures. Anyhow, very tidy and snappy web ui, too. Could be its own vscodium extension, maybe. Like Chromium Web Store for ungoogled-chromium. But people are well advised to just stick with versions that work and not update like mad, to lower malware risk. Update only for known and desireable new features. Like often the case recently with Ruff linter. Thank you!

Fixed.

Checkout:
https://cypherpunksamurai.github.io/vsix-downloader-webui/

@rattlecattle
Copy link

@CypherpunkSamurai Works on Chrome but not on Firefox (CORS error).

@CypherpunkSamurai
Copy link

cant fix cors without a cors proxy tho :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment