@flighthq/sdk

中文文档
0.6.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 8740

单一切入点再出口所有软件包

中文使用文档
文档目录10 节
  1. 试试看
  2. 开始
  3. 动画
  4. 互动
  5. 声音
  6. 渲染模型
  7. 平台范围
  8. 工程信心
  9. 实例
  10. 仓库

飞行

CI npm

Flight是用于构建交互式应用程序的模块化TypeScript SDK——设计由AI编码代理以及人阅读并编写. 其超过150个可树可摇动的包跨出2D和3D图形,物理,动画,媒体,输入,资产格式,应用程序生命周期,以及桌面/移动平台API.

API是蜂窝:明确通过简单数据,自我识别姓名,明确所有权,输入时没有工作. 一个函数可以孤立地理解;一个应用程序可以导入一个能力而无需继承一个引擎. 同样的特性使密码库可以复制给物剂、可移植到编译目标、生产建筑小.

一次构建一个场景并选择一个渲染器——Canvas 2D,DOM,WebGL 2或WebGPU——只注册它所使用的执行. 将同样的小原始物编成游戏,可视化,媒体体验,桌面工具,或移动应用程序.

试试看

看,飞行会自己变的 现场介绍浏览 示例库比较 现有框架的端口,或在当地运行画廊:

npm install
npm run examples

开始

npm install @flighthq/sdk

创建显示对象场景,注册您使用的渲染器类型,更新渲染图,然后绘制:

import { webCanvasRenderSurfaceCreator } from '@flighthq/host-web';
import {
  addNodeChild,
  beginCanvasRenderPass,
  createCanvasElement,
  createCanvasRenderState,
  createCanvasRenderSurface,
  createCanvasScreenRenderTarget,
  createCanvasTextureResolvers,
  createDisplayObject,
  createSprite,
  createTexture,
  canvasSpriteRenderer,
  endCanvasRenderPass,
  getCanvasRenderStateTextureResolvers,
  loadImageResourceFromUrl,
  prepareScene2DRender,
  registerCanvasImageTextureResolver,
  registerNodeRenderer,
  renderCanvasScene2D,
  scene2DCanvasPipeline,
  SpriteKind,
} from '@flighthq/sdk';

const pixelRatio = window.devicePixelRatio || 1;
const canvas = createCanvasElement(webCanvasRenderSurfaceCreator, 550, 400, pixelRatio);
document.body.appendChild(canvas);

// Where the frame lands is a render target; how it is drawn is the render state. They are separate
// values, joined for the duration of a pass.
const screen = createCanvasScreenRenderTarget(
  createCanvasRenderSurface(webCanvasRenderSurfaceCreator, canvas, {
    height: canvas.height / pixelRatio,
    pixelRatio,
    width: canvas.width / pixelRatio,
  }),
);
const state = createCanvasRenderState(
  scene2DCanvasPipeline,
  createCanvasTextureResolvers(webCanvasRenderSurfaceCreator),
  { sceneGraphSyncPolicy: 'requiresInvalidation' },
);
// The background is what the pass clears to — a per-pass colour in linear float RGBA, not a field the
// render state carries around.
const screenClear = { color: [0xee / 0xff, 0xdd / 0xff, 0xcc / 0xff, 1] } as const;

registerCanvasImageTextureResolver(getCanvasRenderStateTextureResolvers(state));
registerNodeRenderer(state, SpriteKind, canvasSpriteRenderer);

const root = createDisplayObject();
root.scaleX = pixelRatio;
root.scaleY = pixelRatio;

const sprite = createSprite();
const image = await loadImageResourceFromUrl('assets/wabbit_alpha.png');
sprite.data.texture = createTexture({ dimension: '2d', source: image });
addNodeChild(root, sprite);

function enterFrame(): void {
  if (prepareScene2DRender(state, root)) {
    const pass = beginCanvasRenderPass(state, screen, screenClear);
    renderCanvasScene2D(pass, root);
    endCanvasRenderPass(pass);
  }

  requestAnimationFrame(enterFrame);
}

enterFrame();

同一场景通过DOM,WebGL2或WebGPU,通过创建匹配的渲染状态并注册后端的渲染器——对场景图本身没有变化. 显示对象保持纯数据;后端工作仍然清晰.

动画

应用软件包提供请求-激活-帧回路,并有打入的更新并渲染出信号. 主机执行是明确的;在浏览器中,在启动应用程序时通过网页主机:

npm install @flighthq/host-web
import { webHost } from '@flighthq/host-web';
import {
  connectSignal,
  createAppLoop,
  createTween,
  createTweenManager,
  easeOutElastic,
  invalidateNodeRender,
  startAppLoop,
  updateTweens,
} from '@flighthq/sdk';

const manager = createTweenManager();

const tween = createTween(manager, sprite, 1000, { x: 400, alpha: 0 }, { ease: easeOutElastic });
connectSignal(tween.onUpdate, () => invalidateNodeRender(sprite));

const app = createAppLoop();
connectSignal(app.onUpdate, (delta) => updateTweens(manager, delta));
connectSignal(app.onRender, () => {
  if (prepareScene2DRender(state, root)) {
    const pass = beginCanvasRenderPass(state, screen, screenClear);
    renderCanvasScene2D(pass, root);
    endCanvasRenderPass(pass);
  }
});

startAppLoop(webHost, app);

互动

任何场景节点的线起指针事件. 注册一次命中测试策略,然后创建一个交互管理器并将其连接到输入系统:

import {
  attachPointerInput,
  connectInputToInteraction,
  connectInteractionSignal,
  createInputManager,
  createInteractionManager,
  invalidateNodeRender,
  registerDefaultHitTests,
  setNodeHitTestEnabled,
} from '@flighthq/sdk';

registerDefaultHitTests();
setNodeHitTestEnabled(sprite, true);

const interaction = createInteractionManager(root);
const input = createInputManager();
attachPointerInput(input, canvas);
connectInputToInteraction(input, interaction, pixelRatio);

connectInteractionSignal(interaction, sprite, 'onPointerDown', () => {
  sprite.alpha = 0.5;
  invalidateNodeRender(sprite);
});
connectInteractionSignal(interaction, sprite, 'onPointerUp', () => {
  sprite.alpha = 1;
  invalidateNodeRender(sprite);
});

声音

用倒置格式装入音频资源, 然后播放 :

import { loadAudioResourceFromUrls, playAudioResource } from '@flighthq/sdk';

const audioContext = new AudioContext();
const sound = await loadAudioResourceFromUrls(audioContext, [{ url: 'assets/click.ogg' }, { url: 'assets/click.mp3' }]);

connectInteractionSignal(interaction, sprite, 'onPointerDown', () => {
  playAudioResource(audioContext, sound);
});

渲染模型

飞行将作者数据与后端工作分离:

  1. 从显示对象,图示,文本,形状,平面,微粒,或3D场景节点来构建一个图.
  2. 为 Canvas 2D, DOM, WebGL2 或 WebGPU 创建后端渲染状态.
  3. 仅记录渲染器和效果后端的场景需要.
  4. 执行明确的准备/更新通过.
  5. 通过选中的后端绘制 .

Canvas和DOM是轻量级主机-web路径. WebGL2 和 WebGPU 添加 GPU 渲染目标,缓存管,遮蔽/材料注册,后处理,剪接,遮蔽,速度,渲染缓存,2D分批,并用一个20-材料 Cook-Torrance PBR + Classic/NPR/debug 遮蔽库的3D前置渲染器.

平台范围

目前飞行跨度超过150个独立可导入,可公布的包. 可通过下列方式对公众API进行检查:

npm run api
npm run api -- --json

主要领域:

区域软件包
核心和数据types, (中文(简体) ), entity, (中文(简体) ), node, (中文(简体) ), signals, (中文(简体) ), math, (中文(简体) ), geometry, (中文(简体) ), color, (中文(简体) ), layout, (中文(简体) ), compression
2D 图形scene2d, (中文(简体) ), bitmap, (中文(简体) ), shape, (中文(简体) ), path, (中文(简体) ), clip, (中文(简体) ), text, (中文(简体) ), tilemap, (中文(简体) ), quadbatch
三维图形scene3d, (中文(简体) ), mesh, (中文(简体) ), materials, (中文(简体) ), shading, (中文(简体) ), lighting, (中文(简体) ), texture, (中文(简体) ), camera, (中文(简体) ), skeleton3d, (中文(简体) ), picking
渲染render, Canvas/DOM 场景渲染器,WebGL 2和WebGPU核心,以及2D/3D GPU渲染器
效果和成像adjustments, (中文(简体) ), effects, Canvas/WebGL/WebGPU 效果执行器, image, (中文(简体) ), image-codec, (中文(简体) ), capture
文本textlayout, (中文(简体) ), textshaper, (中文(简体) ), textsegment, (中文(简体) ), textbidi, (中文(简体) ), textinput, (中文(简体) ), glyphatlas, (中文(简体) ), bitmapfont, (中文(简体) ), bitmaptext, (中文(简体) ), text-markup
动画和模拟easing, (中文(简体) ), tween, (中文(简体) ), spring, (中文(简体) ), animation, (中文(简体) ), timeline, (中文(简体) ), movieclip, (中文(简体) ), spritesheet, (中文(简体) ), motionpath, (中文(简体) ), clock, (中文(简体) ), particles
游戏和互动input, (中文(简体) ), interaction, (中文(简体) ), collision, (中文(简体) ), physics2d, (中文(简体) ), spatial, (中文(简体) ), flow, (中文(简体) ), statechart, (中文(简体) ), snapshot
资源和格式图像、字体、地图集、平面图、粒子、SVG、SWF、glTF、OBJ/MTL、3DS、MD2/MD5、AWD2等的装入器和结构化进口商
申请和媒体app, (中文(简体) ), audio, (中文(简体) ), video, (中文(简体) ), media, (中文(简体) ), mediasession, (中文(简体) ), intl, (中文(简体) ), log, (中文(简体) ), debug
平台整合用于存储、联网、文件系统、剪贴板、对话框、通知、传感器、窗口、生命周期和其他操作系统/设备的网络首个API
本地主机明确 Host 电子、陶里和电容的值
工具采集和基线工具、交接烟雾/公平检查、合规装置、API/出口/包装/订单/可移动性门和捆绑规模的预算

所有软件包都在 @flighthq/。应用程序和实例通常从 @flighthq/sdk数字 :

import { addNodeChild, createBitmap, createShape } from '@flighthq/sdk';

库代码应该选择提供所需 API 的最小包根 :

import { createTween, updateTweens } from '@flighthq/tween';

平台 Host 价值观是明确的。 浏览器应用程序通过现成 webHost 或窄处 webHost* 值; Tauri 和 Capacitor 应用程序构造 tauriHost 或者说 capacitorHost 从他们注入的本地API。 在这些主机中,应用程序的API保持稳定.

工程信心

飞行是预放软件,所以信心来自每次改变背后的工程路径. 代码的更改通过两个单元测试道进行,一个完整的TypeScript构建,软件包和公-API验证,捆绑大小的预算,以及浏览器在DOM,Canvas,WebGL,和WebGPU之间的发烟和等价检查. 夜间运行增加了覆盖阈值并产生了API-地表检查.

main 是一个机器管理的有名有实的指针:它只推动其CI运行成功。 版本发布在以出处向 npm 发布完整包图之前, 验证精确标记的承诺通过 CI .

该储存库还将可靠性方面的关注保留在设计中:进口是无副作用的,特色家庭使用明确的登记簿,资源所有权和分配被命名,格式进口商报告结构化诊断,来源留在已检查的已汇编的可携带目标子集内,并且通过可互换的后端测试产出.

实例

画廊包括有重点的例子,包括形状、文字、互动、动画、瓷砖、颗粒、相撞、应用流程、音频/视频、文件格式加载,以及涵盖材料、取取取和取取火的三维场景。 在共享能力的地方,画廊允许您在支持的渲染器中切换相同的场景.

创建具体实例:

npm run build --workspace=examples/packages/shapes

运行一个特定的渲染器实例 Dev 服务器 :

npm run dev:canvas --workspace=examples/packages/shapes
npm run dev:dom --workspace=examples/packages/shapes
npm run dev:webgl --workspace=examples/packages/shapes
npm run dev:webgpu --workspace=examples/packages/scene3d

仓库

git clone https://github.com/flighthq/flight.git
cd flight
npm install
packages/      Workspace packages published as @flighthq/*
examples/      Standalone Vite example apps
conformance/   Import fixtures and structured conformance checks
tools/         Gallery, functional scenes, capture harness, and repo utilities
scripts/       Validation, API, coverage, ordering, size, and build scripts

有用的检查 :

npm run check              # package, type, API, export, portability, docs, and style gates
npm run test               # unit tests across all packages
npm run size               # gzip output size against committed budgets
npm run test:smoke         # fail on browser/runtime/render errors
npm run test:parity        # compare output across render backends
npm run test:regression    # compare output against committed fingerprints

版本与发布记录

@flighthq/sdk 共发布 428 个版本,首次发布于 2026/07/10;过去 12 个月发布了 428 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.6.0latest2026/11/115 天前
0.7.0-next.5213.ead804bnext2026/11/105 天前
0.7.0-edge.5213.ead804bedge2026/11/105 天前
0.5.1-edge.5211.71b571d2026/11/105 天前
0.5.1-next.5076.44cab462026/11/087 天前
0.5.1-edge.5076.44cab462026/11/087 天前

关于 @flighthq/sdk 的常见问题

@flighthq/sdk 是什么?

单一切入点再出口所有软件包

如何安装 @flighthq/sdk?

在项目目录运行 npm install @flighthq/sdk,或使用 pnpm add / yarn add / bun add。

@flighthq/sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@flighthq/sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@flighthq/sdk 可以商用吗?

@flighthq/sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@flighthq/sdk 的下载量有多少?

根据 npm 官方下载统计,@flighthq/sdk 在 2026/10/15 – 2026/11/13 这 30 天内被下载 8,740 次,日均约 291 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@flighthq/sdk 还在维护吗?

最新版本 0.6.0 发布于 2026/11/11(5 天前);至今共发布 428 个版本,其中过去 12 个月发布了 428 个;首次发布于 2026/07/10。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。