vgpu
面向 WebGPU 的 TypeScript 库:带类型的着色器导入、极简的 GPU 优先 API,同一份代码可在浏览器、无头 Node 以及测试套件中运行。
核心特性
带类型的 WGSL 导入
.wgsl 文件像 TypeScript 模块一样导入和导出,反射机制自动保持绑定名称、类型与布局正确,无需手写声明。
唯一的 Gpu 上下文
init() 返回统一句柄;每个入口点(draw、effect、frame、surface、target……)都以它为第一个参数,没有隐藏的全局状态。
为精简而设计
未使用的声明在压缩前被剪除,一个完整的全屏效果压缩后仅 25 KB(gzip),体积预算由 CI 强制把关。
默认多运行时
浏览器、无头 Node(vgpu/node,基于 Dawn)以及为测试和 CI 构建的确定性 mock(vgpu/mock)共用同一套公开 API。
显式帧
frame(gpu, (f) => f.pass(target, effect)) —— 通道、清屏与绘制都是显式调用,绝不存在隐式的场景图状态。
面向 Agent
文档、示例画廊与着色器校验均可通过 CLI 运行,vgpu.sh 还发布了供 LLM 消费的 agents.md 与 llms.txt。
快速开始
pnpm add vgpu
pnpm add -D @webgpu/typesimport { clock, init, effect, frameLoop, surface } from "vgpu";
import waveShader from "./wave.wgsl";
const gpu = await init();
const canvasSurface = surface(gpu, canvas, { dpr: [1, 2] });
const wave = effect(gpu, waveShader, { set: { speed: 2 } });
const time = clock(gpu);
frameLoop(gpu, (frame) => {
wave.set({ time: time.time });
frame.pass(canvasSurface, wave);
});init() 获取适配器与设备并返回唯一的 Gpu 上下文;其余入口点都以它为第一个参数。surface 将画布封装为渲染目标并保持尺寸同步,设备像素比限制在 1 到 2 之间。effect 将着色器编译为全屏效果,uniform 可通过 WGSL 名称经由 set() 寻址——写入立即生效。
Node 快速开始
同一套 API 可在无头环境下针对 Dawn 支撑的设备运行:
import { draw, frame, init, target } from "vgpu/node";
import triangleShader from "./triangle.wgsl";
const gpu = await init();
const colorTarget = target(gpu, { size: [256, 256], format: "rgba8unorm" });
const triangle = draw(gpu, { shader: triangleShader });
frame(gpu, (f) => f.pass(colorTarget, triangle));
const pixels = await colorTarget.read();
gpu.dispose();vgpu/mock 会为同一份代码换上确定性的软件适配器,因此测试永远不需要真实 GPU。
带类型导入的 WGSL 模块
@vgpu/wgsl-std 以具名导出提供可复用的声明(哈希、噪声、颜色、采样……),任何 .wgsl 文件都可以导出自己的 fn、struct 或 const:
// grain.wgsl
import { hash2 } from "@vgpu/wgsl-std/hash";
export fn grain(uv: vec2f, time: f32) -> f32 {
return hash2(uv * time).x;
}创意示例
以下示例均可从 CLI 拉取源码本地运行,完整列表见 npx vgpu examples search。
流体细胞
动态 Voronoi 镶嵌,发光边界随 time 游走。
无限回旋体
72 步 gyroid SDF 光线步进,菲涅尔边缘光,相机环绕。
电浆星云
5 层分形噪声域扭曲,暗底烧出橙色星云,点缀闪烁星点。

无头渲染
星云着色器经 vgpu/node 在 Dawn 下无头渲染的真实产物(bun scripts/render-examples.ts 生成)。
npx vgpu examples pull headless-png --out ./headless-png文档
完整文档托管于 vgpu.sh。先从入门指南开始,再阅读性能实践手册;交互式示例可在浏览器中运行。同样的指南与 API 参考也随包发布,可通过 CLI 完全离线运行:
npx vgpu docs cat getting-started.md
npx vgpu docs find effectAgent 资源
vgpu 既能由人操作,也能由编码 Agent 操作。示例画廊可从 CLI 检索:
npx vgpu examples search "raymarching"
npx vgpu examples pull <id> --out ./example支持 skill 的 Agent 可安装 vgpu 的轻量文档路由:
npx skills add vercel-labs/vgpu- Agent 就绪清单 —— Agent 应如何发现并使用 vgpu
- llms.txt 与 llms-full.txt —— 面向 LLM 的文档索引与完整导出
- 示例发现 API —— 无需令牌、只读,由 OpenAPI 描述
- MCP 指南 —— 将 Agent 接入公开只读端点,或运行本地 stdio
npx vgpu mcp
npx vgpu mcp --project-from-cwd包
这是一个 monorepo。公开入口是 vgpu,其余部分要么支撑它,要么独立发布。
| 包 | 说明 |
|---|---|
| vgpu | 公开主 API:init、draw、compute、effect、frame、bundle、target、uniforms,以及 scene 与 core 子路径。 |
| @vgpu/cli | vgpu 命令行二进制:文档、着色器 check、doctor,以及 Dawn/软件渲染器配置。 |
| @vgpu/core | vgpu/core 背后的底层 WebGPU 封装(Device、Buffer、Texture、绑定组)。 |
| @vgpu/wgsl | 在打包前将 .wgsl 文件转换为 JS 模块,并解析 WGSL 到 WGSL 的导入。 |
| @vgpu/wgsl-std | 标准 WGSL 工具模块(数学、颜色、采样、噪声、哈希……)。 |
| @vgpu/adapter-node | vgpu/node 使用的 Dawn 支撑适配器。 |
| @vgpu/adapter-mock | vgpu/mock 使用的确定性 mock 适配器。 |
| @vgpu/render | 位于主渲染表面之外、轻量的编辑/检查/工具/性能辅助模块。 |