Skip to main content
This page summarizes the public plugin contract used by Jolter, @jolter/jdt, and the Jolter registry.

Plugin request syntax

eslint
eslint@1
@eslint/eslint
@eslint/eslint@1.0.0
If no selector is provided, Jolter uses latest. Scoped names use the selector after the package name, not the scope.

JDT commands

Install the toolkit:
npm install -D @jolter/jdt
Commands:
jdt init
jdt build
jdt build --wasm ./prebuilt.wasm
jdt manifest --version 1.2.3
jdt validate
jdt pack --version 1.2.3
jdt run list-tools
jdt run resolve-tool <tool> <selector> --os linux --arch x64
jdt run validate-installed <tool> <version> <root>
jdt pack writes:
dist/plugin.wasm
dist/plugin.release.json
dist/checksums.txt

Root manifest

Root manifests live at plugin.json in the GitHub repository root.
FieldTypeMeaning
$schemastringOptional, must be https://schemas.jolter.dev/plugin/v1/schema.json when present
schemaVersionintegerMust be 1
namestringCanonical scoped plugin name, for example @example/example
displayNamestringOptional human name
descriptionstringRequired summary
keywordsstring arrayOptional search keywords
homepagestringOptional URL
repository.typestringMust be git
repository.urlstringGitHub HTTPS URL for the selected repository
licensestringLicense identifier or text
readmestringRelative README path
iconstringOptional relative icon path
categoriesstring arrayOptional registry categories
supports.jolterstringSupported Jolter version range
linksobjectOptional named links
provides.toolsobjectTool declarations used by JDT and registry previews
permissionsobjectOptional permission declaration copied into release manifests

Release manifest

Release manifests are generated as dist/plugin.release.json.
FieldTypeMeaning
$schemastringOptional, must be https://schemas.jolter.dev/plugin-release/v1/schema.json when present
schemaVersionintegerMust be 1
namestringCanonical plugin name
versionstringPlugin release version generated by JDT
repository.typestringMust be github
repository.ownerstringGitHub owner
repository.repostringGitHub repository
release.tagstringGitHub tag, usually v<version>
release.commitstringSource commit
jolter.minimumVersionstringMinimum Jolter version
jolter.apiVersionstringPlugin API version
entrypoint.typestringMust be wasm
entrypoint.pathstringWASM asset name
provides.toolsobjectTool definitions and command names
permissionsobjectDeclared plugin permissions
artifacts.wasm.filestringWASM asset name
artifacts.wasm.sha256stringExpected WASM SHA-256
artifacts.wasm.sizeintegerExpected WASM byte length
The release tag must match v<version>. The release must contain plugin.release.json, the WASM file named by the manifest, and checksums.txt.

WIT world

package jolter:plugin;

interface api {
  record platform {
    os: string,
    arch: string
  }

  record tool {
    name: string,
    commands: list<string>
  }

  record tool-release {
    version: string,
    url: string,
    sha256: string,
    archive-format: string,
    strip-components: u32,
    commands: list<string>
  }
}

world jolter-plugin {
  use api.{platform, tool, tool-release};

  export list-tools: func() -> list<tool>;
  export resolve-tool: func(tool: string, selector: string, platform: platform) -> tool-release;
  export validate-installed: func(tool: string, version: string, root: string) -> bool;
}
In TypeScript, the toolkit uses camelCase field names:
archiveFormat: "tar.gz",
stripComponents: 1
The WIT interface uses kebab-case names:
archive-format: string,
strip-components: u32

TypeScript API

export interface Platform {
  os: string;
  arch: string;
}

export interface Tool {
  name: string;
  commands: string[];
  displayName?: string;
  description?: string;
}

export interface ToolRelease {
  version: string;
  url: string;
  sha256: string;
  archiveFormat: "tar.gz" | "zip";
  stripComponents: number;
  commands: string[];
}
resolveTool may return stable versions such as 1.0.0 or prerelease versions such as 1.0.0-rc.1 for the tool release. Plugin release manifests produced by JDT should use normal stable release versions.

Jolter CLI

jolter plugin install <name>[@selector]
jolter plugin list
jolter plugin list --json
jolter plugin update <name>
jolter plugin update --all
jolter plugin uninstall <name> [--force]
Aliases:
jolter plugin add eslint
jolter plugin i eslint
jolter plugin ls
jolter plugin up eslint
jolter plugin remove eslint
jolter plugin rm eslint
Project commands that may install missing declared plugins when approved:
jolter sync --yes
jolter setup-ci --yes

Environment variables

VariablePurpose
JOLTER_REGISTRY_URLOverride the plugin registry API origin
JOLTER_HOMESelect the storage root for plugins and plugin tools
JOLTER_OFFLINEForbid network requests; plugin operations need cached or installed state

Register release action

Use jolterjs/register-release-action@v1 after a GitHub release is published. Inputs:
InputRequiredMeaning
registry-urlYesRegistry API origin, usually https://registry.jolter.dev
plugin-nameYesCanonical plugin name or approved alias
github-tokenYesRepository-scoped GitHub token
versionNoSemantic version override
release-tagNoGitHub release tag override
Outputs:
version
release-tag
registered
The action treats an existing version as an idempotent result and sets registered=false.