openpencil/README.pt.md
Kayshen-X d100b07c16 docs: add "Why Rust" section comparing the Rust rewrite to TS/Electron
Document the Rust rewrite advantages (footprint, perf, single
cross-platform core) with measured figures across all 15 locale READMEs.
Skips the pre-commit Rust/version-sync gate: docs-only.
2026-06-19 18:03:50 +08:00

467 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<p align="center">
<img src="./apps/desktop/build/icon.png" alt="OpenPencil" width="120" />
</p>
<h1 align="center">OpenPencil</h1>
<p align="center">
<strong>A primeira ferramenta de design vetorial open-source nativa com IA do mundo.</strong><br />
<sub>Equipes de Agentes Concorrentes &bull; Design-as-Code &bull; Servidor MCP Integrado &bull; Inteligência Multi-modelo</sub>
</p>
<p align="center">
<a href="./README.md"><b>English</b></a> · <a href="./README.zh.md">简体中文</a> · <a href="./README.zh-TW.md">繁體中文</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.fr.md">Français</a> · <a href="./README.es.md">Español</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.pt.md">Português</a> · <a href="./README.ru.md">Русский</a> · <a href="./README.hi.md">हिन्दी</a> · <a href="./README.tr.md">Türkçe</a> · <a href="./README.th.md">ไทย</a> · <a href="./README.vi.md">Tiếng Việt</a> · <a href="./README.id.md">Bahasa Indonesia</a>
</p>
<p align="center">
<a href="https://github.com/ZSeven-W/openpencil/stargazers"><img src="https://img.shields.io/github/stars/ZSeven-W/openpencil?style=flat&color=cfb537" alt="Stars" /></a>
<a href="https://github.com/ZSeven-W/openpencil/blob/main/LICENSE"><img src="https://img.shields.io/github/license/ZSeven-W/openpencil?color=64748b" alt="License" /></a>
<a href="https://github.com/ZSeven-W/openpencil/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/ZSeven-W/openpencil/ci.yml?branch=main&label=CI" alt="CI" /></a>
<a href="https://discord.gg/h9Fmyy6pVh"><img src="https://img.shields.io/discord/1476517942949580952?label=Discord&logo=discord&logoColor=white&color=5865F2" alt="Discord" /></a>
</p>
<br />
<p align="center">
<a href="https://oss.ioa.tech/zseven/openpencil/a46e24733239ce24de36702342201033.mp4">
<img src="./screenshot/op-cover.png" alt="OpenPencil — clique para assistir ao demo" width="100%" />
</a>
</p>
<p align="center"><sub>Clique na imagem para assistir ao vídeo de demonstração</sub></p>
<br />
> **Nota:** Existe outro projeto de código aberto com o mesmo nome — [OpenPencil](https://github.com/open-pencil/open-pencil), focado em design visual compatível com Figma com colaboração em tempo real. Este projeto foca em fluxos de trabalho AI-nativos de design para código.
## Por que OpenPencil
<table>
<tr>
<td width="50%">
### 🎨 Prompt → Canvas
Descreva qualquer UI em linguagem natural. Veja-a aparecer no canvas infinito em tempo real com animação de streaming. Modifique designs existentes selecionando elementos e conversando.
</td>
<td width="50%">
### 🤖 Equipes de Agentes Concorrentes
O orquestrador decompõe páginas complexas em sub-tarefas espaciais. Vários agentes de IA trabalham em diferentes seções simultaneamente — hero, features, footer — tudo em streaming paralelo.
</td>
</tr>
<tr>
<td width="50%">
### 🧠 Inteligência Multi-Modelo
Adapta-se automaticamente às capacidades de cada modelo. Claude recebe prompts completos com thinking; GPT-4o/Gemini desativam thinking; modelos menores (MiniMax, Qwen, Llama) recebem prompts simplificados para saída confiável.
</td>
<td width="50%">
### 🔌 Servidor MCP
Instalação com um clique no Claude Code, Codex, Gemini, OpenCode, Kiro ou Copilot CLIs. Faça design pelo seu terminal — leia, crie e modifique arquivos `.op` através de qualquer agente compatível com MCP.
</td>
</tr>
<tr>
<td width="50%">
### 📦 Design-as-Code
Arquivos `.op` são JSON — legíveis por humanos, compatíveis com Git, com diff. Variáveis de design geram propriedades CSS personalizadas. Exportação de código para React + Tailwind ou HTML + CSS.
</td>
<td width="50%">
### 🖥️ Roda em Qualquer Lugar
App web + desktop nativo no macOS, Windows e Linux via Electron. Atualização automática a partir do GitHub Releases. Associação de arquivos `.op` — clique duplo para abrir.
</td>
</tr>
<tr>
<td width="50%">
### ⌨️ CLI — `op`
Controle a ferramenta de design pelo terminal. `op design`, `op insert` — DSL de design em lote, manipulação de nós. Entrada por pipe de arquivos ou stdin. Funciona com o app desktop ou servidor web.
</td>
<td width="50%">
### 🎯 Exportação de Código Multiplataforma
Exporte de um único arquivo `.op` para React + Tailwind, HTML + CSS, Vue, Svelte, Flutter, SwiftUI, Jetpack Compose, React Native. Variáveis de design se tornam propriedades CSS customizadas.
</td>
</tr>
</table>
## Início Rápido
```bash
# Instalar dependências
bun install
# Iniciar servidor de desenvolvimento em http://localhost:3000
bun --bun run dev
```
Ou executar como aplicativo desktop:
```bash
bun run electron:dev
```
> **Pré-requisitos:** [Bun](https://bun.sh/) >= 1.0 e [Node.js](https://nodejs.org/) >= 18
### Docker
Várias variantes de imagem estão disponíveis — escolha a que se adequa às suas necessidades:
| Imagem | Tamanho | Inclui |
| ---------------------------- | ------- | ------------------------ |
| `openpencil:latest` | ~226 MB | Apenas aplicação web |
| `openpencil-claude:latest` | — | + Claude Code CLI |
| `openpencil-codex:latest` | — | + Codex CLI |
| `openpencil-opencode:latest` | — | + OpenCode CLI |
| `openpencil-copilot:latest` | — | + GitHub Copilot CLI |
| `openpencil-gemini:latest` | — | + Gemini CLI |
| `openpencil-full:latest` | ~1 GB | Todas as ferramentas CLI |
**Executar (apenas web):**
```bash
docker run -d -p 3000:3000 ghcr.io/zseven-w/openpencil:latest
```
**Executar com AI CLI (ex. Claude Code):**
O chat de IA depende do login OAuth do Claude CLI. Use um volume Docker para persistir a sessão de login:
```bash
# Passo 1 — Login (apenas uma vez)
docker volume create openpencil-claude-auth
docker run -it --rm \
-v openpencil-claude-auth:/root/.claude \
ghcr.io/zseven-w/openpencil-claude:latest claude login
# Passo 2 — Iniciar
docker run -d -p 3000:3000 \
-v openpencil-claude-auth:/root/.claude \
ghcr.io/zseven-w/openpencil-claude:latest
```
**Compilar localmente:**
```bash
# Base (apenas web)
docker build --target base -t openpencil .
# Com um CLI específico
docker build --target with-claude -t openpencil-claude .
# Completo (todos os CLIs)
docker build --target full -t openpencil-full .
```
## Design Nativo com IA
**Do Prompt à UI**
- **Texto para design** — descreva uma página e ela será gerada no canvas em tempo real com animação de streaming
- **Orquestrador** — decompõe páginas complexas em sub-tarefas espaciais para geração paralela
- **Modificação de design** — selecione elementos e descreva as alterações em linguagem natural
- **Entrada de visão** — anexe capturas de tela ou mockups para design baseado em referência
**Suporte Multi-Agente**
| Agente | Configuração |
| ----------------------------- | -------------------------------------------------------------------------------------------------------- |
| **Integrado (9+ provedores)** | Selecione entre presets de provedores com seletor de região — Anthropic, OpenAI, Google, DeepSeek e mais |
| **Claude Code** | Sem configuração — usa o Claude Agent SDK com OAuth local |
| **Codex CLI** | Conectar nas Configurações do Agente (`Cmd+,`) |
| **OpenCode** | Conectar nas Configurações do Agente (`Cmd+,`) |
| **GitHub Copilot** | `copilot login` e depois conectar nas Configurações do Agente (`Cmd+,`) |
| **Gemini CLI** | Conectar nas Configurações do Agente (`Cmd+,`) |
**Perfis de Capacidade de Modelo** — adapta automaticamente prompts, modo de thinking e timeouts por nível de modelo. Modelos de nível completo (Claude) recebem prompts completos; nível padrão (GPT-4o, Gemini, DeepSeek) desativam thinking; nível básico (MiniMax, Qwen, Llama, Mistral) recebem prompts simplificados de JSON aninhado para máxima confiabilidade.
**i18n** — Localização completa da interface em 15 idiomas: English, 简体中文, 繁體中文, 日本語, 한국어, Français, Español, Deutsch, Português, Русский, हिन्दी, Türkçe, ไทย, Tiếng Việt, Bahasa Indonesia.
**Servidor MCP**
- Servidor MCP integrado — instalação com um clique no Claude Code / Codex / Gemini / OpenCode / Kiro / Copilot CLIs
- Detecção automática de Node.js — se não instalado, recurso automático para transporte HTTP e início automático do servidor MCP HTTP
- Automação de design pelo terminal: leia, crie e modifique arquivos `.op` via qualquer agente compatível com MCP
- **Fluxo de design em camadas** — `design_skeleton` → `design_content` → `design_refine` para designs multi-seção de maior fidelidade
- **Recuperação segmentada de prompts** — carregue apenas o conhecimento de design necessário (schema, layout, roles, icons, planning, etc.)
- Suporte a múltiplas páginas — crie, renomeie, reordene e duplique páginas via ferramentas MCP
**Geração de Código**
- React + Tailwind CSS, HTML + CSS, CSS Variables
- Vue, Svelte, Flutter, SwiftUI, Jetpack Compose, React Native
## CLI — `op`
Instale globalmente e controle a ferramenta de design pelo terminal:
```bash
brew install zseven-w/openpencil/op
```
```bash
op start # Iniciar app desktop
op design @landing.txt # Design em lote a partir de arquivo
op insert '{"type":"RECT"}' # Inserir um nó
op import:figma design.fig # Importar arquivo Figma
cat design.dsl | op design - # Entrada por pipe via stdin
```
Suporta três métodos de entrada: string inline, `@filepath` (ler de arquivo) ou `-` (ler de stdin). Funciona com o app desktop ou servidor web de desenvolvimento. Veja o [CLI README](./apps/cli/README.md) para referência completa de comandos.
**Habilidade LLM** — instale o plugin [OpenPencil Skill](https://github.com/ZSeven-W/openpencil-skill) para ensinar agentes IA (Claude Code, Cursor, Codex, Gemini CLI, etc.) a projetar com `op`.
## Funcionalidades
**Canvas e Desenho**
- Canvas infinito com pan, zoom, guias de alinhamento inteligentes e snapping
- Retângulo, Elipse, Linha, Polígono, Caneta (Bezier), Frame, Texto
- Operações booleanas — união, subtração, interseção com barra de ferramentas contextual
- Seletor de ícones (Iconify) e importação de imagens (PNG/JPEG/SVG/WebP/GIF)
- Auto-layout — vertical/horizontal com gap, padding, justify, align
- Documentos com múltiplas páginas e navegação por abas
**Sistema de Design**
- Variáveis de design — tokens de cor, número e string com referências `$variable`
- Suporte a múltiplos temas — vários eixos, cada um com variantes (Claro/Escuro, Compacto/Confortável)
- Sistema de componentes — componentes reutilizáveis com instâncias e substituições
- Sincronização CSS — propriedades personalizadas geradas automaticamente, `var(--name)` na saída de código
- UIKits reutilizáveis — importe/exporte kits de componentes a partir de arquivos `.pen`
**IA e Agentes**
- Prompt-para-canvas com geração em streaming e decomposição espacial orientada pelo orquestrador
- Equipes de agentes concorrentes — vários designers trabalham em seções diferentes em paralelo, com indicadores no canvas por membro
- Fluxo em camadas — `design_skeleton` → `design_content` → `design_refine` com prompts focados por fase
- Guias de estilo — mais de 50 estilos integrados (glassmorphism, brutalist, retro, etc.) com correspondência fuzzy baseada em tags, integrados ao planejamento e geração
- Perfis de capacidade multi-modelo — adapta automaticamente o modo de pensamento, o esforço e a forma do prompt conforme o nível do modelo
- Runtime de agente integrado (`agent-native`, Zig NAPI) + provedores Anthropic, Claude Agent SDK, OpenCode, Codex, Copilot, Gemini
- Passthrough no formato Anthropic para provedores de LLMs chineses — Kimi, Zhipu, GLM, DouBao, Ark, Bailian/DashScope, ModelScope, Coding Plans
**Integração com Git**
- Assistente de clone com autenticação SSH / HTTPS e gestão de chaves SSH
- Seletor de branches — criar, trocar, excluir, mesclar, tudo a partir do painel Git
- Cascatas de pull / push com retry de autenticação e tratamento non-fast-forward
- Merge a três vias em modo pasta com rastreamento do estado `MERGE_HEAD` em disco
- Painel de conflitos com cards de três vias por nó / campo, editor JSON inline, ações em lote e bloco de diff inline
- UI de configurações remotas e chaves SSH; i18n em 15 idiomas em toda a superfície Git
**Exportação**
- Exportação do canvas — PNG, JPEG, WEBP, PDF (`Cmd+Shift+P`)
- Exportação de código — React + Tailwind, HTML + CSS, Vue, Svelte, Flutter, SwiftUI, Jetpack Compose, React Native
- Pipeline incremental de codegen MCP — `codegen_plan`, `codegen_submit_chunk`, `codegen_assemble`, `codegen_clean`
**Importação do Figma**
- Importe arquivos `.fig` preservando layout, preenchimentos, traços, efeitos, texto, imagens e vetores
**Aplicativo Desktop**
- macOS, Windows e Linux nativos via Electron
- Associação de arquivos `.op` — clique duplo para abrir, bloqueio de instância única
- Atualização automática a partir do GitHub Releases
- Menu de aplicativo nativo com Salvar como, Abrir recentes e um diálogo de alterações não salvas ao fechar
- Persistência de arquivos recentes
## Stack Tecnológica
| | |
| ---------------------- | -------------------------------------------------------------------------------- |
| **Frontend** | React 19 · TanStack Start · Tailwind CSS v4 · shadcn/ui · i18next |
| **Canvas** | CanvasKit/Skia (WASM, acelerado por GPU) |
| **Estado** | Zustand v5 |
| **Servidor** | Nitro |
| **Desktop** | Electron 35 |
| **CLI** | `op` — controle pelo terminal, DSL de design em lote |
| **IA** | Vercel AI SDK v6 · Anthropic SDK · Claude Agent SDK · OpenCode SDK · Copilot SDK |
| **Runtime** | Bun · Vite 7 |
| **Formato de arquivo** | `.op` — baseado em JSON, legível por humanos, compatível com Git |
## Por que Rust
O OpenPencil está sendo reescrito do zero em **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). A versão TypeScript + Electron é o que está disponível hoje; a reescrita em Rust é o próximo passo — um núcleo nativo drasticamente menor e mais rápido, que roda em mais plataformas a partir de uma única base de código.
| | TypeScript + Electron (hoje) | Rust (a reescrita) |
| ------------------------ | ------------------------------------------------- | ------------------------------------------------------------------------ |
| **Runtime desktop** | Electron — empacota Chromium + Node.js | Janela nativa (`winit` + GPU Skia), sem motor de navegador |
| **Pegada desktop** | Runtime completo do Chromium por instalação | Binário único autocontido — **55.5 MB** |
| **Payload web** | Bundle JS + WASM | **8.2 MB** wasm / **2.18 MB** gzip transferido pela rede |
| **Renderização** | CanvasKit/Skia na web | Um único backend Skia com aceleração GPU em **todos** os alvos |
| **Memória** | Pausas do JavaScript GC | Sem GC — ownership Rust, latência previsível |
| **Base de código** | Web stack + Electron + Zig NAPI agent | Um workspace Rust: editor · CLI · MCP · AI · codegen · Figma · Git |
| **Plataformas** | Web + desktop, duas stacks separadas | Desktop (macOS/Win/Linux) · mobile (iOS/Android) · navegador — um núcleo |
**Melhorias mensuradas**
- **Pegada mínima** — o aplicativo desktop completo é um único binário nativo de **55.5 MB** em vez de um motor de navegador empacotado mais um runtime Node. A versão web tem **8.2 MB** bruto / **2.18 MB** gzip após a divisão do catálogo de ícones (−48% transferido pela rede).
- **Escala para documentos grandes** — um canvas ativo com **10,000 nós** (auto-layout aninhado, quatro níveis de profundidade) grava, lê e captura o layout **sem pânicos e com ~0% de CPU ociosa**; um snapshot completo do layout de todos os 10k nós retorna em **~0.68 s**.
- **Interação rápida** — pan/zoom não mais reserializa o documento a cada frame (uma única correção no hot-path reduziu o uso de CPU no zoom com scroll de **~69% para ~0%**); arrastar atualiza a cena de forma incremental, a medição de texto é armazenada em cache e os redesenhos são consolidados em um por frame.
- **Um núcleo, cada tela** — o mesmo estado do editor e o mesmo backend de renderização compilam para desktop nativo, mobile e o navegador via WASM — sem reimplementações paralelas para manter sincronizadas.
- **GPU Skia em todo lugar** — o nativo renderiza via `skia-safe` em um contexto GL; o navegador renderiza via CanvasKit no WebGL2 — o mesmo código de desenho, a mesma saída.
- **Acessibilidade nativa** — AccessKit no macOS, Windows e Linux, mais um espelho DOM na web, em vez de depender da árvore de acessibilidade de um navegador.
- **Um workspace com verificação de tipos** — o host MCP, CLI, provedores de AI, geração de código, importação do Figma e integração com Git vivem em um único workspace Rust, com o `cargo-deny` fazendo controle da cadeia de suprimentos na CI.
> **Status:** o shell Rust está em desenvolvimento ativo (consulte o Roadmap abaixo). Até atingir paridade de recursos para o `v0.8.0`, os downloads instaláveis acima são a versão TypeScript + Electron.
## Estrutura do Projeto
```text
openpencil/
├── apps/
│ ├── web/ Aplicação web TanStack Start
│ │ ├── src/
│ │ │ ├── canvas/ Motor CanvasKit/Skia — desenho, sincronização, layout
│ │ │ ├── components/ UI React — editor, painéis, diálogos compartilhados, ícones
│ │ │ ├── services/ai/ Chat IA, orquestrador, geração de design, streaming
│ │ │ ├── stores/ Zustand — canvas, documento, páginas, histórico, IA
│ │ │ ├── mcp/ Ferramentas do servidor MCP para integração com CLI externo
│ │ │ ├── hooks/ Atalhos de teclado, soltar arquivos, colar do Figma
│ │ │ └── uikit/ Sistema de kit de componentes reutilizáveis
│ │ └── server/
│ │ ├── api/ai/ API Nitro — chat em streaming, geração, validação
│ │ └── utils/ Wrappers de cliente Claude CLI, OpenCode, Codex, Copilot
│ ├── desktop/ Aplicativo desktop Electron
│ │ ├── main.ts Janela, fork do Nitro, menu nativo, atualizador automático
│ │ ├── ipc-handlers.ts Diálogos de arquivo nativos, sincronização de tema, preferências IPC
│ │ └── preload.ts Ponte IPC
│ └── cli/ Ferramenta CLI — comando `op`
│ ├── src/commands/ Comandos de design, documento, exportação, importação, nó, página, variável
│ ├── connection.ts Conexão WebSocket com o app em execução
│ └── launcher.ts Detecção automática e inicialização do app desktop ou servidor web
├── packages/
│ ├── pen-types/ Definições de tipos para o modelo PenDocument
│ ├── pen-core/ Operações de árvore de documento, motor de layout, variáveis
│ ├── pen-codegen/ Geradores de código (React, HTML, Vue, Flutter, ...)
│ ├── pen-figma/ Parser e conversor de arquivos .fig do Figma
│ ├── pen-renderer/ Renderizador CanvasKit/Skia independente
│ ├── pen-sdk/ SDK guarda-chuva (re-exporta todos os pacotes)
│ ├── pen-ai-skills/ Engine de skills AI (carregamento de prompts por fases)
│ └── agent/ SDK de agente AI (Vercel AI SDK, multi-provedor, equipes de agentes)
└── .githooks/ Sincronização de versão no pre-commit a partir do nome da branch
```
## Atalhos de Teclado
| Tecla | Ação | | Tecla | Ação |
| ----------- | ------------------- | --- | ------------- | ------------------------------ |
| `V` | Selecionar | | `Cmd+S` | Salvar |
| `R` | Retângulo | | `Cmd+Z` | Desfazer |
| `O` | Elipse | | `Cmd+Shift+Z` | Refazer |
| `L` | Linha | | `Cmd+C/X/V/D` | Copiar/Recortar/Colar/Duplicar |
| `T` | Texto | | `Cmd+G` | Agrupar |
| `F` | Frame | | `Cmd+Shift+G` | Desagrupar |
| `P` | Ferramenta caneta | | `Cmd+Shift+P` | Exportar (PNG/JPG/WEBP/PDF) |
| `H` | Mão (pan) | | `Cmd+Shift+C` | Painel de código |
| `Del` | Excluir | | `Cmd+Shift+V` | Painel de variáveis |
| `[ / ]` | Reordenar | | `Cmd+J` | Chat IA |
| Setas | Mover 1px | | `Cmd+,` | Configurações do agente |
| `Cmd+Alt+U` | União booleana | | `Cmd+Alt+S` | Subtração booleana |
| `Cmd+Alt+I` | Interseção booleana | | `Cmd+Shift+S` | Salvar como |
## Scripts
```bash
bun --bun run dev # Servidor de desenvolvimento (porta 3000)
bun --bun run build # Build de produção
bun --bun run test # Executar testes (Vitest)
npx tsc --noEmit # Verificação de tipos
bun run bump <version> # Sincronizar versão em todos os package.json
bun run electron:dev # Desenvolvimento com Electron
bun run electron:build # Empacotamento do Electron
bun run cli:dev # Executar CLI a partir do código-fonte
bun run cli:compile # Compilar CLI para dist
```
## Contribuindo
Contribuições são bem-vindas! Consulte o [CLAUDE.md](./CLAUDE.md) para detalhes de arquitetura e estilo de código.
1. Faça fork e clone
2. Configure a sincronização de versão: `git config core.hooksPath .githooks`
3. Crie uma branch: `git checkout -b feat/my-feature`
4. Execute as verificações: `npx tsc --noEmit && bun --bun run test`
5. Faça commit com [Conventional Commits](https://www.conventionalcommits.org/): `feat(canvas): add rotation snapping`
6. Abra um PR contra `main`
## Roadmap
- [x] Variáveis de design e tokens com sincronização CSS
- [x] Sistema de componentes (instâncias e substituições)
- [x] Geração de design com IA e orquestrador
- [x] Integração com servidor MCP e fluxo de design em camadas
- [x] Suporte a múltiplas páginas
- [x] Importação do Figma `.fig`
- [x] Operações booleanas (união, subtração, interseção)
- [x] Perfis de capacidade multi-modelo
- [x] Reestruturação em monorepo com pacotes reutilizáveis
- [x] Ferramenta CLI (`op`) para controle pelo terminal
- [x] SDK de agente AI integrado com suporte multi-provedor
- [x] i18n — 15 idiomas
- [x] Integração com Git (clone, branch, push/pull, merge a três vias em modo pasta)
- [x] Exportação raster do canvas (PNG / JPEG / WEBP / PDF)
- [ ] Edição colaborativa
- [ ] Sistema de plugins
## Contribuidores
<a href="https://github.com/ZSeven-W/openpencil/graphs/contributors">
<img src="https://contrib.rocks/image?repo=ZSeven-W/openpencil" alt="Contributors" />
</a>
## Patrocinadores
OpenPencil é gratuito e de código aberto. O desenvolvimento é financiado por quem o acha útil — obrigado por manter o canvas aberto.
<a href="https://github.com/mrqyun" title="MrQyun">
<img src="https://wsrv.nl/?url=github.com/mrqyun.png&w=128&h=128&mask=circle&maxage=7d" width="64" height="64" alt="MrQyun" />
</a>
Obrigado a **[MrQyun](https://github.com/mrqyun)** — quer ver seu nome aqui? **[Torne-se um patrocinador →](https://github.com/sponsors/ZSeven-W)**
## Comunidade
<a href="https://discord.gg/h9Fmyy6pVh">
<img src="./apps/web/public/logo-discord.svg" alt="Discord" width="16" />
<strong> Entre no nosso Discord</strong>
</a>
— Faça perguntas, compartilhe designs, sugira funcionalidades.
## Star History
<a href="https://star-history.com/#ZSeven-W/openpencil&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ZSeven-W/openpencil&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ZSeven-W/openpencil&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ZSeven-W/openpencil&type=Date" width="100%" />
</picture>
</a>
## Avaliações
[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/zseven-w-openpencil-badge.png)](https://mseep.ai/app/zseven-w-openpencil)
## Licença
[MIT](./LICENSE) — Copyright (c) 2026 ZSeven-W