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.
This commit is contained in:
Kayshen-X 2026-06-19 18:03:50 +08:00
parent a13d2adc53
commit d100b07c16
15 changed files with 390 additions and 0 deletions

View file

@ -298,6 +298,32 @@ Unterstützt drei Eingabemethoden: Inline-String, `@filepath` (aus Datei lesen)
| **Laufzeit** | Bun · Vite 7 |
| **Dateiformat** | `.op` — JSON-basiert, menschenlesbar, Git-freundlich |
## Warum Rust
OpenPencil wird von Grund auf in **Rust** neu geschrieben ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). Die TypeScript + Electron-Version ist das, was heute ausgeliefert wird; die Rust-Neufassung ist der nächste Schritt — ein einzelner nativer Kern, der dramatisch kleiner und schneller ist und aus einer einzigen Codebasis auf mehr Plattformen läuft.
| | TypeScript + Electron (heute) | Rust (die Neufassung) |
| -------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------- |
| **Desktop-Laufzeit** | Electron — bündelt Chromium + Node.js | Natives Fenster (`winit` + GPU Skia), keine Browser-Engine |
| **Desktop-Größe** | Vollständige Chromium-Laufzeit pro Installation | Einzelne eigenständige Binärdatei — **55.5 MB** |
| **Web-Nutzlast** | JS + WASM-Bundle | **8.2 MB** wasm / **2.18 MB** gzip über die Leitung |
| **Rendering** | CanvasKit/Skia im Web | Ein GPU-beschleunigtes Skia-Backend auf **jedem** Ziel |
| **Speicher** | JavaScript GC-Pausen | Kein GC — Rust-Ownership, vorhersagbare Latenz |
| **Codebasis** | Web-Stack + Electron + Zig NAPI-Agent | Ein Rust-Workspace: Editor · CLI · MCP · AI · Codegen · Figma · Git |
| **Zielplattformen** | Web + Desktop, zwei separate Stacks | Desktop (macOS/Win/Linux) · Mobile (iOS/Android) · Browser — ein Kern |
**Gemessene Verbesserungen**
- **Geringer Speicherbedarf** — die gesamte Desktop-App ist eine einzelne native Binärdatei von **55.5 MB** anstelle einer gebündelten Browser-Engine plus einer Node-Laufzeit. Der Web-Build ist **8.2 MB** roh / **2.18 MB** gzip nach dem Aufteilen des Icon-Katalogs (48% über die Leitung).
- **Skaliert auf große Dokumente** — eine Live-Canvas mit **10,000-node** (verschachteltes Auto-Layout, vier Ebenen tief) schreibt, liest und erstellt Layout-Snapshots **ohne Panics und mit ~0% CPU-Leerlast**; ein vollständiger Layout-Snapshot aller 10k Knoten wird in **~0.68 s** zurückgegeben.
- **Schnelle Interaktion** — Pan/Zoom serialisiert das Dokument nicht mehr bei jedem Frame neu (ein einziger Hot-Path-Fix senkte den CPU-Verbrauch beim Rollen von **~69% auf ~0%**); Drags aktualisieren die Szene inkrementell, die Textmessung wird gecacht, und Neuzeichnungen werden auf einen pro Frame zusammengeführt.
- **Ein Kern, jeder Bildschirm** — derselbe Editor-Zustand und dasselbe Render-Backend werden zu nativem Desktop, Mobile und dem Browser via WASM kompiliert — keine parallelen Neuimplementierungen, die synchron gehalten werden müssen.
- **GPU Skia überall** — native Ausgabe über `skia-safe` in einem GL-Kontext; der Browser rendert über CanvasKit auf WebGL2 — derselbe Zeichencode, dieselbe Ausgabe.
- **Native Barrierefreiheit** — AccessKit auf macOS, Windows und Linux sowie ein DOM-Spiegel im Web, anstatt sich auf den a11y-Baum eines Browsers zu stützen.
- **Ein typgeprüfter Workspace** — der MCP-Host, CLI, AI-Anbieter, Codegenerierung, Figma-Import und Git-Integration leben alle in einem einzigen Rust-Workspace, mit `cargo-deny`-Supply-Chain-Kontrolle in der CI.
> **Status:** die Rust-Shell befindet sich in aktiver Entwicklung (siehe Roadmap unten). Bis sie Funktionsparität für `v0.8.0` erreicht, sind die installierbaren Downloads oben der TypeScript + Electron-Build.
## Projektstruktur
```text

View file

@ -298,6 +298,32 @@ Soporta tres métodos de entrada: cadena inline, `@filepath` (leer desde archivo
| **Runtime** | Bun · Vite 7 |
| **Formato de archivo** | `.op` — basado en JSON, legible por humanos, compatible con Git |
## Por Qué Rust
OpenPencil está siendo reescrito desde cero en **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). La versión TypeScript + Electron es lo que se distribuye hoy; la reescritura en Rust es lo que viene a continuación: un único núcleo nativo considerablemente más pequeño y rápido, que funciona en más plataformas desde una sola base de código.
| | TypeScript + Electron (hoy) | Rust (la reescritura) |
| ------------------------ | --------------------------------------------------- | --------------------------------------------------------------------------- |
| **Entorno de escritorio** | Electron — incluye Chromium + Node.js | Ventana nativa (`winit` + GPU Skia), sin motor de navegador |
| **Tamaño en escritorio** | Runtime completo de Chromium por instalación | Binario único autocontenido — **55.5 MB** |
| **Carga web** | Bundle JS + WASM | **8.2 MB** wasm / **2.18 MB** gzip sobre la red |
| **Renderizado** | CanvasKit/Skia en web | Un único backend Skia acelerado por GPU en **cada** plataforma |
| **Memoria** | Pausas del JavaScript GC | Sin GC — ownership de Rust, latencia predecible |
| **Base de código** | Web stack + Electron + Zig NAPI agent | Un workspace Rust: editor · CLI · MCP · AI · codegen · Figma · Git |
| **Plataformas** | Web + escritorio, dos stacks separados | Escritorio (macOS/Win/Linux) · móvil (iOS/Android) · navegador — un núcleo |
**Mejoras medidas**
- **Tamaño mínimo** — toda la aplicación de escritorio es un único binario nativo de **55.5 MB** en lugar de un motor de navegador empaquetado más un runtime de Node. La build web es **8.2 MB** sin comprimir / **2.18 MB** gzip tras dividir el catálogo de iconos (48% sobre la red).
- **Escala con documentos grandes** — un lienzo en vivo con **10,000 nodos** (auto-layout anidado, cuatro niveles de profundidad) escribe, lee y captura el layout **sin panics y con ~0% de CPU en reposo**; una captura completa del layout de los 10k nodos se completa en **~0.68 s**.
- **Interacción rápida** — el pan/zoom ya no re-serializa el documento en cada fotograma (una sola corrección en la ruta crítica redujo el CPU en wheel-zoom de **~69% a ~0%**); los arrastres actualizan la escena de forma incremental, la medición de texto se almacena en caché y los repintados se fusionan en uno por fotograma.
- **Un núcleo, cada pantalla** — el mismo estado del editor y el mismo backend de renderizado compilan a escritorio nativo, móvil y navegador mediante WASM, sin reimplementaciones paralelas que mantener sincronizadas.
- **GPU Skia en todas partes** — el renderizado nativo usa `skia-safe` sobre un contexto GL; el navegador renderiza mediante CanvasKit sobre WebGL2 — el mismo código de dibujo, la misma salida.
- **Accesibilidad nativa** — AccessKit en macOS, Windows y Linux, más un espejo DOM en web, en lugar de depender del árbol de accesibilidad del navegador.
- **Un workspace con tipado estricto** — el host MCP, CLI, proveedores de AI, generación de código, importación de Figma y la integración con Git conviven en un único workspace Rust, con `cargo-deny` vigilando la cadena de suministro en CI.
> **Estado:** el shell en Rust está en desarrollo activo (consulta la Hoja de Ruta más abajo). Hasta que alcance paridad de funcionalidades para `v0.8.0`, las descargas instalables anteriores corresponden a la build TypeScript + Electron.
## Estructura del Proyecto
```text

View file

@ -298,6 +298,32 @@ Supporte trois méthodes d'entrée : chaîne en ligne, `@filepath` (lecture depu
| **Runtime** | Bun · Vite 7 |
| **Format de fichier** | `.op` — basé sur JSON, lisible par l'humain, compatible Git |
## Pourquoi Rust
OpenPencil est en cours de réécriture complète en **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). La version TypeScript + Electron est celle qui est distribuée aujourd'hui ; la réécriture en Rust est la prochaine étape — un cœur natif unique, nettement plus léger et plus rapide, fonctionnant sur davantage de plateformes à partir d'une seule base de code.
| | TypeScript + Electron (aujourd'hui) | Rust (la réécriture) |
| -------------------------- | ----------------------------------------------------- | -------------------------------------------------------------------------- |
| **Exécution bureau** | Electron — embarque Chromium + Node.js | Fenêtre native (`winit` + GPU Skia), sans moteur de navigateur |
| **Empreinte bureau** | Runtime Chromium complet par installation | Binaire unique autonome — **55.5 MB** |
| **Charge web** | Bundle JS + WASM | **8.2 MB** wasm / **2.18 MB** gzip sur le réseau |
| **Rendu** | CanvasKit/Skia sur le web | Un seul backend Skia accéléré GPU sur **chaque** cible |
| **Mémoire** | Pauses du GC JavaScript | Sans GC — ownership Rust, latence prévisible |
| **Base de code** | Stack web + Electron + agent Zig NAPI | Un workspace Rust : éditeur · CLI · MCP · AI · codegen · Figma · Git |
| **Cibles** | Web + bureau, deux stacks séparées | Bureau (macOS/Win/Linux) · mobile (iOS/Android) · navigateur — un seul cœur |
**Améliorations mesurées**
- **Empreinte minimale** — l'intégralité de l'application bureau tient en un seul binaire natif de **55.5 MB**, au lieu d'un moteur de navigateur embarqué et d'un runtime Node. La version web pèse **8.2 MB** brut / **2.18 MB** gzip après découpage du catalogue d'icônes (48% sur le réseau).
- **Passage à l'échelle sur les grands documents** — un canevas en direct de **10,000 nœuds** (auto-layout imbriqué, quatre niveaux de profondeur) écrit, lit et capture l'état de mise en page **sans panique et avec ~0% de CPU en veille** ; un snapshot complet de la mise en page des 10k nœuds est retourné en **~0.68 s**.
- **Interactions fluides** — le panoramique/zoom ne re-sérialise plus le document à chaque frame (un correctif sur un point chaud critique a ramené le CPU lors du zoom molette de **~69% à ~0%**) ; les glissés appliquent les modifications de scène de façon incrémentielle, la mesure du texte est mise en cache, et les repeints sont fusionnés en un seul par frame.
- **Un cœur, chaque écran** — le même état de l'éditeur et le même backend de rendu compilent vers le bureau natif, le mobile et le navigateur via WASM — sans réimplémentations parallèles à synchroniser.
- **GPU Skia partout** — le natif effectue le rendu via `skia-safe` sur un contexte GL ; le navigateur effectue le rendu via CanvasKit sur WebGL2 — le même code de dessin, le même résultat.
- **Accessibilité native** — AccessKit sur macOS, Windows et Linux, plus un miroir DOM sur le web, plutôt que de s'appuyer sur l'arbre a11y d'un navigateur.
- **Un workspace avec vérification de types** — l'hôte MCP, le CLI, les fournisseurs AI, la génération de code, l'import Figma et l'intégration Git résident tous dans un seul workspace Rust, avec filtrage de la chaîne d'approvisionnement par `cargo-deny` en CI.
> **Statut :** le shell Rust est en développement actif (voir la Feuille de route ci-dessous). Jusqu'à ce qu'il atteigne la parité de fonctionnalités pour `v0.8.0`, les téléchargements installables ci-dessus correspondent à la version TypeScript + Electron.
## Structure du projet
```text

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # stdin से पाइप करें
| **रनटाइम** | Bun · Vite 7 |
| **फ़ाइल फ़ॉर्मेट** | `.op` — JSON-आधारित, मानव-पठनीय, Git-फ्रेंडली |
## Rust क्यों
OpenPencil को पूरी तरह **Rust** में नए सिरे से लिखा जा रहा है ([#129](https://github.com/ZSeven-W/openpencil/issues/129))। TypeScript + Electron बिल्ड वह है जो आज उपलब्ध है; Rust रीराइट अगला कदम है — एक नेटिव कोर जो काफ़ी छोटा और तेज़ है, और एक ही कोडबेस से अधिक प्लेटफ़ॉर्म पर चलता है।
| | TypeScript + Electron (आज) | Rust (रीराइट) |
| ----------------------- | ----------------------------------------------- | -------------------------------------------------------------------- |
| **डेस्कटॉप रनटाइम** | Electron — Chromium + Node.js बंडल करता है | नेटिव विंडो (`winit` + GPU Skia), कोई ब्राउज़र इंजन नहीं |
| **डेस्कटॉप फ़ुटप्रिंट** | प्रति इंस्टॉल पूरा Chromium रनटाइम | एकल स्व-निहित बाइनरी — **55.5 MB** |
| **वेब पेलोड** | JS + WASM बंडल | **8.2 MB** wasm / **2.18 MB** gzip वायर पर |
| **रेंडरिंग** | CanvasKit/Skia वेब पर | **हर** टार्गेट पर एक GPU-एक्सेलेरेटेड Skia बैकएंड |
| **मेमोरी** | JavaScript GC पॉज़ | कोई GC नहीं — Rust ओनरशिप, अनुमानित लेटेंसी |
| **कोडबेस** | वेब स्टैक + Electron + Zig NAPI एजेंट | एक Rust वर्कस्पेस: editor · CLI · MCP · AI · codegen · Figma · Git |
| **टार्गेट** | Web + desktop, दो अलग स्टैक | Desktop (macOS/Win/Linux) · mobile (iOS/Android) · browser — एक कोर |
**मापे गए सुधार**
- **छोटा फ़ुटप्रिंट** — पूरा डेस्कटॉप ऐप एक **55.5 MB** नेटिव बाइनरी है, न कि बंडल किया हुआ ब्राउज़र इंजन और Node रनटाइम। आइकन कैटलॉग विभाजन के बाद वेब बिल्ड **8.2 MB** रॉ / **2.18 MB** gzip है (वायर पर 48%)।
- **बड़े दस्तावेज़ों में स्केल****10,000-node** लाइव कैनवास (नेस्टेड ऑटो-लेआउट, चार स्तर गहरा) बिना किसी पैनिक और **~0% आइडल CPU** के लिखता, पढ़ता और लेआउट स्नैपशॉट करता है; सभी 10k नोड्स का पूर्ण लेआउट स्नैपशॉट **~0.68 s** में वापस आता है।
- **तेज़ इंटरैक्शन** — pan/zoom अब हर फ़्रेम में दस्तावेज़ को री-सीरियलाइज़ नहीं करता (एकल हॉट-पाथ फ़िक्स ने व्हील-ज़ूम CPU को **~69% से ~0%** तक घटा दिया); ड्रैग दृश्य को इन्क्रीमेंटली पैच करते हैं, टेक्स्ट मेज़रमेंट कैश्ड है, और रिपेंट प्रति फ़्रेम एक में संयोजित होते हैं।
- **एक कोर, हर स्क्रीन** — वही एडिटर स्टेट और वही रेंडर बैकएंड नेटिव डेस्कटॉप, मोबाइल और WASM के ज़रिए ब्राउज़र में कंपाइल होते हैं — सिंक में रखने के लिए कोई समानांतर पुनर्कार्यान्वयन नहीं।
- **हर जगह GPU Skia** — नेटिव GL कॉन्टेक्स्ट पर `skia-safe` के ज़रिए रेंडर करता है; ब्राउज़र WebGL2 पर CanvasKit के ज़रिए रेंडर करता है — वही ड्रॉइंग कोड, वही आउटपुट।
- **नेटिव एक्सेसिबिलिटी** — macOS, Windows और Linux पर AccessKit, साथ ही वेब पर DOM मिरर — ब्राउज़र के a11y ट्री पर निर्भर रहने के बजाय।
- **एक टाइप-चेक्ड वर्कस्पेस** — MCP होस्ट, CLI, AI प्रदाता, कोड जनरेशन, Figma इम्पोर्ट और Git इंटीग्रेशन सभी एक ही Rust वर्कस्पेस में रहते हैं, CI में `cargo-deny` सप्लाई-चेन गेटिंग के साथ।
> **स्थिति:** Rust शेल सक्रिय विकास में है (नीचे रोडमैप देखें)। जब तक यह `v0.8.0` के लिए फ़ीचर पैरिटी तक नहीं पहुँचता, ऊपर दिए गए इंस्टॉलेबल डाउनलोड TypeScript + Electron बिल्ड हैं।
## प्रोजेक्ट संरचना
```text

View file

@ -298,6 +298,32 @@ Mendukung tiga metode input: string inline, `@filepath` (baca dari file), atau `
| **Runtime** | Bun · Vite 7 |
| **Format file** | `.op` — berbasis JSON, mudah dibaca manusia, ramah Git |
## Mengapa Rust
OpenPencil sedang ditulis ulang dari awal dalam **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). Build TypeScript + Electron adalah yang tersedia saat ini; penulisan ulang dalam Rust adalah langkah berikutnya — satu inti native yang jauh lebih kecil dan lebih cepat, serta berjalan di lebih banyak platform dari satu basis kode.
| | TypeScript + Electron (saat ini) | Rust (penulisan ulang) |
| ------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------- |
| **Runtime desktop** | Electron — menyertakan Chromium + Node.js | Jendela native (`winit` + GPU Skia), tanpa engine browser |
| **Jejak desktop** | Runtime Chromium penuh per instalasi | Satu binary mandiri — **55.5 MB** |
| **Payload web** | Bundle JS + WASM | **8.2 MB** wasm / **2.18 MB** gzip melalui jaringan |
| **Rendering** | CanvasKit/Skia di web | Satu backend Skia berakselerasi GPU di **setiap** target |
| **Memori** | Jeda JavaScript GC | Tanpa GC — kepemilikan Rust, latensi yang dapat diprediksi |
| **Basis kode** | Web stack + Electron + Zig NAPI agent | Satu workspace Rust: editor · CLI · MCP · AI · codegen · Figma · Git |
| **Target** | Web + desktop, dua stack terpisah | Desktop (macOS/Win/Linux) · mobile (iOS/Android) · browser — satu inti |
**Peningkatan terukur**
- **Jejak kecil** — seluruh aplikasi desktop adalah satu binary native **55.5 MB** alih-alih engine browser terbundel ditambah runtime Node. Build web berukuran **8.2 MB** mentah / **2.18 MB** gzip setelah pemisahan katalog ikon (48% melalui jaringan).
- **Skalabel untuk dokumen besar** — kanvas live dengan **10,000 node** (auto-layout bertingkat, empat level dalam) menulis, membaca, dan mengambil snapshot layout **tanpa panik dan ~0% CPU idle**; snapshot layout penuh dari semua 10k node dikembalikan dalam **~0.68 dtk**.
- **Interaksi cepat** — pan/zoom tidak lagi menyerial ulang dokumen setiap frame (satu perbaikan hot-path memotong CPU wheel-zoom dari **~69% menjadi ~0%**); seret menambal scene secara inkremental, pengukuran teks di-cache, dan repaint digabungkan menjadi satu per frame.
- **Satu inti, setiap layar** — state editor yang sama dan backend render yang sama dikompilasi ke desktop native, mobile, dan browser melalui WASM — tanpa reimplementasi paralel yang perlu disinkronkan.
- **GPU Skia di mana saja** — native merender melalui `skia-safe` pada konteks GL; browser merender melalui CanvasKit pada WebGL2 — kode gambar yang sama, keluaran yang sama.
- **Aksesibilitas native** — AccessKit di macOS, Windows, dan Linux, ditambah mirror DOM di web, alih-alih mengandalkan pohon a11y browser.
- **Satu workspace bertipe** — host MCP, CLI, penyedia AI, pembuatan kode, impor Figma, dan integrasi Git semuanya berada dalam satu workspace Rust, dengan penjagaan rantai pasokan `cargo-deny` di CI.
> **Status:** shell Rust sedang dalam pengembangan aktif (lihat Peta Jalan di bawah). Hingga mencapai paritas fitur untuk `v0.8.0`, unduhan yang dapat diinstal di atas adalah build TypeScript + Electron.
## Struktur Proyek
```text

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # stdin からパイプ入力
| **ランタイム** | Bun · Vite 7 |
| **ファイル形式** | `.op` — JSON ベース、人間が読みやすく、Git フレンドリー |
## なぜ Rust か
OpenPencil は **Rust** で一から書き直されています ([#129](https://github.com/ZSeven-W/openpencil/issues/129))。現在リリースされているのは TypeScript + Electron ビルドです。Rust による書き直しがその次のステップ — ひとつのネイティブコアで劇的に軽量かつ高速になり、単一のコードベースからより多くのプラットフォームで動作します。
| | TypeScript + Electron今日 | Rust書き直し後 |
| --------------------- | ---------------------------------------------- | ------------------------------------------------------------------- |
| **デスクトップランタイム** | Electron — Chromium + Node.js をバンドル | ネイティブウィンドウ(`winit` + GPU Skia、ブラウザエンジン不要 |
| **デスクトップフットプリント** | インストールごとに Chromium ランタイム全体 | 単一の自己完結型バイナリ — **55.5 MB** |
| **Web ペイロード** | JS + WASM バンドル | **8.2 MB** wasm / **2.18 MB** gzip転送時 |
| **レンダリング** | Web 上の CanvasKit/Skia | **すべての**ターゲットで単一の GPU アクセラレーション Skia バックエンド |
| **メモリ** | JavaScript GC によるポーズ | GC なし — Rust 所有権モデル、予測可能なレイテンシ |
| **コードベース** | Web スタック + Electron + Zig NAPI エージェント | 単一 Rust ワークスペースエディター・CLI・MCP・AI・codegen・Figma・Git |
| **ターゲット** | Web + デスクトップ、別々のスタック | デスクトップmacOS/Win/Linux・モバイルiOS/Android・ブラウザ — 単一コア |
**実測改善値**
- **極小フットプリント** — デスクトップアプリ全体が、ブラウザエンジンと Node ランタイムのバンドルではなく、**55.5 MB** のネイティブバイナリ 1 つ。Web ビルドはアイコンカタログを分割した後、**8.2 MB** 生 / **2.18 MB** gzip転送量 48%)。
- **大規模ドキュメントへのスケール****10,000-node** のライブキャンバス(ネスト 4 段のオートレイアウト)で、書き込み・読み込み・レイアウトスナップショットを**パニックなし、アイドル CPU ~0%** で実行。全 10k ノードのレイアウトスナップショットは **~0.68 s** で返却。
- **高速インタラクション** — パン/ズームがフレームごとにドキュメントを再シリアライズしなくなった(ホットパスの修正 1 点でホイールズーム CPU を **~69% から ~0%** に削減)。ドラッグはシーンをインクリメンタルにパッチし、テキスト計測はキャッシュされ、再描画は 1 フレームあたり 1 回にまとめられる。
- **単一コア、あらゆる画面** — 同じエディターステートと同じレンダリングバックエンドが、WASM 経由でネイティブデスクトップ、モバイル、ブラウザにコンパイル — 同期を保つための並列再実装は不要。
- **GPU Skia everywhere** — ネイティブは GL コンテキスト上の `skia-safe` でレンダリング。ブラウザは WebGL2 上の CanvasKit でレンダリング — 同じ描画コード、同じ出力。
- **ネイティブアクセシビリティ** — macOS・Windows・Linux では AccessKit を使用し、Web ではブラウザの a11y ツリーに依存する代わりに DOM ミラーを提供。
- **型チェック済みの単一ワークスペース** — MCP ホスト、CLI、AI プロバイダー、コード生成、Figma インポート、Git 統合がすべて単一の Rust ワークスペースに収まり、CI では `cargo-deny` によるサプライチェーンのゲーティングを実施。
> **ステータス:** Rust シェルは現在活発に開発中です(下記のロードマップを参照)。`v0.8.0` の機能同等性に達するまで、上記のインストーラブルダウンロードは TypeScript + Electron ビルドです。
## プロジェクト構成
```text

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # stdin에서 파이프 입력
| **런타임** | Bun · Vite 7 |
| **파일 형식** | `.op` — JSON 기반, 사람이 읽을 수 있는, Git 친화적 |
## Rust를 선택한 이유
OpenPencil은 **Rust**로 처음부터 다시 작성되고 있습니다 ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). 현재 배포되는 빌드는 TypeScript + Electron이며, Rust 재작성 버전이 그 다음 단계입니다 — 단일 네이티브 코어로 크기는 획기적으로 줄고 속도는 빨라지며, 하나의 코드베이스에서 더 많은 플랫폼을 지원합니다.
| | TypeScript + Electron (현재) | Rust (재작성 버전) |
| ----------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------ |
| **데스크톱 런타임** | Electron — Chromium + Node.js 번들 | 네이티브 윈도우 (`winit` + GPU Skia), 브라우저 엔진 없음 |
| **데스크톱 설치 크기** | 설치마다 전체 Chromium 런타임 포함 | 단일 자급자족 바이너리 — **55.5 MB** |
| **웹 페이로드** | JS + WASM 번들 | **8.2 MB** wasm / 전송 시 **2.18 MB** gzip |
| **렌더링** | 웹에서 CanvasKit/Skia | **모든** 타깃에서 GPU 가속 Skia 백엔드 하나 |
| **메모리** | JavaScript GC 일시 중단 | GC 없음 — Rust 소유권, 예측 가능한 레이턴시 |
| **코드베이스** | 웹 스택 + Electron + Zig NAPI 에이전트 | 단일 Rust 워크스페이스: 에디터 · CLI · MCP · AI · 코드젠 · Figma · Git |
| **지원 플랫폼** | 웹 + 데스크톱, 두 개의 별도 스택 | 데스크톱 (macOS/Win/Linux) · 모바일 (iOS/Android) · 브라우저 — 코어 하나 |
**측정된 개선 사항**
- **작은 설치 크기** — 전체 데스크톱 앱이 번들된 브라우저 엔진과 Node 런타임 대신 단 하나의 **55.5 MB** 네이티브 바이너리입니다. 아이콘 카탈로그 분할 후 웹 빌드는 원본 **8.2 MB** / gzip **2.18 MB**입니다 (전송량 48%).
- **대용량 문서 확장성****10,000-node** 라이브 캔버스(중첩 오토 레이아웃, 4단계 깊이)에서 쓰기, 읽기, 레이아웃 스냅샷을 **패닉 없이 유휴 CPU ~0%**로 처리하며, 10k 노드 전체 레이아웃 스냅샷이 **~0.68 s** 안에 반환됩니다.
- **빠른 인터랙션** — 팬/줌 시 매 프레임마다 문서를 재직렬화하지 않습니다 (핫 경로 수정 하나로 휠 줌 CPU 사용률이 **~69%에서 ~0%로** 감소). 드래그는 씬을 증분 방식으로 패치하고, 텍스트 측정은 캐시되며, 리페인트는 프레임당 하나로 합산됩니다.
- **코어 하나로 모든 화면** — 동일한 에디터 상태와 동일한 렌더 백엔드가 WASM을 통해 네이티브 데스크톱, 모바일, 브라우저로 컴파일됩니다 — 동기화가 필요한 별도 구현체가 없습니다.
- **어디서나 GPU Skia** — 네이티브는 GL 컨텍스트 위의 `skia-safe`로 렌더링하고, 브라우저는 WebGL2 위의 CanvasKit으로 렌더링합니다 — 동일한 드로잉 코드, 동일한 출력.
- **네이티브 접근성** — 브라우저의 접근성 트리에 의존하는 대신 macOS, Windows, Linux에서는 AccessKit을, 웹에서는 DOM 미러를 사용합니다.
- **타입 검사된 단일 워크스페이스** — MCP 호스트, CLI, AI 제공자, 코드 생성, Figma 가져오기, Git 통합이 모두 단일 Rust 워크스페이스 안에 있으며, CI에서 `cargo-deny`로 공급망을 검증합니다.
> **상태:** Rust 셸은 활발히 개발 중입니다 (아래 로드맵 참고). `v0.8.0` 기능 동등성에 도달할 때까지는 위의 설치 가능한 다운로드가 TypeScript + Electron 빌드입니다.
## 프로젝트 구조
```text

View file

@ -371,6 +371,32 @@ Supports three input methods: inline string, `@filepath` (read from file), or `-
| **Lint** | oxlint · oxfmt |
| **File format** | `.op` — JSON-based, human-readable, Git-friendly |
## Why Rust
OpenPencil is being rewritten from the ground up in **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). The TypeScript + Electron build is what ships today; the Rust rewrite is what's next — one native core that is dramatically smaller and faster, and runs on more platforms from a single codebase.
| | TypeScript + Electron (today) | Rust (the rewrite) |
| --------------------- | ---------------------------------------------- | ------------------------------------------------------------------- |
| **Desktop runtime** | Electron — bundles Chromium + Node.js | Native window (`winit` + GPU Skia), no browser engine |
| **Desktop footprint** | Full Chromium runtime per install | Single self-contained binary — **55.5 MB** |
| **Web payload** | JS + WASM bundle | **8.2 MB** wasm / **2.18 MB** gzip over the wire |
| **Rendering** | CanvasKit/Skia on web | One GPU-accelerated Skia backend on **every** target |
| **Memory** | JavaScript GC pauses | No GC — Rust ownership, predictable latency |
| **Codebase** | Web stack + Electron + Zig NAPI agent | One Rust workspace: editor · CLI · MCP · AI · codegen · Figma · Git |
| **Targets** | Web + desktop, two separate stacks | Desktop (macOS/Win/Linux) · mobile (iOS/Android) · browser — one core |
**Measured improvements**
- **Tiny footprint** — the whole desktop app is one **55.5 MB** native binary instead of a bundled browser engine plus a Node runtime. The web build is **8.2 MB** raw / **2.18 MB** gzip after splitting the icon catalog (48% over the wire).
- **Scales to large documents** — a **10,000-node** live canvas (nested auto-layout, four levels deep) writes, reads, and snapshots layout with **no panics and ~0% idle CPU**; a full layout snapshot of all 10k nodes returns in **~0.68 s**.
- **Fast interaction** — pan/zoom no longer re-serializes the document every frame (a single hot-path fix cut wheel-zoom CPU from **~69% to ~0%**); drags patch the scene incrementally, text measurement is cached, and repaints coalesce to one per frame.
- **One core, every screen** — the same editor state and the same render backend compile to native desktop, mobile, and the browser via WASM — no parallel reimplementations to keep in sync.
- **GPU Skia everywhere** — native renders through `skia-safe` on a GL context; the browser renders through CanvasKit on WebGL2 — the same drawing code, the same output.
- **Native accessibility** — AccessKit on macOS, Windows, and Linux, plus a DOM mirror on web, instead of leaning on a browser's a11y tree.
- **One type-checked workspace** — the MCP host, CLI, AI providers, code generation, Figma import, and Git integration all live in a single Rust workspace, with `cargo-deny` supply-chain gating in CI.
> **Status:** the Rust shell is under active development (see the Roadmap below). Until it reaches feature parity for `v0.8.0`, the installable downloads above are the TypeScript + Electron build.
## Project Structure
```text

View file

@ -298,6 +298,32 @@ Suporta três métodos de entrada: string inline, `@filepath` (ler de arquivo) o
| **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

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # Передача через stdin
| **Среда выполнения** | Bun · Vite 7 |
| **Формат файла** | `.op` — на основе JSON, удобочитаемый, дружественный к Git |
## Почему Rust
OpenPencil переписывается с нуля на **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). Сборка на TypeScript + Electron — это то, что доступно сегодня; переписанная версия на Rust — это то, что будет дальше: единое нативное ядро, значительно меньшее и быстрее, работающее на большем количестве платформ из единой кодовой базы.
| | TypeScript + Electron (сегодня) | Rust (переписанная версия) |
| ------------------------ | ---------------------------------------------- | ----------------------------------------------------------------------------- |
| **Рантайм на десктопе** | Electron — включает Chromium + Node.js | Нативное окно (`winit` + GPU Skia), без браузерного движка |
| **Размер на десктопе** | Полный рантайм Chromium при каждой установке | Один самодостаточный бинарный файл — **55.5 MB** |
| **Объём для веба** | JS + WASM бандл | **8.2 MB** wasm / **2.18 MB** gzip по сети |
| **Рендеринг** | CanvasKit/Skia на вебе | Единый GPU-ускоренный Skia бэкенд на **каждой** платформе |
| **Память** | Паузы JavaScript GC | Без GC — владение Rust, предсказуемая задержка |
| **Кодовая база** | Веб-стек + Electron + Zig NAPI агент | Одно Rust-пространство: редактор · CLI · MCP · AI · кодген · Figma · Git |
| **Платформы** | Веб + десктоп, два раздельных стека | Десктоп (macOS/Win/Linux) · мобильные (iOS/Android) · браузер — одно ядро |
**Измеренные улучшения**
- **Минимальный размер** — всё десктопное приложение представляет собой один нативный бинарный файл **55.5 MB** вместо встроенного браузерного движка плюс Node-рантайм. Веб-сборка составляет **8.2 MB** в несжатом виде / **2.18 MB** gzip после разбивки каталога иконок (48% по сети).
- **Масштабируется на больших документах** — холст с **10,000 узлами** в реальном времени (вложенный авто-layout, четыре уровня глубины) записывает, читает и делает снимок раскладки **без паник и при ~0% CPU в режиме ожидания**; полный снимок раскладки всех 10k узлов возвращается за **~0.68 с**.
- **Быстрое взаимодействие** — панорамирование/зум больше не сериализует документ заново на каждом кадре (одно исправление горячего пути снизило CPU при зуме колесом с **~69% до ~0%**); перетаскивание обновляет сцену инкрементально, измерение текста кэшируется, а перерисовки объединяются в одну на кадр.
- **Одно ядро, каждый экран** — одно и то же состояние редактора и один и тот же рендер-бэкенд компилируются в нативный десктоп, мобильные устройства и браузер через WASM — без параллельных реализаций, которые нужно синхронизировать.
- **GPU Skia везде** — нативный рендеринг через `skia-safe` на GL-контексте; браузер рендерит через CanvasKit на WebGL2 — один и тот же код рисования, один и тот же вывод.
- **Нативная доступность** — AccessKit на macOS, Windows и Linux, плюс DOM-зеркало на вебе, вместо опоры на дерево доступности браузера.
- **Одно типизированное пространство** — хост MCP, CLI, AI-провайдеры, генерация кода, импорт Figma и интеграция с Git — всё в одном Rust-пространстве с контролем цепочки поставок через `cargo-deny` в CI.
> **Статус:** Rust-оболочка находится в активной разработке (см. [Дорожная карта](#дорожная-карта) ниже). До достижения паритета функций для `v0.8.0` загружаемые дистрибутивы выше — это сборка TypeScript + Electron.
## Структура проекта
```text

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # Pipe จาก stdin
| **Runtime** | Bun · Vite 7 |
| **รูปแบบไฟล์** | `.op` — ใช้ JSON, อ่านได้โดยมนุษย์, Git-friendly |
## ทำไมต้อง Rust
OpenPencil กำลังถูกเขียนใหม่ตั้งแต่ต้นด้วย **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)) บิลด์ TypeScript + Electron คือสิ่งที่จัดจำหน่ายในปัจจุบัน ส่วนการเขียนใหม่ด้วย Rust คือก้าวต่อไป — core แบบ native เดียวที่เล็กและเร็วกว่าอย่างเห็นได้ชัด และรองรับได้บนหลายแพลตฟอร์มจาก codebase เดียว
| | TypeScript + Electron (ปัจจุบัน) | Rust (การเขียนใหม่) |
| ---------------------- | --------------------------------------------- | -------------------------------------------------------------------- |
| **Desktop runtime** | Electron — รวม Chromium + Node.js | หน้าต่างแบบ native (`winit` + GPU Skia) ไม่มี browser engine |
| **ขนาดบน Desktop** | Chromium runtime เต็มรูปแบบต่อการติดตั้ง | ไฟล์ binary เดียวที่พร้อมใช้งาน — **55.5 MB** |
| **ขนาด payload บนเว็บ** | JS + WASM bundle | **8.2 MB** wasm / **2.18 MB** gzip บนเครือข่าย |
| **การ Render** | CanvasKit/Skia บนเว็บ | Skia backend เดียวที่เร่งด้วย GPU บน **ทุก** เป้าหมาย |
| **หน่วยความจำ** | JavaScript GC หยุดชั่วคราว | ไม่มี GC — Rust ownership latency คาดเดาได้ |
| **Codebase** | Web stack + Electron + Zig NAPI agent | Rust workspace เดียว: editor · CLI · MCP · AI · codegen · Figma · Git |
| **เป้าหมาย** | Web + desktop สอง stack แยกกัน | Desktop (macOS/Win/Linux) · mobile (iOS/Android) · browser — one core |
**ผลการวัดที่ได้จริง**
- **ขนาดเล็กมาก** — แอปเดสก์ท็อปทั้งหมดเป็น binary แบบ native เดียวขนาด **55.5 MB** แทนที่จะเป็น browser engine รวมกับ Node runtime เว็บบิลด์มีขนาด **8.2 MB** raw / **2.18 MB** gzip หลังจากแยก icon catalog (48% บนเครือข่าย)
- **รองรับเอกสารขนาดใหญ่** — canvas ที่มี **10,000-node** (nested auto-layout สี่ระดับ) เขียน อ่าน และ snapshot layout **โดยไม่มี panic และ ~0% idle CPU**; การ snapshot layout ทั้งหมด 10k node คืนค่าใน **~0.68 s**
- **การโต้ตอบที่รวดเร็ว** — pan/zoom ไม่ต้อง re-serialize เอกสารทุก frame อีกต่อไป (การแก้ไข hot-path เพียงครั้งเดียวลด CPU ของ wheel-zoom จาก **~69% เหลือ ~0%**); การลากแก้ไข scene แบบ incremental การวัดตัวอักษรถูก cache และการวาดซ้ำรวมเป็นหนึ่งต่อ frame
- **Core เดียว ทุกหน้าจอ** — editor state และ render backend เดียวกันคอมไพล์ไปยัง native desktop, mobile และ browser ผ่าน WASM — ไม่ต้องคงการ implement แบบคู่ขนานให้ตรงกัน
- **GPU Skia ทุกที่** — native render ผ่าน `skia-safe` บน GL context; browser render ผ่าน CanvasKit บน WebGL2 — โค้ดการวาดเดียวกัน ผลลัพธ์เดียวกัน
- **Accessibility แบบ native** — AccessKit บน macOS, Windows และ Linux พร้อม DOM mirror บนเว็บ แทนที่จะพึ่งพา a11y tree ของ browser
- **Workspace ที่ตรวจสอบ type เดียว** — MCP host, CLI, AI providers, code generation, Figma import และ Git integration ทั้งหมดอยู่ใน Rust workspace เดียว พร้อม `cargo-deny` ตรวจสอบ supply-chain ใน CI
> **สถานะ:** Rust shell อยู่ระหว่างการพัฒนาอย่างต่อเนื่อง (ดู Roadmap ด้านล่าง) จนกว่าจะถึง feature parity สำหรับ `v0.8.0` ไฟล์ที่ดาวน์โหลดได้ข้างต้นคือบิลด์ TypeScript + Electron
## โครงสร้างโปรเจกต์
```text

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # stdin'den pipe ile besle
| **Çalışma Ortamı** | Bun · Vite 7 |
| **Dosya Formatı** | `.op` — JSON tabanlı, insan tarafından okunabilir, Git dostu |
## Neden Rust
OpenPencil, sıfırdan **Rust** ile yeniden yazılıyor ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). TypeScript + Electron derlemesi bugün dağıtılan sürümdür; Rust yeniden yazımı ise bir sonraki adımdır — tek bir doğal çekirdek: çok daha küçük, çok daha hızlı ve tek bir kod tabanından daha fazla platformda çalışır.
| | TypeScript + Electron (bugün) | Rust (yeniden yazım) |
| ------------------------ | ------------------------------------------------- | ------------------------------------------------------------------------ |
| **Masaüstü çalışma ortamı** | Electron — Chromium + Node.js içerir | Yerel pencere (`winit` + GPU Skia), tarayıcı motoru yok |
| **Masaüstü boyutu** | Kurulum başına tam Chromium çalışma ortamı | Tek, bağımsız ikili — **55.5 MB** |
| **Web yükü** | JS + WASM paketi | **8.2 MB** wasm / **2.18 MB** gzip ile transfer |
| **Görüntü işleme** | Web'de CanvasKit/Skia | **Her** hedefte tek GPU hızlandırmalı Skia arka ucu |
| **Bellek** | JavaScript GC duraklamaları | GC yok — Rust sahiplik modeli, öngörülebilir gecikme |
| **Kod tabanı** | Web yığını + Electron + Zig NAPI ajan | Tek Rust çalışma alanı: editör · CLI · MCP · AI · codegen · Figma · Git |
| **Hedefler** | Web + masaüstü, iki ayrı yığın | Masaüstü (macOS/Win/Linux) · mobil (iOS/Android) · tarayıcı — tek çekirdek |
**Ölçülen iyileştirmeler**
- **Küçük boyut** — tüm masaüstü uygulaması, paketlenmiş bir tarayıcı motoru ve Node çalışma ortamı yerine tek bir **55.5 MB** yerel ikili dosyasıdır. Web derlemesi, simge kataloğu bölümlendirmesinin ardından ham **8.2 MB** / **2.18 MB** gzip boyutuna ulaşır (transfer üzerinde 48%).
- **Büyük belgelere ölçeklenir** — dört seviye derinliğinde iç içe otomatik düzen içeren **10,000 düğümlü** canlı bir kanvas; **panik olmadan ve ~0% boşta CPU** kullanımıyla yazar, okur ve düzeni anlık görüntüler; tüm 10k düğümün tam düzen anlık görüntüsü **~0.68 saniyede** döner.
- **Hızlı etkileşim** — kaydırma/yakınlaştırma artık her karede belgeyi yeniden serileştirmiyor (tek bir sıcak yol düzeltmesiyle tekerlek yakınlaştırma CPU kullanımı **~69%'dan ~0%'a** düştü); sürükleme işlemleri sahneyi artımlı olarak günceller, metin ölçümü önbelleğe alınır ve yeniden boyamalar kare başına birleştirilir.
- **Tek çekirdek, her ekran** — aynı editör durumu ve aynı görüntü işleme arka ucu; yerel masaüstüne, mobil cihazlara ve WASM aracılığıyla tarayıcıya derlenir — senkronda tutulacak paralel yeniden uygulama yoktur.
- **Her yerde GPU Skia** — yerel, bir GL bağlamında `skia-safe` üzerinden; tarayıcı ise WebGL2 üzerinde CanvasKit aracılığıyla görüntü işler — aynı çizim kodu, aynı çıktı.
- **Yerel erişilebilirlik** — tarayıcının a11y ağacına güvenmek yerine macOS, Windows ve Linux'ta AccessKit; web'de ise bir DOM aynası.
- **Tek tip denetimli çalışma alanı** — MCP sunucusu, CLI, AI sağlayıcıları, kod üretimi, Figma içe aktarma ve Git entegrasyonu; CI'da `cargo-deny` tedarik zinciri denetimi ile tek bir Rust çalışma alanında bulunur.
> **Durum:** Rust kabuğu etkin geliştirme aşamasındadır (aşağıdaki Yol Haritası'na bakın). `v0.8.0` için özellik eşitliğine ulaşana kadar yukarıdaki indirilebilir dosyalar TypeScript + Electron derlemesidir.
## Proje Yapısı
```text

View file

@ -298,6 +298,32 @@ Hỗ trợ ba phương thức nhập liệu: chuỗi inline, `@filepath` (đọc
| **Runtime** | Bun · Vite 7 |
| **Định dạng tệp** | `.op` — dựa trên JSON, dễ đọc, thân thiện với Git |
## Tại sao chọn Rust
OpenPencil đang được viết lại từ đầu bằng **Rust** ([#129](https://github.com/ZSeven-W/openpencil/issues/129)). Bản dựng TypeScript + Electron là phiên bản đang phát hành hiện tại; bản viết lại bằng Rust là bước tiếp theo — một nhân gốc duy nhất nhỏ hơn và nhanh hơn đáng kể, chạy trên nhiều nền tảng hơn từ một codebase duy nhất.
| | TypeScript + Electron (hiện tại) | Rust (bản viết lại) |
| ---------------------------- | ---------------------------------------------- | -------------------------------------------------------------------- |
| **Runtime desktop** | Electron — đi kèm Chromium + Node.js | Cửa sổ gốc (`winit` + GPU Skia), không có browser engine |
| **Dung lượng desktop** | Toàn bộ runtime Chromium mỗi lần cài đặt | Tệp nhị phân độc lập duy nhất — **55.5 MB** |
| **Tải trọng web** | Bundle JS + WASM | **8.2 MB** wasm / **2.18 MB** gzip qua mạng |
| **Dựng hình** | CanvasKit/Skia trên web | Một backend Skia tăng tốc GPU trên **mọi** nền tảng |
| **Bộ nhớ** | Dừng do JavaScript GC | Không có GC — sở hữu Rust, độ trễ có thể dự đoán |
| **Codebase** | Web stack + Electron + Zig NAPI agent | Một Rust workspace: editor · CLI · MCP · AI · codegen · Figma · Git |
| **Nền tảng** | Web + desktop, hai stack riêng biệt | Desktop (macOS/Win/Linux) · mobile (iOS/Android) · browser — một nhân |
**Cải thiện đã đo lường**
- **Dung lượng nhỏ** — toàn bộ ứng dụng desktop là một tệp nhị phân gốc **55.5 MB** thay vì một browser engine đóng gói cùng với Node runtime. Bản dựng web là **8.2 MB** thô / **2.18 MB** gzip sau khi tách catalog icon (48% qua mạng).
- **Mở rộng tốt với tài liệu lớn** — canvas trực tiếp với **10,000 node** (auto-layout lồng nhau, bốn cấp độ) ghi, đọc và snapshot layout **không có panic và ~0% CPU khi rỗi**; snapshot layout đầy đủ của toàn bộ 10k node trả về trong **~0.68 s**.
- **Tương tác nhanh** — pan/zoom không còn tuần tự hóa lại tài liệu mỗi frame (một bản sửa hot-path duy nhất giảm CPU zoom bằng bánh xe từ **~69% xuống ~0%**); kéo cập nhật cảnh gia tăng, đo lường văn bản được cache, và các lần vẽ lại gộp thành một lần mỗi frame.
- **Một nhân, mọi màn hình** — cùng trạng thái editor và cùng render backend biên dịch sang desktop gốc, mobile và browser qua WASM — không có các cài đặt lại song song cần đồng bộ.
- **GPU Skia ở khắp nơi** — gốc dựng hình qua `skia-safe` trên GL context; browser dựng hình qua CanvasKit trên WebGL2 — cùng mã vẽ, cùng đầu ra.
- **Trợ năng gốc** — AccessKit trên macOS, Windows và Linux, cộng với DOM mirror trên web, thay vì dựa vào cây a11y của browser.
- **Một workspace có kiểm tra kiểu** — MCP host, CLI, nhà cung cấp AI, tạo mã, nhập Figma và tích hợp Git đều nằm trong một Rust workspace duy nhất, với `cargo-deny` kiểm soát chuỗi cung ứng trong CI.
> **Trạng thái:** shell Rust đang được phát triển tích cực (xem Lộ trình bên dưới). Cho đến khi đạt tính năng tương đương cho `v0.8.0`, các bản tải xuống có thể cài đặt ở trên là bản dựng TypeScript + Electron.
## Cấu trúc dự án
```text

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # 從 stdin 管道輸入
| **執行環境** | Bun · Vite 7 |
| **檔案格式** | `.op` — 基於 JSON人類可讀對 Git 友好 |
## 為何選擇 Rust
OpenPencil 正以 **Rust** 從頭重寫([#129](https://github.com/ZSeven-W/openpencil/issues/129)。TypeScript + Electron 版本是目前發佈的產品Rust 重寫版本是下一步——一個原生核心,體積大幅縮小、速度更快,並能從單一程式碼庫支援更多平台。
| | TypeScript + Electron今日 | Rust重寫版 |
| --------------------- | ------------------------------------------------ | -------------------------------------------------------------------- |
| **桌面端執行環境** | Electron — 內建 Chromium + Node.js | 原生視窗(`winit` + GPU Skia無需瀏覽器引擎 |
| **桌面端安裝體積** | 每次安裝包含完整 Chromium 執行環境 | 單一自包含二進位檔 — **55.5 MB** |
| **Web 傳輸大小** | JS + WASM 套件 | **8.2 MB** wasm / **2.18 MB** gzip 傳輸 |
| **渲染** | Web 上的 CanvasKit/Skia | 在**所有**目標平台共用同一套 GPU 加速 Skia 後端 |
| **記憶體** | JavaScript GC 暫停 | 無 GC — Rust 所有權機制,延遲可預測 |
| **程式碼庫** | Web 技術棧 + Electron + Zig NAPI 智能體 | 單一 Rust workspace編輯器 · CLI · MCP · AI · 程式碼生成 · Figma · Git |
| **支援平台** | Web + 桌面端,兩套獨立技術棧 | 桌面端macOS/Win/Linux· 行動端iOS/Android· 瀏覽器 — 同一核心 |
**實測改善成果**
- **極小體積** — 整個桌面應用程式僅為一個 **55.5 MB** 原生二進位檔,而非打包瀏覽器引擎加上 Node 執行環境。Web 版本在拆分圖示目錄後為 **8.2 MB** 原始大小 / **2.18 MB** gzip傳輸減少 48%)。
- **可擴展至大型文件****10,000 個節點**的即時畫布(巢狀自動版面配置,四層深)可在**無 panic 且閒置 CPU 約 ~0%** 的情況下完成讀寫與版面快照;全部 10k 節點的完整版面快照約在 **~0.68 s** 內返回。
- **快速互動** — 縮放平移不再在每個影格重新序列化文件(單一熱路徑修正將滾輪縮放 CPU 佔用從 **~69% 降至 ~0%**);拖曳以增量方式更新場景、文字測量結果已快取,且每影格重繪次數合並為一次。
- **一個核心,全平台** — 相同的編輯器狀態與渲染後端,透過 WASM 編譯至原生桌面端、行動端和瀏覽器——無需維護多套平行實作。
- **GPU Skia 全平台統一** — 原生端透過 `skia-safe` 在 GL 上下文渲染;瀏覽器端透過 CanvasKit 在 WebGL2 上渲染——相同的繪圖程式碼,相同的輸出結果。
- **原生無障礙支援** — 在 macOS、Windows 和 Linux 使用 AccessKit在 Web 上使用 DOM 鏡像,而非依賴瀏覽器的 a11y 樹狀結構。
- **單一型別檢查 workspace** — MCP 宿主、CLI、AI 供應商、程式碼生成、Figma 匯入和 Git 整合全部位於單一 Rust workspace並由 CI 中的 `cargo-deny` 進行供應鏈管控。
> **狀態:** Rust shell 正在積極開發中(請見下方路線圖)。在達到 `v0.8.0` 的功能對等之前,上方提供的安裝下載仍為 TypeScript + Electron 版本。
## 專案結構
```text

View file

@ -298,6 +298,32 @@ cat design.dsl | op design - # 从 stdin 管道输入
| **运行时** | Bun · Vite 7 |
| **文件格式** | `.op` — 基于 JSON人类可读对 Git 友好 |
## 为什么选择 Rust
OpenPencil 正在从头用 **Rust** 重写([#129](https://github.com/ZSeven-W/openpencil/issues/129))。现阶段发布的安装包是 TypeScript + Electron 版本Rust 重写版本是下一步目标 — 一个体积更小、速度更快的原生核心,从单一代码库支持更多平台。
| | TypeScript + Electron当前 | Rust重写版 |
| ----------------- | ------------------------------------------ | ----------------------------------------------------------------------- |
| **桌面运行时** | Electron — 内置 Chromium + Node.js | 原生窗口(`winit` + GPU Skia无浏览器引擎 |
| **桌面体积** | 每次安装均含完整 Chromium 运行时 | 单一自包含二进制文件 — **55.5 MB** |
| **Web 包体积** | JS + WASM 包 | **8.2 MB** wasm / 传输 **2.18 MB** gzip |
| **渲染** | Web 端 CanvasKit/Skia | **所有**目标平台统一使用 GPU 加速 Skia 后端 |
| **内存** | JavaScript GC 暂停 | 无 GC — Rust 所有权,延迟可预期 |
| **代码库** | Web 技术栈 + Electron + Zig NAPI agent | 单一 Rust workspaceeditor · CLI · MCP · AI · codegen · Figma · Git |
| **目标平台** | Web + 桌面,两套独立技术栈 | 桌面macOS/Win/Linux· 移动端iOS/Android· 浏览器 — 共用同一核心 |
**可量化的性能提升**
- **极小体积** — 整个桌面应用是一个 **55.5 MB** 的原生二进制文件,而非捆绑浏览器引擎和 Node.js 运行时。拆分图标目录后Web 构建产物为 **8.2 MB** 原始 / **2.18 MB** gzip传输体积 48%)。
- **大文档扩展性****10,000-node** 实时画布(嵌套四层自动布局)在写入、读取和快照布局时**不崩溃、空闲 CPU 约为 ~0%**;对全部 10k 节点执行完整布局快照仅需 **~0.68 s**。
- **流畅交互** — 平移/缩放不再在每一帧都重新序列化文档(单个热路径修复将滚轮缩放 CPU 占用从 **~69% 降至 ~0%**);拖拽增量更新场景图,文本测量结果已缓存,重绘合并为每帧一次。
- **一套核心,全端覆盖** — 相同的编辑器状态和渲染后端,可编译为原生桌面、移动端,以及通过 WASM 运行的浏览器端 — 无需维护多套并行实现。
- **GPU Skia 全覆盖** — 原生端通过 `skia-safe` 在 GL 上下文上渲染;浏览器端通过 CanvasKit 在 WebGL2 上渲染 — 同一套绘图代码,同一套输出结果。
- **原生无障碍** — macOS、Windows 和 Linux 上通过 AccessKit 实现Web 端通过 DOM 镜像实现,而非依赖浏览器自身的无障碍树。
- **单一类型检查工作区** — MCP 宿主、CLI、AI 提供商、代码生成、Figma 导入和 Git 集成全部位于同一个 Rust workspace并在 CI 中通过 `cargo-deny` 进行供应链管控。
> **状态:** Rust shell 正在积极开发中(参见下方路线图)。在其达到 `v0.8.0` 功能对等之前,上方提供的可安装下载包为 TypeScript + Electron 版本。
## 项目结构
```text