{"id":15489331,"url":"https://github.com/spagettikod/vsix","last_synced_at":"2026-01-16T07:42:24.106Z","repository":{"id":42241498,"uuid":"315438853","full_name":"spagettikod/vsix","owner":"spagettikod","description":"Visual Studio Code Extension Marketplace CLI","archived":false,"fork":false,"pushed_at":"2025-02-20T19:19:05.000Z","size":4922,"stargazers_count":2,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-03T15:52:22.273Z","etag":null,"topics":["cli","golang","visual-studio-code","vscode","vscode-extension"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spagettikod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-23T20:56:41.000Z","updated_at":"2025-02-20T19:17:36.000Z","dependencies_parsed_at":"2024-11-15T18:32:41.192Z","dependency_job_id":"20e0996f-5348-407f-89dc-31ff4f0f595a","html_url":"https://github.com/spagettikod/vsix","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/spagettikod/vsix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spagettikod%2Fvsix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spagettikod%2Fvsix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spagettikod%2Fvsix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spagettikod%2Fvsix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spagettikod","download_url":"https://codeload.github.com/spagettikod/vsix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spagettikod%2Fvsix/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266499016,"owners_count":23938772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","golang","visual-studio-code","vscode","vscode-extension"],"created_at":"2024-10-02T07:05:04.165Z","updated_at":"2026-01-16T07:42:24.096Z","avatar_url":"https://github.com/spagettikod.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vsix\nHost your private [Marketplace](https://marketplace.visualstudio.com/) by downloading and serving extensions to Visual Studio Code in your own environment.\n\n## Installation\nvsix is distributed as a container image.\n\n```docker\ndocker run --rm -it spagettikod/vsix info\n```\n\nYou can bind mount folders to `/data` and `/cache` to save information between restarts.\n\n```docker\ndocker run --rm -it \\\n      -v $(pwd)/data:/data \\\n\t  -v $(pwd)/cache:/cache \\\n      spagettikod/vsix update\n```\n\n\u003e [!TIP]\n\u003e Create a `.dockerfunc` shell script and run it when you open a terminal to mimic a local installation of vsix.\n\u003e ```bash\n\u003e #!/bin/bash\n\u003e vsix() {\n\u003e     docker run --rm -it \\\n\u003e         -v \u003cyour volume\u003e:/data \\\n\u003e         -v \u003cyou cache location\u003e:/cache \\\n\u003e         spagettikod/vsix:5.0.0 \"$@\"\n\u003e }\n\u003e```\n\u003e You can then run `$ vsix` at the prompt as it was installed as a regular application.\n\n## Getting Started\nStart by looking for some extensions you might be interested in. The query is the same as the search box in Visual Studio Code.\n\n```\nvsix search golang\n```\n\nLet's say we would like to add the Go extension from the Go Team at Google to our marketplace. We do this by finding the unique identifier and the `add` command.\n\n```\nvsix add golang.Go\n```\n\n\u003e [!TIP]\n\u003e You can add multiple extensions at once, `vsix add golang.Go ms-python.python`. Or combine commands like `vsix add $(vsix search --sort install --limit 10 --quiet)`, the example will att the 10 most installed extensions.\n\nWhen our extensions are added to our marketplace we can run `list` to see what we have.\n\n```\nvsix list\n```\n\n\u003e [!TIP]\n\u003e By default only the latest version is showed, regardless of platform, to list all, non pre-relase version across all platforms run `vsix info --all`. To get a complete list also add `--pre-release` to also include any versions that are marked as pre-release.\n\nNow that we have a local copy of an extension we can start our own marketplace.\n\n```\nvsix serve\n```\n\nIf you don't see any errors you now have your own marketplace running at `http://localhost:8080`. To try it out and see if it responds as the official marketplace we can use the search command and point it at our own server.\n\n```\nvsix search --endpoint http://localhost:8080\n```\n\nYou should see a list of all the extension you added, just like you would have search the official marketplace.\n\nFrom time to time you will want to update your local extensions. To see and download updates to your local marketplace run the update command.\n\n```\nvsix update\n```\n\nRead below to further to customize your setup and how to use Visual Studio Code with your server.\n\n## Use your own marketplace from Visual Studio Code\nThere are two ways you can make use of vsix as your local marketplace.\n\n1. Edit your local Visual Studio Code configuration. The downside of this option each update will required you to make the changes again.\n1. Spoof `marketplace.visualstudio.com` in your local network.\n\n### Edit your local Visual Studio Code configuration\nTo make ou can modify `product.json` in your Visual Studio Code installation. The former has the benefit of not having to modify your local Visual Studio Code installation while the latter one needs to be reapplied after each update of Visual Studio Code.\n\n1. Open `product.json`. On macOS (if Visual Studio Code is installed in the Applications folder) this file is located at `/Applications/Visual Studio Code.app/Contents/Resources/app/product.json`.\n1. Find the `extensionGallery` block and edit the `serviceUrl` to point to your server. For example, using the example above `https://vsix.myserver.com:8443/_apis/public/gallery`:\n      ```json\n      ...\n      \"extensionsGallery\": {\n\t\t\"serviceUrl\": \"https://marketplace.visualstudio.com/_apis/public/gallery\",\n\t},\n      ...\n      ```\n1. Restart Visual Studio Code and start using extensions from your own marketplace.\n\n### Spoofing the official marketplace\nSpoofing the official marketplace gives each client seamless access to your marketplace and does not require modifying settings after each update of Visual Studio Code.\n\nThis option can be done in two ways, both require you to distribute and add trust to a local CA that can issue a local certificate for `marketplace.visualstudio.com`.\n\nYou can then either:\n1. modify your local DNS to point `marketplace.visualstudio.com` at your local vsix server or\n1. each client can add your server to their local `hosts` file.\n\nThe latter one is easier if you want each client to have the option of switching between the real marketplace and the local one.\n\n## Configure vsix\nTo configure vsix you use environment variables. These can be set at each execution or added to a `.env` file vsix can read at startup. Run `vsix info` to see where environment files will be read from and to see what settings has been applied.\n\n|Name|Description|\n|---|---|\n|**VSIX_BACKEND**|Backend to use when storing extensions. Valid options are `fs` (default) or `s3`.|\n|**VSIX_CACHE_FILE**|Folder where the extension cache files (SQLite database) is stored. When not running in a container it defaults to a location in the user's home folder depending on your platform.|\n|**VSIX_FS_DIR**|Folder where extensions are stored when stored on the file system, `VSIX_BACKEND` is set to `fs`. When not running in a container it defaults to a location in the user's home folder depending on your platform.|\n|**VSIX_LOG_DEBUG**|Output debug information when running vsix. Valid values are  `true` or `false`. Default is `false`.|\n|**VSIX_LOG_VERBOSE**|Output logs and suppress other forms of output like progress bars when running vsix. Valid values are  `true` or `false`. Default is `false`.|\n|**VSIX_PLATFORMS**|Limit which platforms to download when running the add-command. This is a space separated list of values within square brackets. For example *[universal linux-x64 win32-x64]*. Only the specified platforms will be downloaded. Default is a empty list and all platforms will be downloaded.|\n|**VSIX_S3_BUCKET**|S3 bucket where extensions will be stored when `VSIX_BACKEND` is set to `s3`. Default value is empty, value is required when using S3.|\n|**VSIX_S3_CREDENTIALS**|Location of the credentials file used when `VSIX_BACKEND` is set to `s3`. The expected format is the same used by AWS. Default value is empty, value is required when using S3.|\n|**VSIX_S3_PREFIX**|Prefix to be added when using S3 as backend. If not set files will be stored at bucket root. Default value is empty.|\n|**VSIX_S3_PROFILE**|Name of the profile to use in the credentials file (see `VSIX_S3_CREDENTIALS`) when using S3 as backend. Default value is `default`.|\n|**VSIX_S3_URL**|URL to the S3 server when using S3 as backend. Default value is `http://localhost:9000`.|\n|**VSIX_SERVE_ADDR**|Address where the serve-command will listen for connections. Default value is `0.0.0.0:8080`.|\n|**VSIX_SERVE_REINDEX_INTERVAL**|When serving reindexing is run periodically to keep the cache up to date. This value controls how often to run. Value is defined as time.Duration in Go, for example 45m. Default is every 30 minutes (30m).|\n|**VSIX_SERVE_URL**|URL to the vsix server. This value is used when rewriting extension URL's so Visual Studio Code finds its way back to your marketplace when installing extensions. When [spoofing](#spoofing-the-official-marketplace) the official marketplace this should be set to `https://marketplace.visualstudio.com`. Default value is `http://localhost:8080`.|\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspagettikod%2Fvsix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspagettikod%2Fvsix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspagettikod%2Fvsix/lists"}