vsix-updater
v1.0.1
Published
A library for updating VSCode extensions.
Readme
vsix-updater
A lightweight library for implementing self-update functionality in VSCode extensions.
Features
- 🔄 Support for silent updates and updates with notifications
- 📦 Automatic VSIX file download and installation
- 🎯 Clean abstract class design, easy to extend
- 🚀 ESM module based, TypeScript supported
Installation
npm install vsix-updater
# or
pnpm add vsix-updater
# or
yarn add vsix-updaterUsage
Basic Usage
Extend the Updater class and implement the getLatestMetaJson method:
import { Updater, type UpdaterMetaJson } from "vsix-updater";
class MyExtensionUpdater extends Updater {
constructor() {
super("my-extension", "publisher-name");
}
async getLatestMetaJson(): Promise<UpdaterMetaJson> {
// Fetch the latest version info from your server
const response = await fetch("https://your-server.com/api/latest");
return response.json();
}
}
// Use in your extension's activate function
export function activate(context: vscode.ExtensionContext) {
const updater = new MyExtensionUpdater();
// Silent update (runs in background, no notifications)
updater.updateSilently();
// Or update with notifications
// updater.update();
}UpdaterMetaJson Format
Your server should return JSON in the following format:
{
"version": "1.2.3",
"url": "https://your-server.com/releases/my-extension-1.2.3.vsix"
}Advanced Usage
If you need to fully customize the update logic, extend the AbstractUpdater class:
import { AbstractUpdater, type UpdaterMetaJson } from "vsix-updater";
class CustomUpdater extends AbstractUpdater {
constructor() {
super("my-extension", "publisher-name");
}
async getLatestMetaJson(): Promise<UpdaterMetaJson> {
// Custom implementation
}
async getLocalVersion(): Promise<string | null> {
// Custom implementation
}
async getDest(version: string): Promise<string> {
// Custom download path
}
async downloadVsix(url: string, dest: string): Promise<void> {
// Custom download logic
}
async install(path: string): Promise<void> {
// Custom installation logic
}
async updateSilently(): Promise<void> {
// Custom silent update logic
}
async update(): Promise<void> {
// Custom update logic
}
}API
Updater
| Method | Description |
| ------------------------- | ----------------------------------------------------- |
| getLatestMetaJson() | Get the latest version metadata (must be implemented) |
| getLocalVersion() | Get the locally installed extension version |
| getDest(version) | Get the VSIX download destination path |
| downloadVsix(url, dest) | Download the VSIX file |
| install(path) | Install the VSIX file |
| updateSilently() | Silent update (no notification messages) |
| update() | Update extension (shows notification messages) |
Properties
| Property | Type | Description |
| ------------- | -------- | --------------------------------------- |
| name | string | Extension name |
| publisher | string | Publisher name |
| extensionId | string | Extension ID (format: publisher.name) |
Requirements
- Node.js >= 22.13.0
- VSCode >= 1.97.0
License
Author
Conor Zhong [email protected]
