Extensions

Writing an extension

An extension is a small JSON manifest with two responsibilities: detect a project type and describe where its commands come from.

Shape

{
  "id": "deno",
  "name": "Deno",
  "detectors": [
    { "files": ["deno.json", "deno.jsonc"] }
  ],
  "commandSources": [
    { "type": "static", "commands": [
      { "key": "dev", "label": "dev", "command": "deno task dev", "kind": "dev" },
      { "key": "test", "label": "test", "command": "deno test", "kind": "test" }
    ]}
  ]
}

Detectors

A folder matches when one of the detectors matches — typically by the presence of specific files (exact filenames). That’s how package.json → Node, composer.json → PHP, deno.json → Deno, and so on.

Command sources

Two providers:

The authoritative JSON Schema and a contributing guide live in the extensions repo — validate your manifest against schema.json before publishing.

Test it

Host the manifest anywhere (a raw file URL works) and install it from a URL to try it locally before submitting it to the registry.