For developers

Publish an extension

Ship your own tools to the IVYX marketplace: build, package, publish.

1. Anatomy of an extension

An extension is a package with a .punica/config.yaml manifest and a built dist/index.js entry point. A minimal manifest:

name: extension-hello
displayName: Hello
description: A tiny example extension for IVYX Studio
version: 1.0.0
main: dist/index.js
categories: [tools]
tags: [example]
engines:
  punica: "^1.0.0"
marketplace:
  publisher: your-name

2. Build

Compile your source to dist/index.js (the sample extensions use Rollup):

npm install
npm run build

3. What gets packaged

Publishing zips a fixed set from your extension folder, with no package.json globs:

  • .punica/, the manifest (required)
  • dist/, the built code (required: dist/index.js)
  • assets/, examples/, optional (icon/banner/screenshots)
  • README.md, CHANGELOG.md, optional (shown in the marketplace)

4. Publish

Recommended: GitHub Actions. Add a publish.yml workflow and the REGISTRY_URL / REGISTRY_TOKEN secrets to your repo; it builds and publishes on a v* tag or a manual run.

Or from the CLI:

REGISTRY_URL=https://your-registry \
REGISTRY_TOKEN=your-token \
node cli/publish-extension.mjs ./extension-hello --build

The registry verifies the package, extracts the icon/README, and lists it in the marketplace.

5. Versioning

Published versions are immutable. Re-publishing the same version returns 409. Bump version in .punica/config.yaml to ship an update; the marketplace always serves the newest compatible version for the running editor.