@any-listen/extension-kit
v0.1.8
Published
English | [简体中文](docs/README.zh-CN.md)
Maintainers
Readme
Any Listen Extension Kit
English | 简体中文
Any Listen extension kit for developing Any Listen extensions. It provides build tooling, type definitions, and shared configs to package extensions as .alix bundles.
Features
- Extension host API types
- Extension build and packaging (
.alix) - ESLint config preset
- TypeScript config presets
Install
pnpm add -D @any-listen/extension-kitQuick Start
- Project layout (example)
your-extension/
src/
index.ts
resources/
i18n/
config.ts
.env
publish/
changeLog.md- Create
config.ts
import type { ExtensionConfig } from '@any-listen/extension-kit/config'
const config: ExtensionConfig = {
id: 'my_extension',
name: 'My Extension',
version: '1.0.0',
description: 'Example extension',
author: 'Your Name',
homepage: 'https://example.com',
license: 'MIT',
target_engine: '1.0.0',
categories: ['music'],
tags: ['example'],
grant: ['internet'],
contributes: {
resource: [
{
id: 'example',
name: 'Example Source',
resource: ['musicSearch', 'musicUrl'],
},
],
},
download_url_template: 'https://example.com/downloads/{version}',
buildConfig: {
srcDir: 'src',
distDir: 'dist',
outputDir: 'build',
i18nDir: 'i18n',
resourcesDir: 'resources',
isIsolateMode: false,
mainEntry: 'src/index.ts',
},
}
export default config- Add
.envfor signing
PRI_KEY=<base64-or-pem-single-line>
PUB_KEY=<base64-or-pem-single-line>- Build
npx @any-listen/extension-kit --buildThe build produces:
dist/main.jsdist/manifest.jsondist/resources/*dist/i18n/*build/<id>_v<version>.alix
Publish Metadata
npx @any-listen/extension-kit --publishThis updates publish/version.json using publish/changeLog.md and download_url_template. It prevents publishing the same version twice.
Build Config
buildConfig in config.ts:
srcDir: Source directory (defaultsrc)distDir: Build output directory (defaultdist)outputDir: Package output directory (defaultbuild)i18nDir: i18n assets directory (defaulti18n)resourcesDir: Resource assets directory (defaultresources)isIsolateMode: Enable isolate preload build (defaultfalse)mainEntry: Main entry file (defaultsrc/index.ts)isolatePreloadEntry: Isolate preload entry (defaultsrc/isolate-preload/index.ts)
Manifest Fields
The extension manifest is derived from config.ts. Key fields:
id,name,versiondescription,icon,author,homepage,licensetarget_engine,categories,tags,grantcontributes.resource,contributes.listProviders,contributes.settings,contributes.commandsdownload_url_template
Isolate Mode
When isIsolateMode is enabled, the build also outputs resources/isolate-preload.js from isolatePreloadEntry. Use grant: ['isolate_context'] if your extension needs isolate context.
TypeScript and ESLint
Use built-in presets:
{
"extends": ["@any-listen/extension-kit/tsconfig.app.json"]
}import config from '@any-listen/extension-kit/eslint.config.js'
export default configLicense
Apache License 2.0
