ADR-0002 — SvelteKit + TypeScript pour le frontend

ADR-0002 — SvelteKit + TypeScript pour le frontend

  • Statut : Accepted
  • Date : 2026-05-12
  • Décideurs : Thibault, Cowork
  • Contexte : Sprint S1

Contexte

Tauri 2 ne contraint pas le frontend : n’importe quel framework web peut y être embarqué. Le choix doit optimiser : taille du bundle final, fluidité de la dataviz, accessibilité, et productivité solo sur 12 semaines.

Options envisagées

A — React + TanStack

  • ✅ Écosystème massif, recrutable.
  • ❌ Runtime ~45 Ko gzip minimum, plus lourd que les alternatives.
  • ❌ Virtual DOM non optimal pour dataviz haute fréquence.

B — SolidJS

  • ✅ Signaux fins, performance brute.
  • ✅ Bundle minuscule.
  • ❌ Écosystème plus jeune, moins de ressources d’apprentissage.
  • ❌ Moins d’intégrations dataviz prêtes à l’emploi.

C — Vue 3

  • ✅ DX agréable, écosystème mature.
  • ❌ Runtime plus gros que Svelte.
  • ❌ Pas un gain net face à Svelte pour ce projet.

D — SvelteKit + TypeScript (retenu)

  • ✅ Compilation à la build → quasi pas de runtime.
  • ✅ Bundle final ultra-léger (cohérence frugale).
  • ✅ Réactivité naturelle, syntaxe minimaliste.
  • ✅ Excellent avec Observable Plot / D3.
  • ✅ Stores Svelte typés, support TS premier rang.
  • ❌ Communauté plus petite que React.
  • ❌ SvelteKit côté SPA (sans SSR) est le mode d’emploi ici, certains patterns à adapter.

Décision

SvelteKit 2 + TypeScript strict en mode SPA, embarqué dans Tauri.

Conséquences

Positives :

  • Bundle ≤ 200 Ko gzip réaliste.
  • Dataviz fluide même sur appareils modestes.
  • Productivité solo (moins de boilerplate).

Négatives :

  • Moins de libs UI prêtes (compensé par Skeleton CSS custom).
  • Recrutement futur moins large.

Conventions associées

  • Pas de framework UI lourd (pas de Material-UI, etc.). CSS custom + variables.
  • Stores typés Svelte 5 (runes) si la version est stable au démarrage S1.
  • Composants en kebab-case dossier, PascalCase fichier.
  • Tests : Vitest unit + Playwright e2e.

Liens

  • ADR-0001, ADR-0008.
  • CDC §7.1.