{"_id":"@aperture-engine/app","_rev":"3-a88f1a9d7f8a3e9a208d50d04c723243","name":"@aperture-engine/app","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@aperture-engine/app","version":"0.1.0","keywords":["aperture","ecs","webgpu","game-engine","typescript","metaframework","headless"],"author":{"name":"Felix Zhang"},"license":"MIT","_id":"@aperture-engine/app@0.1.0","maintainers":[{"name":"felixtrz","email":"felixtrz96@gmail.com"}],"homepage":"https://github.com/felixtrz/aperture/tree/main/packages/app#readme","bugs":{"url":"https://github.com/felixtrz/aperture/issues"},"dist":{"shasum":"911581f7a9d766bbb1c191d609e7fc96b6ff4270","tarball":"https://registry.npmjs.org/@aperture-engine/app/-/app-0.1.0.tgz","fileCount":499,"integrity":"sha512-tJieV2nyrmfsrjS9Wrw9DpVzGTYuhQuplmnnnLmoS3fJd8xbujs/aVNwjv1kbfdUEtZnFHj959ecHjM3z7xfog==","signatures":[{"sig":"MEYCIQDSN1d8LlQ31kAWPccXWqDhaNgtPDkYaD4rT+49bzCZ+QIhAKRqS1h+o7yQOqMlwAktgK6MXbudth0Jk+6H74vx+21O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2820653},"main":"./dist/index.js","type":"module","_from":"file:aperture-engine-app-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./systems":{"types":"./dist/systems.d.ts","import":"./dist/systems.js"},"./advanced":{"types":"./dist/advanced.d.ts","import":"./dist/advanced.js"},"./commands":{"types":"./dist/commands.d.ts","import":"./dist/commands.js"},"./headless":{"types":"./dist/headless.d.ts","import":"./dist/headless.js"},"./diagnostics":{"types":"./dist/diagnostics.d.ts","import":"./dist/diagnostics.js"},"./entity-lookup":{"types":"./dist/entity-lookup.d.ts","import":"./dist/entity-lookup.js"}},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"felixtrz","email":"felixtrz96@gmail.com"},"_resolved":"/private/var/folders/xc/nttyc9pj3xngmbjsfbgdbddc0000gn/T/33968d0b427b2cb4e70edd40e35947a6/aperture-engine-app-0.1.0.tgz","_integrity":"sha512-tJieV2nyrmfsrjS9Wrw9DpVzGTYuhQuplmnnnLmoS3fJd8xbujs/aVNwjv1kbfdUEtZnFHj959ecHjM3z7xfog==","repository":{"url":"git+https://github.com/felixtrz/aperture.git","type":"git","directory":"packages/app"},"_npmVersion":"11.12.1","description":"Aperture metaframework app facade, config helpers, and worker-safe system authoring API.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","dependencies":{"elics":"^3.4.2","@preact/signals-core":"^1.8.0","@aperture-engine/audio":"^0.1.0","@aperture-engine/render":"^0.1.0","@aperture-engine/webgpu":"^0.1.0","@aperture-engine/physics":"^0.1.0","@aperture-engine/runtime":"^0.1.0","@aperture-engine/simulation":"^0.1.0","@aperture-engine/vite-plugin":"^0.1.0","@aperture-engine/physics-rapier":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/app_0.1.0_1782151611034_0.3222168263849179","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aperture-engine/app","version":"0.2.0","keywords":["aperture","ecs","webgpu","game-engine","typescript","metaframework","headless"],"author":{"name":"Felix Zhang"},"license":"MIT","_id":"@aperture-engine/app@0.2.0","maintainers":[{"name":"felixtrz","email":"felixtrz96@gmail.com"}],"homepage":"https://github.com/felixtrz/aperture/tree/main/packages/app#readme","bugs":{"url":"https://github.com/felixtrz/aperture/issues"},"dist":{"shasum":"a439cc5410d1600d938a1b712157fee0fd1df11e","tarball":"https://registry.npmjs.org/@aperture-engine/app/-/app-0.2.0.tgz","fileCount":499,"integrity":"sha512-jJIhMtTRpKQGBEuZsyYuVf5L6PHJNCYDgDiAR1NsPZNK/SYQ18gGRNwLVpQ6HcAvGVyxMVScHSZayJSuKnSswQ==","signatures":[{"sig":"MEQCIAhv90DLaOZ6H0AOHHSs/xn82CX3eRLVfDKMhqoypmmRAiB/6ds1eTG5zETmLUK2l4LiTExcIZ/ugcfjr7QUHoy1nQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2824490},"main":"./dist/index.js","type":"module","_from":"file:aperture-engine-app-0.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./systems":{"types":"./dist/systems.d.ts","import":"./dist/systems.js"},"./advanced":{"types":"./dist/advanced.d.ts","import":"./dist/advanced.js"},"./commands":{"types":"./dist/commands.d.ts","import":"./dist/commands.js"},"./headless":{"types":"./dist/headless.d.ts","import":"./dist/headless.js"},"./diagnostics":{"types":"./dist/diagnostics.d.ts","import":"./dist/diagnostics.js"},"./entity-lookup":{"types":"./dist/entity-lookup.d.ts","import":"./dist/entity-lookup.js"}},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"felixtrz","email":"felixtrz96@gmail.com"},"_resolved":"/private/var/folders/xc/nttyc9pj3xngmbjsfbgdbddc0000gn/T/822abbe2998bda321b0de1ec0385075e/aperture-engine-app-0.2.0.tgz","_integrity":"sha512-jJIhMtTRpKQGBEuZsyYuVf5L6PHJNCYDgDiAR1NsPZNK/SYQ18gGRNwLVpQ6HcAvGVyxMVScHSZayJSuKnSswQ==","repository":{"url":"git+https://github.com/felixtrz/aperture.git","type":"git","directory":"packages/app"},"_npmVersion":"11.12.1","description":"Aperture metaframework app facade, config helpers, and worker-safe system authoring API.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","dependencies":{"elics":"^3.4.2","@preact/signals-core":"^1.8.0","@aperture-engine/audio":"^0.2.0","@aperture-engine/render":"^0.2.0","@aperture-engine/webgpu":"^0.2.0","@aperture-engine/physics":"^0.2.0","@aperture-engine/runtime":"^0.2.0","@aperture-engine/simulation":"^0.2.0","@aperture-engine/vite-plugin":"^0.2.0","@aperture-engine/physics-rapier":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/app_0.2.0_1782246369880_0.8057904853869295","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aperture-engine/app","version":"0.3.0","description":"Aperture metaframework app facade, config helpers, and worker-safe system authoring API.","author":{"name":"Felix Zhang"},"repository":{"type":"git","url":"git+https://github.com/felixtrz/aperture.git","directory":"packages/app"},"homepage":"https://github.com/felixtrz/aperture/tree/main/packages/app#readme","bugs":{"url":"https://github.com/felixtrz/aperture/issues"},"keywords":["aperture","ecs","webgpu","game-engine","typescript","metaframework","headless"],"type":"module","license":"MIT","sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./systems":{"types":"./dist/systems.d.ts","import":"./dist/systems.js"},"./advanced":{"types":"./dist/advanced.d.ts","import":"./dist/advanced.js"},"./headless":{"types":"./dist/headless.d.ts","import":"./dist/headless.js"},"./headless-tools":{"types":"./dist/headless-tools.d.ts","import":"./dist/headless-tools.js"},"./input":{"types":"./dist/input.d.ts","import":"./dist/input.js"},"./entity-lookup":{"types":"./dist/entity-lookup.d.ts","import":"./dist/entity-lookup.js"},"./commands":{"types":"./dist/commands.d.ts","import":"./dist/commands.js"},"./diagnostics":{"types":"./dist/diagnostics.d.ts","import":"./dist/diagnostics.js"},"./features":{"types":"./dist/features.d.ts","import":"./dist/features.js"},"./asset-mirror":{"types":"./dist/asset-mirror.d.ts","import":"./dist/asset-mirror.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/index.d.ts","publishConfig":{"access":"public"},"dependencies":{"@preact/signals-core":"^1.8.0","elics":"^3.4.2","@aperture-engine/particles":"^0.3.0","@aperture-engine/physics":"^0.3.0","@aperture-engine/render":"^0.3.0","@aperture-engine/audio":"^0.3.0","@aperture-engine/physics-rapier":"^0.3.0","@aperture-engine/runtime":"^0.3.0","@aperture-engine/simulation":"^0.3.0","@aperture-engine/vite-plugin":"^0.3.0","@aperture-engine/webgpu":"^0.3.0"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json"},"_id":"@aperture-engine/app@0.3.0","_integrity":"sha512-m/i7Msrj3Hu+Uf65bEqjL2yUb3xKVCekAUe8IKCJ9RnjR04vqRpPLUzc6bZWBbRYQuwfk4ZDuYodv5PkeXRlrw==","_resolved":"/private/var/folders/xc/nttyc9pj3xngmbjsfbgdbddc0000gn/T/a41e8dc9a4dcd4f54bad166a5dec2e00/aperture-engine-app-0.3.0.tgz","_from":"file:aperture-engine-app-0.3.0.tgz","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-m/i7Msrj3Hu+Uf65bEqjL2yUb3xKVCekAUe8IKCJ9RnjR04vqRpPLUzc6bZWBbRYQuwfk4ZDuYodv5PkeXRlrw==","shasum":"c017ed7f0e231bce988a72c3099f204b437e37c8","tarball":"https://registry.npmjs.org/@aperture-engine/app/-/app-0.3.0.tgz","fileCount":551,"unpackedSize":3116487,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCiBQn32E9IbYFajXO2Xt9dM2QF50EL32Cx3Pe3ppHHTAIgPCqxmG1nNRflayn4Q/DwKLu8qGIzTh+nu+nyFnZWMws="}]},"_npmUser":{"name":"felixtrz","email":"felixtrz96@gmail.com"},"directories":{},"maintainers":[{"name":"felixtrz","email":"felixtrz96@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/app_0.3.0_1783122734373_0.4980814351901579"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-22T18:06:50.776Z","modified":"2026-07-03T23:52:14.651Z","0.1.0":"2026-06-22T18:06:51.238Z","0.2.0":"2026-06-23T20:26:10.099Z","0.3.0":"2026-07-03T23:52:14.537Z"},"bugs":{"url":"https://github.com/felixtrz/aperture/issues"},"author":{"name":"Felix Zhang"},"license":"MIT","homepage":"https://github.com/felixtrz/aperture/tree/main/packages/app#readme","keywords":["aperture","ecs","webgpu","game-engine","typescript","metaframework","headless"],"repository":{"type":"git","url":"git+https://github.com/felixtrz/aperture.git","directory":"packages/app"},"description":"Aperture metaframework app facade, config helpers, and worker-safe system authoring API.","maintainers":[{"name":"felixtrz","email":"felixtrz96@gmail.com"}],"readme":"# @aperture-engine/app\n\nThe aperture metaframework app facade: config helpers, worker-safe system authoring, and the browser/headless run loop.\n\n## Install\n\n```sh\npnpm add @aperture-engine/app\n```\n\nThis package is part of the [aperture](https://github.com/felixtrz/aperture) WebGPU game engine and is normally used together with the other `@aperture-engine/*` packages (render, runtime, simulation, physics, audio, webgpu, vite-plugin).\n\n## What it does\n\n`@aperture-engine/app` is the top layer most apps author against. It turns an `ApertureConfig` (mode, assets, signals, input bindings, render defaults) plus a set of ECS systems into a running app — either driving a WebGPU canvas in the browser or stepping deterministically in a headless extraction loop. Systems are authored by extending `createSystem(...)`, which gives each system typed queries, config signals, and worker-safe access facades (spawn, assets, physics, spatial queries, cameras, hierarchy, materials, interaction, diagnostics) without importing the renderer or DOM directly.\n\n## Usage\n\nAuthor a system, then run it headlessly:\n\n```ts\nimport { defineApertureConfig } from \"@aperture-engine/app/config\";\nimport { createSystem, mesh } from \"@aperture-engine/app/systems\";\nimport { createApertureHeadlessRunner } from \"@aperture-engine/app/headless\";\n\nclass SceneSystem extends createSystem({ priority: 0 }) {\n  override init(): void {\n    this.spawn.camera({\n      key: \"camera.main\",\n      transform: { translation: [0, 0, 4], lookAt: [0, 0, 0] },\n    });\n    this.spawn.mesh({\n      key: \"ground\",\n      mesh: mesh.plane({ size: [2, 1] }),\n    });\n  }\n}\n\nconst runner = await createApertureHeadlessRunner({\n  config: defineApertureConfig({ mode: \"headless\", systems: [] }),\n  systems: [{ default: SceneSystem }],\n});\n\nconst { snapshot } = runner.step(1 / 60, 0);\nconsole.log(snapshot.meshDraws.length);\n```\n\nThe same `createSystem` authoring and `defineApertureConfig` config work for browser apps, which are wired up by the `aperture` Vite plugin (re-exported from `@aperture-engine/app/vite`) and `startGeneratedBrowserApp` from `@aperture-engine/app/browser`.\n\n## Entry points\n\nThe package exposes these subpath exports:\n\n- `@aperture-engine/app` — aggregate root (config, advanced app, headless, entity lookup, commands, diagnostics, physics, controllers).\n- `@aperture-engine/app/config` — `defineApertureConfig`, `asset`/`signal`/`input` helpers, config types.\n- `@aperture-engine/app/systems` — `createSystem`, spawn/material/shader/mesh helpers, ECS components, system access types.\n- `@aperture-engine/app/advanced` — `createApertureApp` and the low-level app/step/extract API.\n- `@aperture-engine/app/headless` — `createApertureHeadlessRunner` and headless status/step reports.\n- `@aperture-engine/app/entity-lookup` — entity lookup and snapshot helpers.\n- `@aperture-engine/app/commands` — devtools/command message protocol helpers.\n- `@aperture-engine/app/diagnostics` — diagnostic normalization and status helpers.\n- `@aperture-engine/app/vite` — the `aperture` Vite plugin (re-exported from `@aperture-engine/vite-plugin`).\n- `@aperture-engine/app/browser` — `startGeneratedBrowserApp`, render-settings and input helpers for the browser run loop.\n- `@aperture-engine/app/worker` — `startGeneratedSimulationWorker` for running the simulation in a Web Worker.\n\n---\n\nPart of the [aperture](https://github.com/felixtrz/aperture) monorepo. MIT licensed.\n","readmeFilename":"README.md"}