# 插件开发概览

> 理解 Vetta 插件的运行方式、能力出口和信任边界。

Canonical page: /plugins/overview



<Takeaways>
  <li>
    插件跑在桌面渲染进程里，不是沙箱 iframe
  </li>

  <li>
    权限要经过声明、安装授权和运行时校验
  </li>

  <li>
    先确认它真的需要做成插件
  </li>
</Takeaways>

Vetta 插件用于扩展桌面客户端的界面、文件浏览器、对话和 Agent 能力。插件通过 `@vetta-org/plugin-sdk` 获取宿主提供的策展能力出口。

<MediaFrame>
  <img src="/images/product/plugin-workbench.webp" alt="Vetta 插件工作台中的文件、移动预览和电子表格预览" width="1536" height="836" />

  <figcaption>
    插件可以把领域工具和可交互产物放进 Vetta 工作区，但必须经过清单声明和宿主授权。
  </figcaption>
</MediaFrame>

## 运行模型 [#运行模型]

<Beats>
  <li>
    插件使用 React、TypeScript 和 Vite 开发。
  </li>

  <li>
    生产产物通过 Module Federation 加载。
  </li>

  <li>
    React、React DOM 和插件 SDK 由宿主以共享单例提供。
  </li>

  <li>
    插件在桌面渲染进程内运行，不是 iframe 或 Worker 沙箱。
  </li>
</Beats>

## 信任与权限 [#信任与权限]

插件面向官方或合作方策展的扩展，不应被视为可直接运行的任意不可信代码。需要权限的能力必须同时满足：

<Steps>
  <Step>
    ### 在清单中声明 [#在清单中声明]

    在 `plugin.json` 中声明权限。
  </Step>

  <Step>
    ### 安装时授权 [#安装时授权]

    用户或管理员在安装流程中确认授权。
  </Step>

  <Step>
    ### 运行时校验 [#运行时校验]

    宿主在调用对应 API 时再次校验权限。
  </Step>
</Steps>

## 先选正确的扩展形态 [#先选正确的扩展形态]

并非所有扩展都需要做成插件：

<Entries>
  <Entry kicker="SKILL" title="技能">
    给 Agent 增加一组指令与工作流时优先使用技能。
  </Entry>

  <Entry href="/product/mcp/" kicker="MCP" title="连接器">
    只连接外部工具或数据源时优先使用 MCP。
  </Entry>

  <Entry href="/plugins/getting-started/" kicker="PLUGIN" title="插件">
    需要桌面 UI、宿主 API 或完整生命周期时再创建插件。
  </Entry>

  <Entry href="/themes/overview/" kicker="THEME" title="主题">
    需要一致的外观、组件替换或主题页面时使用主题系统。
  </Entry>
</Entries>

## 可扩展范围 [#可扩展范围]

插件可以注册界面插槽、页面、文件预览、消息卡片、Agent 工具和 App Action，也可以在获得授权后访问文件、网络、私有存储、自动化任务及用户配置的 AI 模型。

<Continue>
  <ContinueLink href="/plugins/getting-started/" title="创建第一个插件" description="从最小项目结构到构建、安装与开发调试。" />

  <ContinueLink href="/plugins/manifest-and-permissions/" title="清单与权限" description="声明身份、入口、样式、权限和发布检查。" />

  <ContinueLink href="/plugins/extension-points/" title="扩展点" description="按产品目标选择 UI、文件、消息、Agent 或 App Action。" />
</Continue>
