Skip to content

Contribuir

Estructura del proyecto

packages/
  core/              @open-pencil/core — motor (sin deps DOM)
    src/             Grafo de escena, renderer, layout, codec, kiwi, tipos
  cli/               @open-pencil/cli — CLI headless para operaciones .fig
    src/commands/    info, tree, find, export, eval, analyze
  mcp/               @open-pencil/mcp — servidor MCP para herramientas IA
    src/             Transportes stdio + HTTP (Hono), 87 herramientas
src/
  components/        Vue SFCs (canvas, paneles, barra de herramientas, selector de color)
    properties/      Secciones del panel de propiedades (Apariencia, Relleno, Trazo, etc.)
  composables/       Entrada de canvas, atajos de teclado, hooks de renderizado
  stores/            Estado del editor (reactividad Vue)
  engine/            Shims de re-exportación desde @open-pencil/core
  kiwi/              Shims de re-exportación desde @open-pencil/core
  types.ts           Tipos compartidos (re-exportados desde core)
  constants.ts       Colores UI, valores por defecto, umbrales
desktop/             Tauri v2 (Rust + config)
tests/
  e2e/               Regresión visual Playwright
  engine/            Tests unitarios (bun:test)
docs/                Sitio de documentación VitePress
  specs/             Especificaciones de capacidades (fuente de verdad)
  changes/           Cambios activos y archivados

Entorno de desarrollo

sh
bun install
bun run dev          # Editor en localhost:1420
bun run docs:dev     # Docs en localhost:5173

Estilo de código

Herramientas

HerramientaComandoPropósito
oxlintbun run lintLinting (basado en Rust, rápido)
oxfmtbun run formatFormateo de código
tsgobun run typecheckVerificación de tipos (checker TypeScript basado en Go)

Ejecutar todas las verificaciones:

sh
bun run check

Convenciones

  • Nombres de archivo — kebab-case (scene-graph.ts, use-canvas-input.ts)
  • Componentes — PascalCase Vue SFCs (EditorCanvas.vue, ScrubInput.vue)
  • Constantes — SCREAMING_SNAKE_CASE
  • Funciones/variables — camelCase
  • Tipos/interfaces — PascalCase

Convenciones para agentes IA

Desarrolladores y agentes IA deben leer AGENTS.md en la raíz del repo (ver en GitHub). Cubre renderizado, grafo de escena, componentes e instancias, layout, UI, formato de archivo, convenciones Tauri y problemas conocidos.

Realizar cambios

  1. Implementar el cambio
  2. Ejecutar bun run check y bun run test
  3. Enviar un pull request

Archivos clave

El código fuente del motor vive en packages/core/src/. Los directorios src/engine/ y src/kiwi/ de la app son shims de re-exportación — edita el paquete core, no los shims.

ArchivoPropósito
packages/core/src/scene-graph.tsGrafo de escena: nodos, variables, instancias, hit testing
packages/core/src/renderer.tsPipeline de renderizado CanvasKit
packages/core/src/layout.tsAdaptador de layout Yoga
packages/core/src/undo.tsGestor de deshacer/rehacer
packages/core/src/clipboard.tsPortapapeles compatible con Figma
packages/core/src/vector.tsModelo de red vectorial
packages/core/src/render-image.tsExportación de imagen offscreen (PNG/JPG/WEBP)
packages/core/src/kiwi/codec.tsCodificador/decodificador binario Kiwi
packages/core/src/kiwi/fig-import.tsLógica de importación de archivos .fig
packages/cli/src/index.tsPunto de entrada del CLI
packages/core/src/tools/Definiciones unificadas de herramientas (IA, MCP, CLI)
packages/core/src/figma-api.tsImplementación de Figma Plugin API
packages/mcp/src/server.tsFactory del servidor MCP
packages/cli/src/commands/Comandos CLI (info, tree, find, export, eval, analyze)
src/stores/editor.tsEstado global del editor
src/composables/use-canvas.tsComposable de renderizado del canvas
src/composables/use-canvas-input.tsManejo de entrada ratón/touch
src/composables/use-keyboard.tsManejo de atajos de teclado

Released under the MIT License.