Skip to content

Pingomoteur de rendu canvas

Cœur Rust/WASM + couche TypeScript + backend interchangeable. Conçu pour l'interaction haute performance, le défilement virtuel natif et l'édition de texte dans le canvas.

PingoPingo

Démarrer en 30 secondes

sh
pnpm add @dopejs/pingo
ts
import { createElement, createHostedCanvasRoot } from "@dopejs/pingo";

const root = await createHostedCanvasRoot(document.querySelector("canvas")!);

root.render(
  createElement("virtualList", {
    width: 480,
    height: 640,
    itemCount: 1_000_000,
    estimatedItemHeight: 32,
    renderItem: (index) => createElement("text", { value: `Ligne ${index}` }),
  }),
);

Le million de lignes n'est jamais matérialisé côté TypeScript et le défilement ne rappelle pas l'arbre de composants : le calcul de la fenêtre et le remplissage se font dans le Core.

Ce qu'il ne fait pas

doper est un moteur de rendu, pas un navigateur. Il ne traite pas le SSR ni le premier rendu HTML, la compatibilité CSS générale (modèle de boîte, cascade, sélecteurs), les couches d'adaptation mini-applications ou natif, ni la sémantique de texte riche métier (collaboration, formules, commandes Markdown).

En revanche le moteur possède bel et bien le curseur, la sélection, l'IME, le presse-papiers, l'annulation/rétablissement et les primitives de texte éditable. Rien de tout cela n'est renvoyé à l'application pour être bricolé avec des contrôles DOM.

État actuel

v0.1.0. Tous les jalons d'ingénierie P0–M5 sont terminés et la chaîne automatique pnpm m5:check passe intégralement.

Les performances sur appareils réels, les IME réels et la matrice de lecteurs d'écran relèvent de la qualification de plateforme et sont suivis séparément. La navigation visuelle bidi et l'activation par défaut du backend WebGPU sont des reports documentés.

Langue des documents d'ingénierie

La conception technique, le plan de mise en œuvre et les ADR n'existent aujourd'hui qu'en chinois simplifié ; toutes les langues pointent vers le même document.

Publié sous licence MIT