一键导入
easyeda-extension-manifest
// Use when creating or reviewing a 嘉立创EDA extension manifest, writing extension.json, configuring headerMenus, or wiring registerFn exports for EasyEDA extensions.
// Use when creating or reviewing a 嘉立创EDA extension manifest, writing extension.json, configuring headerMenus, or wiring registerFn exports for EasyEDA extensions.
Use when packaging, auditing, or preparing a 嘉立创EDA / EasyEDA extension for submission, including extension.json completeness, icon requirements, entry validation, README and CHANGELOG checks, privacy review, and pre-release packaging readiness.
EasyEDA Pro API skill for AI agents. Use when working with EasyEDA Pro EDA software, including PCB design, schematic editing, footprint/symbol management, and project operations. Supports live debugging in EasyEDA and EasyEDA extension development. Provides complete API reference (120+ classes, 62 enums, 70 interfaces), extension-development documentation, and a WebSocket bridge server to execute code in the running EasyEDA Pro client. Trigger on: "嘉立创EDA,启动!", "立创EDA,启动!", "EDA,启动!", "EasyEDA", "PCB", "schematic", "footprint", "EDA", "circuit board", "嘉立创EDA", "原理图", "PCB设计". **IMPORTANT**: 嘉立创EDA's English name is **EasyEDA**. They are the SAME product. Never use other transliterations like "EasyEDA Pro" (unless specifically versioned), "EASYEDA", "easyeda", etc. Always use "EasyEDA" for English references and "嘉立创EDA" for Chinese references.
Use when debugging 嘉立创EDA extensions, using the runtime eda object, testing logic with independent scripts, loading IFrame windows, recovering from broken extensions, or explaining API stability rules.
Use when designing, implementing, or reviewing EasyEDA extensions that involve IFrame windows, cross-context communication, runtime eda access, resource packaging, and API invocation boundaries.
Use when creating a new EasyEDA extension from a proven menu plus registerFn plus IFrame template, especially when you want a copyable host entry, iframe page structure, and direct eda API usage pattern inspired by the generate-silkscreen demo extension.
| name | easyeda-extension-manifest |
| description | Use when creating or reviewing a 嘉立创EDA extension manifest, writing extension.json, configuring headerMenus, or wiring registerFn exports for EasyEDA extensions. |
Create and validate extension.json for 嘉立创EDA / EasyEDA extensions.
extension.jsonheaderMenus, menuItems, or registerFnUse default-extension.json in this skill directory as the SDK starter template.
All example names, UUIDs, titles, URLs, and publisher values in the template are placeholders unless the user explicitly wants the SDK sample values.
Key rules:
| Field | Rule |
|---|---|
name | a-z, 0-9, - only, length 5-30 |
uuid | 32 chars, lowercase letters and digits only |
version | Semantic version, major.minor.patch |
categories | Schematic Symbol PCB Footprint Panel Library Project Other |
entry | Keep SDK default unless there is a strong reason to change it |
Common field reminders:
displayName: human-readable store namekeywords: short discovery terms for the extension storeactivationEvents: upstream feature area, still marked in-progress in current docsdependentExtensions: accepts store UUIDs or custom extension namesheaderMenus Quick ReferenceSupported page keys in current docs:
{
"headerMenus": {
"home": [],
"blank": [],
"schematic": [],
"symbol": [],
"pcb": [],
"footprint": [],
"pcbView": [],
"panel": [],
"panelView": []
}
}
Important constraints:
headerMenus[].id must be uniquemenuItems and registerFn are mutually exclusive at the same levelschematic; sch is deprecatedNode shapes:
| Node type | Required fields | Use for |
|---|---|---|
| Menu group | id, title, menuItems | Parent node that opens a submenu |
| Action item | id, title, registerFn | Clickable leaf that calls extension code |
If a node has children, it should behave like a folder. If it triggers code, it should behave like a button. Do not try to make one node be both.
Answer conservatively when the docs are silent:
registerFn MappingregisterFn must point to an exported ES module function from the extension code.
Resolution rules:
entryregisterFn unless you have verified it in your runtimeExample:
{
"id": "About",
"title": "About...",
"registerFn": "about"
}
export function about() {
// implementation lives in the extension entry bundle
}
Minimal pairable example:
{
"name": "demo-extension",
"uuid": "0123456789abcdef0123456789abcdef",
"displayName": "Demo Extension",
"description": "Minimal example for header menu wiring",
"version": "1.0.0",
"publisher": "Example <dev@example.com>",
"engines": { "eda": "^2.3.0" },
"license": "Apache-2.0",
"categories": "Other",
"keywords": ["demo"],
"images": { "logo": "./images/logo.png" },
"homepage": "https://example.com",
"bugs": "https://example.com/issues",
"activationEvents": {},
"entry": "./dist/index",
"dependentExtensions": {},
"headerMenus": {
"home": [
{
"id": "Demo",
"title": "Demo",
"menuItems": [
{
"id": "About",
"title": "About...",
"registerFn": "about"
}
]
}
]
}
}
export function about() {
return true;
}
Think of extension.json as the restaurant menu, and registerFn as the kitchen ticket. The menu shows what can be clicked; the exported function is what actually gets cooked when the user clicks it.
When a user asks how to configure extension.json, answer in this order:
headerMenus as menu structureregisterFn as the exact exported function name from the entry bundleschematic over deprecated schengines.eda: declares the supported 嘉立创EDA version rangerepository: source hosting metadata; some values are still marked as in-progress upstreamdependentExtensions: accepts store UUIDs or custom extension namesimages.logo: use square PNG/JPEG; larger source assets are safer for store displaybugs: must be a valid URICheck these first when a menu item does not appear or does nothing:
schregisterFn name does not match the exported symbol exactlyentry bundle does not actually export the target functionmenuItems and registerFnid values causing collisionssch in new manifests instead of schematicmenuItems and registerFn on one menu noderegisterFn as a global function name instead of an exported symbolentry away from the SDK default without a real packaging reasonuuid is not a dashed UUID format hereeasyeda-api for API class and method lookupeasyeda-extension-debugging for eda runtime, debug mode, independent scripts, IFrame, and recovery flow