Skip to content

Pingocanvas レンダリングエンジン

Rust/WASM コア + TypeScript シェル + 差し替え可能なバックエンド。高性能なインタラクション、ネイティブな仮想スクロール、canvas 内テキスト編集のために設計。

PingoPingo

30 秒で始める

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

100 万行が Shell 側で実体化されることはなく、スクロール中にコンポーネントツリーが呼ばれることもありません。ウィンドウ計算も補完も Core 内で完結します。

やらないこと

doper はレンダリングエンジンであり、ブラウザではありません。SSR/HTML の初期表示、汎用的な CSS 互換 (ボックスモデル、カスケード、セレクタ)、ミニプログラムやネイティブのアダプタ層、業務レベルのリッチ テキスト意味論(共同編集、数式、Markdown コマンド)は対象外です。

一方でキャレット、選択、IME、クリップボード、取り消し/やり直し、編集可能テキストのプリミティブは エンジンが所有します。これらを DOM コントロールの寄せ集めとして業務側へ押し戻すことはありません。

現在の状態

v0.1.0。P0–M5 のエンジニアリングマイルストーンをすべて完了し、pnpm m5:check の全自動ゲートが通過しています。

実機性能、実際の IME、スクリーンリーダーのマトリクスはプラットフォーム認定として別途追跡します。 bidi の視覚的キャレット移動と WebGPU バックエンドの既定有効化は記録済みの先送り項目です。

エンジニアリング文書の言語

技術設計、実装計画、ADR は現在のところ簡体字中国語のみで、すべての言語から同じ文書にリンクしています。

MIT ライセンスで公開