# Create Canvas Extension

Create or register a canvas extension in the awesome-copilot repository.

- Repository: https://github.com/github/awesome-copilot (40669 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add github/awesome-copilot --skill create-canvas-extension -g -a claude-code -y`
Codex: `npx skills add github/awesome-copilot --skill create-canvas-extension -g -a codex -y`
Cursor: `npx skills add github/awesome-copilot --skill create-canvas-extension -g -a cursor -y`
Gemini CLI: `npx skills add github/awesome-copilot --skill create-canvas-extension -g -a gemini-cli -y`

## Description

Create or register a canvas extension in the awesome-copilot repository. Use when asked to scaffold a new canvas extension, create its plugin.json, add a reusable extension to one or more plugins, or migrate extension metadata. Extensions are reusable source under extensions/; shippable plugin manifests belong under plugins/.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Create a canvas extension

Use this skill only for the `github/awesome-copilot` repository. Canvas extensions are reusable source components. They do not have a `plugin.json` under `extensions/`.

## Required decisions

Before creating files, ask for each missing value:

1. **Extension ID**: lowercase kebab-case, matching the source folder and plugin name.
2. **Display metadata**:
   - description
   - version (default `1.0.0`)
   - author name and optional URL
   - keywords (lowercase, hyphenated, maximum 10)
   - repository and license (default to the repository URL and `MIT` when appropriate)
3. **Canvas entrypoint**: confirm whether the extension already has `extension.mjs`. If not, create a minimal entrypoint only when the user provides enough implementation details; otherwise create the directory and leave an explicit TODO.
4. **Preview image**: obtain an existing `assets/preview.png` path or ask the user to add it. Do not invent a binary image or silently use a misleading placeholder.
5. **Plugin registration**:
   - For a standalone installable canvas plugin, create `plugins/<extension-id>`.
   - For an extension that belongs to an existing plugin, ask for the parent plugin ID and add `./extensions/<extension-id>` to that plugin's `extensions.com.github.awesome-copilot.extensions`.
   - If the extension should be shipped by multiple plugins, collect all plugin IDs and add the same extension ID to each mapping file.

## Files to create

For a new extension plugin, create this structure:

```text
extensions/<extension-id>/
├── extension.mjs
└── assets/
    └── preview.png

plugins/<extension-id>/
├── plugin.json
└── README.md
```

The extension source may contain additional files such as `package.json`, canvas assets, or supporting modules. Keep all reusable implementation files under `extensions/<extension-id>/`.

Create `plugins/<extension-id>/plugin.json` with this shape:

The rest: https://github.com/github/awesome-copilot/blob/HEAD/.github/skills/create-canvas-extension/SKILL.md
