Skip to content

Publishing Extensions

JK edited this page Oct 28, 2024 · 2 revisions

How to Publish an Extension

This guide describes publishing to the public registry at open-vsx.org, which is managed by the Eclipse Foundation.

Similar steps may apply to registries that are hosted elsewhere, but make sure to pass the correct URL to the ovsx tool.

If you are the author of the extension you wish to publish, proceed with the steps below. If you are not the author, we suggest you first reach out to the author with an issue in their GitHub repo to request that they publish their extension to open-vsx.org. We've drafted a template with suggested content for the issue.

If the extension is open source or otherwise permits redistribution, you can request that it be auto-published as it is updated at the Visual Studio Marketplace.

Getting Started

1. Create an Eclipse account

An eclipse.org account is necessary to sign a Publisher Agreement with the Eclipse Foundation. Use this form to register. It is important to fill in the GitHub Username field and to use exactly the same GitHub account as when you log in to open-vsx.org.

2. Log in and sign the Publisher Agreement

Log in to open-vsx.org: click on the account icon on the top right corner, then authorize the application with your GitHub account.

Navigate to the open-vsx.org Profile page (click on your avatar → Settings). Click on Log in with Eclipse and then authorize the application to access your eclipse.org account.

If the Eclipse login process is successful, you will see a button labeled Show Publisher Agreement on your open-vsx.org profile page. Click that button, read the agreement text to the bottom and click Agree if you consent to publishing under these terms.

Note that the "Eclipse Contributor Agreement" (ECA) is a different agreement used to contribute code to Eclipse open-source projects.

3. Package

Package your extension using the vsce command. This will result in a .vsix file. Using other methods to compress and package files to produce a .vsix file is unreliable and is not supported.

4. Upload

Once you have a .vsix file, you use the 'Publish' link in the upper right and then 'Publish Extension' to select or drag and drop the .vsix file.

5. See the result

Immediately after publishing, your extension will appear on your settings in a 'Deactivated' state. In this state it will also not be visible on the main page.

This is because processing of extensions is done asynchronously. Once processing of your extension completes and assuming no errors, it will show as active. Normally this takes 5 ot 10 seconds. It can take longer if your extension is large, has a lot of files, and/or the server is busy.

Publishing with the ovsx Command

Alternately, you can do this in one step using the ovsx command.

1. Create an access token

Navigate to the open-vsx.org Access Tokens page (click on your avatar → SettingsAccess Tokens).

Click Generate New Token and enter a description. We recommend to generate a new token for each environment where you want to publish, e.g. a local machine, cloud IDE, or CI build. The description will help you to identify a token in case you want to revoke it (you don't need it anymore or you suspect it has been stolen).

Click Generate Token and copy the generated value to a safe place, e.g. an encrypted file or the secret variables of your cloud IDE / CI settings. Note that the value is never displayed again after you close the dialog! In case you lose a token, delete it and generate a new one.

An access token can be used to publish as many extensions as you like, until it is deleted.

2. Create the namespace

The publisher field in your extension's package.json file defines the namespace in which the extension will be made available. You need to create the namespace in the registry before any extension can be published to it. This is done with the ovsx CLI tool. The easiest way to use it is through npx, which makes sure you always use the latest version of the tool. Alternatively, install it globally with npm i -g ovsx.

Run the following command, replacing <name> with the value of your extension's publisher and replacing <token> with the previously generated access token value.

npx ovsx create-namespace <name> -p <token>

Creating a namespace does not automatically assign you as verified owner. If you want the published extensions to be marked as verified, you can claim ownership of the namespace.

3. Package and upload

The publishing process involves the two steps package and upload. Both can be done with the same ovsx CLI tool that is used to create a namespace.

If you have an already packaged .vsix file, you can publish it by simply running the following command, replacing <file> with the path to your extension package and replacing <token> with the previously generated access token value.

npx ovsx publish <file> -p <token>

In order to build and publish an extension from source, first make sure to prepare the project accordingly, typically by running npm install or yarn. Then run the following command in the root directory of the extension.

npx ovsx publish -p <token>

The ovsx tool uses vsce internally to package extensions, which runs the vscode:prepublish script defined in the package.json as part of that process. If the extension uses Yarn to run scripts, add the argument --yarn.

GitHub Action

You can find a GitHub action that allows publishing to Open VSX at HaaLeo/publish-vscode-extension.