cook.md

Publishing

Publish your plugin to plugins.cook.md and anyone can install it from Cook Editor's Extensions view. The marketplace speaks the Open VSX protocol, so the usual vsce and ovsx tools work.

One-time setup

  1. Sign in at plugins.cook.md with GitHub and create a personal access token (PAT) in your dashboard.
  2. Create the namespace matching the publisher in your package.json (once per namespace). For the example plugins, whose publisher is cooklang:
    npx ovsx create-namespace cooklang -r https://plugins.cook.md -p <PAT>
    Use your own publisher name in place of cooklang.

Package

The example plugins define two scripts in package.json (with @vscode/vsce and ovsx as dev dependencies):

"package": "vsce package --no-dependencies",
"publish:marketplace": "ovsx publish --packagePath meal-journal-$npm_package_version.vsix -r https://plugins.cook.md"

To build a new version:

cd meal-journal
npm version patch        # or minor/major — updates package.json
npm run package          # builds meal-journal-<version>.vsix

Install the .vsix from the Extensions view to test the exact file you're about to publish.

Publish

OVSX_PAT=<PAT> npm run publish:marketplace

Verify with curl https://plugins.cook.md/api/cooklang/meal-journal (your namespace and plugin name in place of cooklang/meal-journal). The new version then shows up in the Extensions view.

Gotchas

  • @types/vscode newer than engines.vscode: vsce refuses to package. Pin it with a tilde to the same minor, e.g. "@types/vscode": "~1.100.0" with "engines": { "vscode": "^1.100.0" }.
  • Missing files in the package: check .vscodeignore — compiled output (out/) and any media your manifest points to must be included; sources and tests can be left out.
  • Depending on the Cooklang API: check cooklang.api.version on activation and tell the user to update Cook Editor if it's missing — older editors don't have it.