diff --git a/README.de.md b/README.de.md index 73b32fc73..96eee0db5 100644 --- a/README.de.md +++ b/README.de.md @@ -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 diff --git a/README.es.md b/README.es.md index aa2f08114..fca9f6483 100644 --- a/README.es.md +++ b/README.es.md @@ -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 diff --git a/README.fr.md b/README.fr.md index 5ba8e5cb3..88dc137b5 100644 --- a/README.fr.md +++ b/README.fr.md @@ -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 diff --git a/README.hi.md b/README.hi.md index eb9c72f07..418d162ab 100644 --- a/README.hi.md +++ b/README.hi.md @@ -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 diff --git a/README.id.md b/README.id.md index c9d47d71e..e24c81363 100644 --- a/README.id.md +++ b/README.id.md @@ -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 diff --git a/README.ja.md b/README.ja.md index 427e33743..d5ec6df17 100644 --- a/README.ja.md +++ b/README.ja.md @@ -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 diff --git a/README.ko.md b/README.ko.md index cce65ce53..cebf18d1c 100644 --- a/README.ko.md +++ b/README.ko.md @@ -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 diff --git a/README.md b/README.md index e9d6a83e3..bc7beaaa1 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/README.pt.md b/README.pt.md index 405d0ca3b..3ff91bdf4 100644 --- a/README.pt.md +++ b/README.pt.md @@ -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 diff --git a/README.ru.md b/README.ru.md index 59373bd96..73ea5e29d 100644 --- a/README.ru.md +++ b/README.ru.md @@ -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 diff --git a/README.th.md b/README.th.md index 82c04e277..94055c1c6 100644 --- a/README.th.md +++ b/README.th.md @@ -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 diff --git a/README.tr.md b/README.tr.md index 081f0c96c..ea297255b 100644 --- a/README.tr.md +++ b/README.tr.md @@ -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 diff --git a/README.vi.md b/README.vi.md index 0c8fb12b1..2f1669b24 100644 --- a/README.vi.md +++ b/README.vi.md @@ -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 diff --git a/README.zh-TW.md b/README.zh-TW.md index a0274748f..e2cb2bddd 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -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 diff --git a/README.zh.md b/README.zh.md index b0f7ed19f..a96429162 100644 --- a/README.zh.md +++ b/README.zh.md @@ -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 workspace:editor · 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