VGPU : un seul WebGPU pour le canvas, Node et les agents
⏱️ Temps de lecture estimé : 4 minutes
📌 VGPU est une bibliothèque WebGPU TypeScript qui pousse le même code dans trois directions : un canvas du navigateur, un rendu headless sur Node.js et une suite de tests où le GPU n’existe pas. Une seule API pour trois cibles, et un outillage de documentation dès le départ pensé pour les agents de code.
Concrètement, on commence par init(). La fonction renvoie un unique contexte Gpu, et toutes les autres (draw, effect, frame, surface, target) le prennent en premier argument. Aucun état global caché. Un rendu se décrit de façon explicite : frame(gpu, (f) => f.pass(target, effect)). Les passes, les clears et les dessins sont des appels, pas l’état implicite d’un scene-graph.
Le point le plus intéressant se joue côté shaders. Les fichiers .wgsl s’importent et s’exportent comme des modules TypeScript. @vgpu/wgsl-std fournit hash, bruit, couleurs et échantillonnage en exports nommés, et n’importe quel .wgsl peut exporter ses propres fn, struct ou const pour un autre shader. Une réflexion typée résout les imports au moment du build et garde les bindings, les types et les layouts cohérents — sans déclarations manuelles à maintenir, ni étape de codegen. On découpe du WGSL comme on découpe du code hôte, ce qui change réellement la façon d’organiser un projet de rendu.
Changer de cible se joue sur le choix du sous-package, pas sur une réécriture. vgpu/node s’appuie sur Dawn pour rendre headless et lire des pixels dans un fichier ou un test. vgpu/mock remplace tout par un adaptateur déterministe, donc la même suite tourne sur un runner sans GPU. Côté volume, les déclarations inutilisées sont élaguées avant minification et un effet plein écran complet pèse 25 Ko gzippés — un budget vérifié en CI.
L’outillage pour agents constitue la moitié du produit. npx vgpu docs parcourt hors ligne la documentation embarquée dans le package. npx vgpu examples search fouille la galerie et pull en copie la source complète sans cloner le dépôt ; le code récupéré n’est jamais exécuté. npx vgpu check shader.wgsl valide un shader et sort sa réflexion en JSON avec des codes de sortie adaptés à la CI. npx vgpu doctor rend réellement une image pour confirmer que la machine sait faire du headless. Enfin, un endpoint MCP public en lecture seule est exposé sur vgpu.sh, complété par un agents.md et un llms.txt.
La galerie montre ce que la bibliothèque encaisse : une atmosphère et des nuages volumétriques calculés sur GPU, un océan par FFT, un fluide interactif au doigt, un trou noir raymarché, 125 000 cubes instanciés, et des démos ONNX Web comme la détection de profondeur ou le suivi des mains. Tout cela reste lisible comme source depuis la ligne de commande. Un mot de prudence : la voie WGSL vers Metal (paquet Swift autonome) est annoncée mais son outillage complet n’est pas encore publié, et le rendu headless suppose d’installer le prébuild Dawn — vgpu doctor diagnostique l’environnement.
Mon opinion : les imports WGSL typés sont la fonction qui m’arrête. WebGPU coûte cher en bruit entre le shader, les bindings et le code hôte ; traiter le module WGSL comme un module TypeScript attaque ce coût à la source, au lieu d’empiler une couche d’abstraction de plus. Le reste — CLI, MCP, mock déterministe — est la conséquence logique de ce choix. Le projet est sous licence MIT, porté par Vercel Labs, et vit sur une branche canary : à suivre de près.
- 🖥️ Le même shader pour le canvas, le headless et les tests
- 🧩 Les fichiers
.wgsls’importent comme des modules TypeScript - ✅
npx vgpu checkvalide un shader et sort un JSON exploitable en CI - 🧪
vgpu/mockremplace le GPU par un adaptateur déterministe sans aucune écriture - 🤖 Un endpoint MCP en lecture seule pour les agents
Sources





