Skip to content

Stack technologiczny

Główne technologie

WarstwaTechnologiaDlaczego
RenderowanieSkia CanvasKit WASMTen sam silnik co Figma — sprawdzona wydajność, akceleracja GPU, idealny piksel
Framework UIVue 3 + VueUseReaktywne API kompozycji, doskonałe wsparcie TypeScript
KomponentyReka UIBezgłowe, dostępne prymitywy UI (drzewo, suwak, itp.)
StylowanieTailwind CSS 4Utility-first, szybka iteracja, ciemny motyw
LayoutYoga WASMSilnik CSS flexbox od Mety, sprawdzony w React Native
Format plikuKiwi binarny + ZstdWłasny format Figmy — kompaktowy, szybkie parsowanie, kompatybilny z .fig
WspółpracaTrystero + YjsP2P WebRTC przez sygnalizację MQTT, sync CRDT, persystencja y-indexeddb
KolorculoriKonwersje przestrzeni kolorów (HSV, RGB, hex)
AI/MCPMCP SDK + Hono90+ narzędzi dla kodowania AI, transporty stdio + HTTP
JSX TransformSucrase201 KB JSX → JS, synchroniczny, kompatybilny z przeglądarką
Zdarzeniananoevents108 bajtów, typowany emitter zdarzeń dla mutacji SceneGraph
JSX TransformSucrase201 KB JSX → JS, synchroniczny, kompatybilny z przeglądarką
Zdarzeniananoevents108 bajtów, typowany emitter zdarzeń dla mutacji SceneGraph
JSX TransformSucraseLightweight (201 KB) JSX → JS, synchronous, browser-compatible
Eventsnanoevents108 bytes, typed event emitter for SceneGraph mutations
DesktopTauri v2~5 MB natywna aplikacja (vs ~100 MB Electrona), backend Rust
BuildVite 7Szybki HMR, natywne moduły ES
TestowaniePlaywright + bun:testRegresja wizualna (E2E) + szybkie testy jednostkowe
LintingoxlintOparty na Rust, rzędy wielkości szybszy niż ESLint
FormatowanieoxfmtFormater oparty na Rust
Weryfikacja typówtypescript-go (tsgo)Natywna implementacja w Go sprawdzania typów TypeScript

Główne zależności

json
{
  "canvaskit-wasm": "^0.40.0",
  "vue": "^3.5.29",
  "yoga-layout": "npm:@open-pencil/yoga-layout@3.3.0-grid.2",
  "nanoevents": "^9.1.0",
  "sucrase": "^3.35.1",
  "reka-ui": "^2.8.2",
  "tailwindcss": "^4.2.1",
  "culori": "^4.0.2",
  "fzstd": "^0.1.1",
  "fflate": "^0.8.2",
  "trystero": "^0.20.0",
  "yjs": "^13.6.24",
  "y-indexeddb": "^9.0.12"
}

Dlaczego nie...

Dlaczego nie renderowanie SVG?

SVG jest wolny dla złożonych dokumentów. Każdy węzeł to element DOM — 10 000 węzłów oznacza 10 000 elementów DOM z narzutem layoutu, rysowania i kompozycji. CanvasKit rysuje wszystko na jednej powierzchni GPU.

Dlaczego nie Electron (jak Figma desktop)?

Tauri v2 używa systemowego webview (~5 MB) zamiast pakowania Chromium (~100 MB). Backend Rust zapewnia natywną wydajność dla I/O plików i integracji systemowej.

Dlaczego nie React?

Projekt migrował z Reacta do Vue 3 na wczesnym etapie. System reaktywności Vue i composable VueUse okazały się bardziej ergonomiczne.

Dlaczego nie własny silnik layoutu?

Yoga jest utrzymywana przez Metę, przetestowana na miliardach urządzeń React Native i implementuje specyfikację CSS flexbox.

Planowane technologie

TechnologiaCelFaza
CSS Grid w YogaAuto layout oparty na siatce✅ Obsługiwane przez fork Yoga (@open-pencil/yoga-layout)

Released under the MIT License.