EasyEDA API Skill
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.
Rank
62
Safety
84
Downloads
12k
Updated
Oct 9, 2026
Version
1.1.24
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 11.9K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 11.9K downloadsadoption · observed Oct 9, 2026
- Latest release
- 1.1.24release · observed Sep 10, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s1742kvk50chxzh6t6hetdf9y983h56r:easyeda-api- Install using `clawhub skill install s1742kvk50chxzh6t6hetdf9y983h56r:easyeda-api` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/yanranxiaoxi/easyeda-api before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/snapshot"
Documentation
CLAWHUB
160,000 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
README.md
[English](#) | [简体中文](./README.zh-Hans.md)
# EasyEDA API Skill
An EasyEDA Pro API skill package for AI coding tools such as Claude Code, OpenCode, QwenCode, and any other tool that supports the [Agent Skills](https://agentskills.io/) standard.
This skill supports both online debugging of EasyEDA Pro through AI and extension development for EasyEDA Pro.
When developing EasyEDA extensions, AI can use the extension-development documentation, API references, type information, usage examples, and bridge debugging capabilities provided by this skill to help with API lookup, code generation, and integration debugging.
If you want to analyze or modify EasyEDA document source files directly instead of operating through the API, this project also provides documentation for the source file formats.
- 📚 **Structured API documentation** — Automatically builds hierarchical indexes from reference docs for fast AI lookup
- 🧾 **Document source format specifications** — Explains project, schematic, and PCB source formats for direct source analysis and modification
- 🔌 **WebSocket Bridge** — A Node.js server that bridges AI tools and the EasyEDA client
- 🤖 **SKILL.md** — A complete skill instruction file
## Quick Start
### 1. Install dependencies
```bash
npm install
```
### 2. Build API documentation
```bash
npm run build:docs
```
This reads the raw API documentation from the `reference/` directory and generates structured docs into the `docs/` directory.
### 3. Start the WebSocket Bridge server
```bash
npm run server
```
The server automatically chooses an available port in the `49620-49629` range and waits for the EasyEDA client to connect.
### 4. Connect from EasyEDA
Install the `run-api-gateway.eext` extension in EasyEDA. Download:
- https://jlcext.com/item/oshwhub-official/run-api-gateway
After the extension is loaded, it connects to the Bridge server automatically by scanning the port range and verifying the handshake.
### 5. Use from an AI coding tool
AI coding tools such as Claude Code, OpenCode, and QwenCode automatically read `SKILL.md` for instructions, then use the HTTP API to send code to EasyEDA:
```bash
# Check EasyEDA connection status (assuming the service is on port 49620)
curl http://localhost:49620/health
# Execute EasyEDA code
curl -X POST http://localhost:49620/execute \
-H "Content-Type: application/json" \
-d '{"code": "return await eda.dmt_Project.getCurrentProjectInfo();"}'
```
## One-Command Packaging
```bash
npm run pack
```
This performs the following steps:
1. Build API documentation (`docs/`)
2. Package `SKILL.md`, documentation, and the server into `dist/easyeda-api/`
3. Generate `dist/easyeda-api.zip` for upload
If the documentation has already been built, you can skip that step:
```bash
npm run pack:fast
```
### Publish to ClawHub
```bash
npx clawhub@latest publish dist/easyeda-api/
```
Or upload the zip file at https://clawhub.ai/upload
## Architecture
```
┌──────────────┐ HTTP/WS ┌────references/_index.md
# EasyEDA Pro API 文档索引 > 此文档由构建脚本自动生成,供 AI 编程工具使用。 > 全局变量 `eda` 是 EDA 类的实例,所有 API 通过 `eda.xxx` 调用。 ## 快速导航 - [classes/](classes/) - 类文档(包含全部方法和属性) - [enums/](enums/) - 枚举文档 - [interfaces/](interfaces/) - 接口文档(包含全部属性) - [types/](types/) - 类型别名文档 ## API 访问方式 所有 API 通过全局变量 `eda` 访问,例如: - `eda.dmt_Board.createBoard()` — 文档树 / 板子管理 - `eda.pcb_PrimitiveLine.create()` — PCB 直线图元创建 - `eda.sys_WebSocket.register()` — WebSocket 连接注册 - `eda.sch_PrimitiveComponent.create()` — 原理图器件创建 --- # 类 (Classes) | 类名 | 描述 | 备注 | |------|------|------| | [DMT_Board](classes/DMT_Board.md) | Document tree / Board management class | | | [DMT_EditorControl](classes/DMT_EditorControl.md) | Document tree / Editor control class | | | [DMT_Event](classes/DMT_Event.md) | Document tree / event class | | | [DMT_Folder](classes/DMT_Folder.md) | Document tree / Folder class | | | [DMT_Panel](classes/DMT_Panel.md) | Document tree / Panel management class | | | [DMT_Pcb](classes/DMT_Pcb.md) | Document tree / PCB management class | | | [DMT_Project](classes/DMT_Project.md) | Document tree / Project management class | | | [DMT_Schematic](classes/DMT_Schematic.md) | Document tree / Schematic management class | | | [DMT_SelectControl](classes/DMT_SelectControl.md) | Document tree / selection control class | | | [DMT_Team](classes/DMT_Team.md) | Document tree / Team class | | | [DMT_Workspace](classes/DMT_Workspace.md) | Document tree / Workspace class | | | [EDA](classes/EDA.md) | EasyEDA Pro user API interface | | | [IPCB_ComplexPolygon](classes/IPCB_ComplexPolygon.md) | Complex polygon | | | [IPCB_Polygon](classes/IPCB_Polygon.md) | Single polygon | | | [IPCB_PrimitiveArc](classes/IPCB_PrimitiveArc.md) | Arc line primitive | | | [IPCB_PrimitiveAttribute](classes/IPCB_PrimitiveAttribute.md) | Property primitive | | | [IPCB_PrimitiveComponent](classes/IPCB_PrimitiveComponent.md) | Device primitive | | | [IPCB_PrimitiveComponentPad](classes/IPCB_PrimitiveComponentPad.md) | Device pad primitive | | | [IPCB_PrimitiveDimension](classes/IPCB_PrimitiveDimension.md) | Dimension primitive | | | [IPCB_PrimitiveFill](classes/IPCB_PrimitiveFill.md) | Fill primitive | | | [IPCB_PrimitiveImage](classes/IPCB_PrimitiveImage.md) | Image primitive | | | [IPCB_PrimitiveLine](classes/IPCB_PrimitiveLine.md) | Line primitive | | | [IPCB_PrimitiveObject](classes/IPCB_PrimitiveObject.md) | Binary embedded object primitive | | | [IPCB_PrimitivePad](classes/IPCB_PrimitivePad.md) | Pad primitive | | | [IPCB_PrimitivePolyline](classes/IPCB_PrimitivePolyline.md) | Polyline primitive | | | [IPCB_PrimitivePour](classes/IPCB_PrimitivePour.md) | Copper border primitive | | | [IPCB_PrimitivePoured](classes/IPCB_PrimitivePoured.md) | Copper fill primitive | | | [IPCB_PrimitiveRegion](classes/IPCB_PrimitiveRegion.md) | Region primitive | | | [IPCB_PrimitiveString](classes/IPCB_PrimitiveString.md) | Text primitive | | | [IPCB_PrimitiveVia](classes/IPCB_PrimitiveVia.md) | Via primitive |
references/_quick-reference.md
# EasyEDA API 快速参考
> 此文件提供所有类及其方法/属性的签名一览,便于 AI 快速查找。
> 详细参数和返回值请查看 docs/classes/<ClassName>.md
## 全局入口
```typescript
declare const eda: EDA;
```
EDA 类的属性即为各模块的入口,如 `eda.dmt_Board`, `eda.pcb_PrimitiveLine` 等。
---
## DMT_Board
Document tree / Board management class
```typescript
class DMT_Board
```
- **copyboard**: `function copyBoard(sourceBoardName: string): Promise<string | undefined>;`
- **createboard**: `function createBoard(schematicUuid?: string, pcbUuid?: string): Promise<string | undefined>;`
- **deleteboard**: `function deleteBoard(boardName: string): Promise<boolean>;`
- **getallboardsinfo**: `function getAllBoardsInfo(): Promise<Array<IDMT_BoardItem>>;`
- **getboardinfo**: `function getBoardInfo(boardName: string): Promise<IDMT_BoardItem | undefined>;`
- **getcurrentboardinfo**: `function getCurrentBoardInfo(): Promise<IDMT_BoardItem | undefined>;`
- **modifyboardname**: `function modifyBoardName(originalBoardName: string, boardName: string): Promise<boolean>;`
---
## DMT_EditorControl
Document tree / Editor control class
```typescript
class DMT_EditorControl
```
- **activatedocument**: `function activateDocument(tabId: string): Promise<boolean>;`
- **activatesplitscreen**: `function activateSplitScreen(splitScreenId: string): Promise<boolean>;`
- **closedocument**: `function closeDocument(tabId: string): Promise<boolean>;`
- **createsplitscreen**: `function createSplitScreen( splitScreenType: EDMT_EditorSplitScreenDirection, tabId: string, ): Promise<{ sourceSplitScreenId: string; newSplitScreenId: string } | undefined>;`
- **generateindicatormarkers**: `function generateIndicatorMarkers( markers: Array<IDMT_IndicatorMarkerShape>, color?: { r: number; g: number; b: number; alpha: number }, lineWidth?: number, zoom?: boolean, tabId?: string, ): Promise<boolean>;`
- **getcurrentrenderedareaimage**: `function getCurrentRenderedAreaImage(tabId?: string): Promise<Blob | undefined>;`
- **getsplitscreenidbytabid**: `function getSplitScreenIdByTabId(tabId: string): Promise<string | undefined>;`
- **getsplitscreentree**: `function getSplitScreenTree(): Promise<IDMT_EditorSplitScreenItem | undefined>;`
- **gettabsbysplitscreenid**: `function getTabsBySplitScreenId(splitScreenId: string): Promise<Array<IDMT_EditorTabItem>>;`
- **mergealldocumentfromsplitscreen**: `function mergeAllDocumentFromSplitScreen(): Promise<boolean>;`
- **movedocumenttosplitscreen**: `function moveDocumentToSplitScreen(tabId: string, splitScreenId: string): Promise<boolean>;`
- **opendocument**: `function openDocument(documentUuid: string, splitScreenId?: string): Promise<string | undefined>;`
- **openlibrarydocument**: `function openLibraryDocument( libraryUuid: string, libraryType: ELIB_LibraryType.SYMBOL | ELIB_LibraryType.FOOTPRINT, uuid: string, splitScreenId?: string, ): Promise<string | undefined>;`
- **removeindicatormarkers**: `function removeIndicatorMarkers(tabId?: string): Promise<boolean>;`
- **tilealldocumenttosplitscreen**: `functireferences/classes/DMT_Board.md
# DMT\_Board class
Document tree / Board management class
## Signature
```typescript
class DMT_Board
```
## Remarks
Operations related to board management in the currently open project
## Methods
<table><thead><tr><th>
Method
</th><th>
Modifiers
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
[copyBoard(sourceBoardName)](./DMT_Board.md)
</td><td>
</td><td>
Copy Board
</td></tr>
<tr><td>
[createBoard(schematicUuid, pcbUuid)](./DMT_Board.md)
</td><td>
</td><td>
**_(BETA)_** Create Board
</td></tr>
<tr><td>
[deleteBoard(boardName)](./DMT_Board.md)
</td><td>
</td><td>
Delete Board
</td></tr>
<tr><td>
[getAllBoardsInfo()](./DMT_Board.md)
</td><td>
</td><td>
Get all in the project board detailed properties of
</td></tr>
<tr><td>
[getBoardInfo(boardName)](./DMT_Board.md)
</td><td>
</td><td>
Get detailed properties of Board
</td></tr>
<tr><td>
[getCurrentBoardInfo()](./DMT_Board.md)
</td><td>
</td><td>
Get detailed properties of Current board
</td></tr>
<tr><td>
[modifyBoardName(originalBoardName, boardName)](./DMT_Board.md)
</td><td>
</td><td>
Modify Board name
</td></tr>
</tbody></table>
---
## 方法详情
### copyboard
# DMT\_Board.copyBoard() method
Copy Board
## Signature
```typescript
function copyBoard(sourceBoardName: string): Promise<string | undefined>;
```
## Parameters
<table><thead><tr><th>
Parameter
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
sourceBoardName
</td><td>
string
</td><td>
Source board name
</td></tr>
</tbody></table>
## Returns
Promise<string \| undefined>
New board name, if it is `undefined` the copy fails
## Example
```javascript
// 1. 取第一块板子的名称作为复制源
const boards = await eda.dmt_Board.getAllBoardsInfo();
const sourceName = boards[0].name;
// 2. 复制板子,返回新板子名称
const newBoardName = await eda.dmt_Board.copyBoard(sourceName);
console.log('source:', sourceName);
console.log('copy:', newBoardName);
// 3. 删除复制的板子,保持工程整洁
const deleted = await eda.dmt_Board.deleteBoard(newBoardName);
console.log('deleted:', deleted);
```
### createboard
# DMT\_Board.createBoard() method
> This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
Create Board
## Signature
```typescript
function createBoard(schematicUuid?: string, pcbUuid?: string): Promise<string | undefined>;
```
## Parameters
<table><thead><tr><th>
Parameter
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
schematicUuid
</td><td>
string
</td><td>
_(Optional)_ Associated schematic UUID
</td></tr>
<tr><td>
pcbUuid
</td><td>
string
</td><td>
_(Optional)_ Associated PCB UUID
</td></tr>
</tbody></table>
## Returns
Promise<string \| undefined>
Board name, if it is `undefined` creation fails
## Example
```javascript
// 1. 无参调用,由系统自动创建一对原理图/PCB 文档并关联
const boardName = await eda.dmt_Board.createBoard();
console.log('create:', boardNreferences/classes/DMT_EditorControl.md
# DMT\_EditorControl class Document tree / Editor control class ## Signature ```typescript class DMT_EditorControl ``` ## Remarks Here the editor control is based on the sheets under the currently open engineering design. Any other `documentUuid` will be considered a non-existent document page ## Methods <table><thead><tr><th> Method </th><th> Modifiers </th><th> Description </th></tr></thead> <tbody><tr><td> [activateDocument(tabId)](./DMT_EditorControl.md) </td><td> </td><td> Activate a document </td></tr> <tr><td> [activateSplitScreen(splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Activate a split screen </td></tr> <tr><td> [closeDocument(tabId)](./DMT_EditorControl.md) </td><td> </td><td> Close document </td></tr> <tr><td> [createSplitScreen(splitScreenType, tabId)](./DMT_EditorControl.md) </td><td> </td><td> Create Split screen </td></tr> <tr><td> [generateIndicatorMarkers(markers, color, lineWidth, zoom, tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Generate indicator markers </td></tr> <tr><td> [getCurrentRenderedAreaImage(tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Get the canvas rendering region image </td></tr> <tr><td> [getSplitScreenIdByTabId(tabId)](./DMT_EditorControl.md) </td><td> </td><td> Use tab ID get split screen ID </td></tr> <tr><td> [getSplitScreenTree()](./DMT_EditorControl.md) </td><td> </td><td> Get the editor split screen property tree </td></tr> <tr><td> [getTabsBySplitScreenId(splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Get all tabs under the specified split screen ID </td></tr> <tr><td> [mergeAllDocumentFromSplitScreen()](./DMT_EditorControl.md) </td><td> </td><td> Merge all split screens </td></tr> <tr><td> [moveDocumentToSplitScreen(tabId, splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Move a document to the specified split screen </td></tr> <tr><td> [openDocument(documentUuid, splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> Open document </td></tr> <tr><td> [openLibraryDocument(libraryUuid, libraryType, uuid, splitScreenId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Open library symbol, footprint document </td></tr> <tr><td> [removeIndicatorMarkers(tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Remove indicator markers </td></tr> <tr><td> [tileAllDocumentToSplitScreen()](./DMT_EditorControl.md) </td><td> </td><td> Tile all documents </td></tr> <tr><td> [zoomTo(x, y, scaleRatio, tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Zoom to coordinates </td></tr> <tr><td> [zoomToAllPrimitives(tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Zoom to all primitives (fit all) </td></tr> <tr><td> [zoomToRegion(left, right, top, bottom, tabId)](./DMT_EditorControl.md) </td><td> </td><td> **_(BETA)_** Zoom to region </td></tr> <tr><td> [zoomToSelectedPrimitives(tabId)]
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/yanranxiaoxi/skills/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/skills/easyeda-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T02:17:36.930Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T02:17:36.930Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "11.9K downloads",
"href": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T02:17:36.930Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.1.24",
"href": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-10T08:36:14.032Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-yanranxiaoxi-easyeda-api/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.1.24",
"description": "- Major expansion of API documentation: 54 new files and 87 updated, including new interface reference files for extension and UI/grid development. - Added guide for AI integration: new \"how-to-start-for-ai.md\" with instructions tailored for AI agent usage. - Extended class coverage: new documentation for classes such as PCB_ImageTool, SYS_ExternalApi, and SYS_Help. - Updated and reorganized skill metadata for versioning consistency. - Removed obsolete files: deprecated type and skill card references eliminated for clarity. - Improved and updated quick reference and main index documentation for easier API lookup and navigation.",
"href": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceUrl": "https://clawhub.ai/yanranxiaoxi/easyeda-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-10T08:36:14.032Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
