{"id":21853111,"url":"https://github.com/madskristensen/privategallerycreator","last_synced_at":"2026-02-07T21:07:33.581Z","repository":{"id":51237159,"uuid":"113505713","full_name":"madskristensen/PrivateGalleryCreator","owner":"madskristensen","description":"Create private extension galleries for Visual Studio","archived":false,"fork":false,"pushed_at":"2024-10-31T16:47:33.000Z","size":93,"stargazers_count":122,"open_issues_count":13,"forks_count":42,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-28T15:11:18.699Z","etag":null,"topics":["atom-feed","gallery","marketplace","visual-studio","vsix"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/madskristensen.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},"funding":{"github":"madskristensen"}},"created_at":"2017-12-07T22:38:46.000Z","updated_at":"2025-03-21T02:11:28.000Z","dependencies_parsed_at":"2023-10-14T16:29:36.665Z","dependency_job_id":"45509613-a9d1-4e97-bbe5-1dc48e672d91","html_url":"https://github.com/madskristensen/PrivateGalleryCreator","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madskristensen%2FPrivateGalleryCreator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madskristensen%2FPrivateGalleryCreator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madskristensen%2FPrivateGalleryCreator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madskristensen%2FPrivateGalleryCreator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/madskristensen","download_url":"https://codeload.github.com/madskristensen/PrivateGalleryCreator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247208190,"owners_count":20901570,"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","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":["atom-feed","gallery","marketplace","visual-studio","vsix"],"created_at":"2024-11-28T01:20:18.833Z","updated_at":"2026-02-07T21:07:33.576Z","avatar_url":"https://github.com/madskristensen.png","language":"C#","funding_links":["https://github.com/sponsors/madskristensen"],"categories":[],"sub_categories":[],"readme":"# Private Gallery Creator\n\n[![CI](https://github.com/madskristensen/PrivateGalleryCreator/actions/workflows/ci.yml/badge.svg)](https://github.com/madskristensen/PrivateGalleryCreator/actions/workflows/ci.yml)\n\nA command-line tool that generates a private extension gallery for Visual Studio from a folder of `.vsix` files.\n\n[Download the latest release](https://github.com/madskristensen/PrivateGalleryCreator/releases)\n\n## Why use this?\n\nThe Visual Studio Marketplace is great for public extensions, but sometimes you need to distribute extensions that should not be publicly listed. Common scenarios include:\n\n- **Internal tooling.** Your team builds VS extensions for internal use (code generators, project templates, custom analyzers) and needs a central place to install and update them.\n- **Pre-release testing.** You want to distribute beta builds of an extension to a test group before publishing to the Marketplace.\n- **Offline or restricted environments.** Your development machines cannot reach the public Marketplace, but can access a shared network folder or internal web server.\n\nVisual Studio has built-in support for [private extension galleries](https://learn.microsoft.com/en-us/visualstudio/extensibility/private-galleries), but you need to provide a valid ATOM feed that describes the available extensions. This tool generates that feed automatically by reading the metadata from your `.vsix` files.\n\n## Getting started\n\n### 1. Set up a folder with your extensions\n\nCreate a folder and place the `.vsix` files you want to distribute inside it. Then add `PrivateGalleryCreator.exe` to the same folder.\n\n![Filesystem](art/filesystem.png)\n\n### 2. Generate the feed\n\nDouble-click `PrivateGalleryCreator.exe` (or run it from the command line). It will:\n\n1. Parse each `.vsix` file for metadata (name, version, author, description, etc.)\n2. Extract extension icons into a hidden `icons` folder\n3. Generate a `feed.xml` file in the same directory\n\n![Filesystem After](art/filesytem-after.png)\n\n\u003e **Note:** The `icons` folder is hidden. If you don't see it, that's expected. The feed will still work correctly.\n\n### 3. Register the gallery in Visual Studio\n\nOpen Visual Studio and go to **Tools \u003e Options \u003e Environment \u003e Extensions**. Add a new gallery with the absolute path to the `feed.xml` file. This can be a local path or a network share.\n\n```\n\\\\mycompany\\extensions\\feed.xml\n```\n\n![Options](art/options.png)\n\nThe private gallery will now appear under the **Online** tab in the Extensions dialog (**Extensions \u003e Manage Extensions**).\n\n![Extensions dialog](art/extension-dialog.png)\n\n### 4. Keep it updated\n\nRun `PrivateGalleryCreator.exe` again whenever you add, remove, or update a `.vsix` file. Or use the `--watch` option to regenerate the feed automatically on changes (see below).\n\n## Command-line options\n\nAll options can be combined. For example:\n\n```cmd\nPrivateGalleryCreator.exe --input=C:\\extensions --output=C:\\feed\\feed.xml --name=\"Team Extensions\" --recursive --latest-only --terminate\n```\n\n### `--input`\n\nSets the directory to scan for `.vsix` files. Defaults to the directory containing the exe.\n\n```cmd\nPrivateGalleryCreator.exe --input=C:\\your\\extensions\\folder\n```\n\n### `--output`\n\nSets the output path for the generated feed file. Defaults to `feed.xml` in the input directory.\n\n```cmd\nPrivateGalleryCreator.exe --output=C:\\your\\path\\feed.xml\n```\n\n### `--name`\n\nSets a custom gallery name. Defaults to `\"VSIX Gallery\"`.\n\n```cmd\nPrivateGalleryCreator.exe --name=\"My Team Gallery\"\n```\n\n### `--recursive`\n\nScans subdirectories for `.vsix` files in addition to the input directory.\n\n```cmd\nPrivateGalleryCreator.exe --recursive\n```\n\n### `--latest-only`\n\nWhen multiple versions of the same extension are found, only the latest version is included in the feed. Useful when your folder retains previous versions.\n\n```cmd\nPrivateGalleryCreator.exe --latest-only\n```\n\n### `--exclude`\n\nSkips any `.vsix` files whose full path contains the specified text.\n\n```cmd\nPrivateGalleryCreator.exe --exclude=experimental\n```\n\n### `--source`\n\nOverrides the download URL used in the feed. By default, the feed references extensions relative to the feed file location. Use this option when the `.vsix` files will be served from a different location than where you run the tool.\n\n```cmd\nPrivateGalleryCreator.exe --source=https://myserver.com/extensions/\nPrivateGalleryCreator.exe --source=\\\\mycompany\\shared\\extensions\\\n```\n\n### `--watch` (`-w`)\n\nWatches the input directory for changes to `.vsix` files and regenerates the feed automatically. The process runs continuously until you close the console or press `Ctrl+C`.\n\n```cmd\nPrivateGalleryCreator.exe --watch\n```\n\n### `--terminate` (`-t`)\n\nExits immediately after generating the feed. Without this option, the tool waits for a keypress before closing. Useful for scripts and CI pipelines.\n\n```cmd\nPrivateGalleryCreator.exe --terminate\n```\n\n### `--version`\n\nSets the target Visual Studio version for the feed. Defaults to `17.0`. This affects how extension pack IDs are serialized in the feed. Valid values are `11.0` through `17.x`.\n\n```cmd\nPrivateGalleryCreator.exe --version=16.0\n```\n\n## Tips\n\n- Visual Studio auto-updates extensions from private galleries, just like it does for Marketplace extensions.\n- The feed supports extensions targeting Visual Studio 2012 and newer.\n- You can register a private gallery through a VS extension using a `.pkgdef` file. See [this example](https://github.com/madskristensen/VsixGalleryExtension/blob/master/src/feed.pkgdef).\n- For CI/CD pipelines, combine `--input`, `--output`, `--source`, and `--terminate` to generate the feed as a build step.\n\n## License\n\n[Apache 2.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadskristensen%2Fprivategallerycreator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmadskristensen%2Fprivategallerycreator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadskristensen%2Fprivategallerycreator/lists"}