Skip to content

Pingomotor de renderizado canvas

Núcleo Rust/WASM + capa TypeScript + backend intercambiable. Diseñado para interacción de alto rendimiento, scroll virtual nativo y edición de texto dentro del canvas.

PingoPingo

Empezar en 30 segundos

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: `Fila ${index}` }),
  }),
);

El millón de filas nunca se materializa en la capa TypeScript y el scroll no vuelve al árbol de componentes: el cálculo de la ventana y el relleno ocurren dentro del Core.

Lo que no hace

doper es un motor de renderizado, no un navegador. No cubre SSR ni primer pintado en HTML, compatibilidad general con CSS (modelo de caja, cascada, selectores), capas de adaptación a mini-apps o nativo, ni semántica de texto enriquecido a nivel de producto (colaboración, fórmulas, comandos Markdown).

En cambio el motor sí es dueño del cursor, la selección, el IME, el portapapeles, deshacer/rehacer y las primitivas de texto editable. Nada de eso se devuelve a la aplicación para que lo improvise con controles DOM.

Estado actual

v0.1.0. Todos los hitos de ingeniería P0–M5 están completos y la cadena automática pnpm m5:check pasa por completo.

El rendimiento en dispositivos reales, los IME reales y la matriz de lectores de pantalla se registran aparte como cualificación de plataforma. La navegación visual bidi y activar el backend WebGPU por defecto son aplazamientos documentados.

Idioma de los documentos de ingeniería

El diseño técnico, el plan de implementación y los ADR sólo existen hoy en chino simplificado; todos los idiomas enlazan al mismo documento.

Publicado bajo la licencia MIT