Pourquoi comparer ? OpenPencil existe parce que les plateformes de design fermées contrôlent ce qui est possible. Comprendre les différences architecturales montre ce qu'une alternative ouverte et local-first peut faire différemment.
::: info Renderer WASM de Penpot
Penpot 2.x inclut un renderer Rust/Skia WASM (`render-wasm/v1`) activable via les flags du serveur ou le paramètre URL `?wasm=true`. Le renderer SVG reste le défaut. Cette page couvre les deux.
**Minimum 5+ services.** PostgreSQL, Redis (Valkey), MinIO, un backend JVM, un exporteur Node.js (Chromium headless), plus le frontend ClojureScript.
### Verdict : Architecture
L'architecture monoprocessus d'Open Pencil élimine : la latence réseau, l'overhead de sérialisation aux frontières de services, la complexité d'orchestration de conteneurs et l'overhead de requêtes base de données.
## 3. Pipeline de rendu
### Open Pencil : TS → CanvasKit WASM (direct)
```typescript
renderSceneToCanvas(canvas, graph, pageId) {
this.fillPaint.setColor(...)
canvas.drawRRect(rrect, this.fillPaint)
}
```
- **1 franchissement de frontière :** TS → WASM (CanvasKit)
- Le graphe de scène vit dans le heap JS — pas de sérialisation pour le rendu
→ décomposer en primitives + empaqueter en binaire en mémoire linéaire WASM
→ Rust WASM (via Emscripten C FFI)
→ skia-safe (bindings Rust Skia)
→ Skia (WebGL)
```
Quand désactivé (défaut), les formes sont rendues comme un arbre DOM SVG. Quand activé, système de rendu par tuiles avec 11 surfaces et cache de 1024 entrées.
- Données réparties dans `common/` (49 600 LOC de .cljc)
- Validation de schéma au runtime (Malli)
- Les données doivent traverser la frontière CLJS→Rust pour le rendu
### Verdict : Modèle de données
Open Pencil réutilise le schéma éprouvé de Figma directement en TypeScript — zéro traduction. Penpot maintient son propre système de types à travers trois langages.
## 5. Moteur de layout
### Open Pencil : Yoga WASM (314 LOC)
```typescript
import Yoga from 'yoga-layout'
const root = Yoga.Node.create()
root.setFlexDirection(FlexDirection.Row)
root.calculateLayout()
```
314 lignes au total. Synchrone, dans le processus.
### Penpot : Double implémentation
Penpot maintient **deux moteurs de layout indépendants** (CLJS et Rust) qui doivent produire des résultats identiques. ~3 000+ LOC de code layout personnalisé dupliqué.
### Verdict : Layout
Open Pencil délègue à Yoga (utilisé par React Native sur des milliards d'appareils) en 314 lignes.
## 6. Format de fichier et compatibilité Figma
### Open Pencil
- **Format binaire Kiwi natif** — même sérialisation que Figma
- Import direct `.fig`, collage depuis le presse-papiers Figma
- Compatible avec le protocole multiplayer de Figma
### Penpot
- **Archive ZIP** (`.penpot`) avec manifestes JSON et assets binaires
- Pas d'import natif `.fig`
- Trois versions de format avec système de migration
### Verdict : Format de fichier
Open Pencil a un avantage significatif — il peut lire les fichiers Figma nativement et coller les données du presse-papiers Figma.
110 lignes. Closures forward/inverse avec état minimal.
### Penpot
Gestion d'état via Potok (bibliothèque Redux-like pour atomes ClojureScript). Undo stocke des vecteurs de changements inverses (max 50 entrées), avec auto-expiration après 20 secondes.
## 8. Expérience développeur
| Métrique | Open Pencil | Penpot |
|----------|-------------|--------|
| Setup dev | `bun install && bun dev` | Docker Compose + JVM + Node + Rust |
| Rechargement à chaud | Vite HMR (~50ms) | shadow-cljs (secondes) |
OpenPencil inclut une [commande `eval`](/programmable/cli/scripting) offrant une API Plugin compatible Figma pour le scripting headless. De plus, 90 outils IA sont disponibles via le chat intégré, le serveur MCP (stdio + HTTP) et le CLI. Penpot a un système de plugins avec exécution sandboxée mais pas d'API de scripting headless ni d'intégration MCP.
Open Pencil est architecturalement plus léger — un renderer CanvasKit monoprocessus en ~26K LOC TypeScript, compatible Figma par conception. Penpot est une plateforme full-stack avec ~299K LOC. Open Pencil a le scripting headless, **90 outils AI/MCP**, export SVG et une app desktop native.