create-gametau 0.5.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,18 +1,21 @@
1
- # create-gametau
1
+ # create-gametau
2
+
3
+ Scaffold a Rust game project for the stable Web (WASM) + Tauri desktop path from one codebase, with optional Electrobun shell support.
2
4
 
3
- Scaffold a Rust game project for the stable Web (WASM) + Tauri desktop path from one codebase.
5
+ Use `--desktop-shell electrobun` to add Electrobun BrowserWindow/GPUWindow shell files and scripts to the generated project.
4
6
 
5
- Electrobun is available as an experimental opt-in track — see [active milestones](https://github.com/devallibus/gametau/milestones).
7
+ Electrobun is available as an explicit shell option — see [active milestones](https://github.com/devallibus/gametau/milestones).
6
8
 
7
9
  > Repository note: `docs/` is intentionally local-only and not published in remote history.
8
10
 
9
11
  ## Quick Start
10
12
 
11
- ```bash
12
- bunx create-gametau my-game
13
- cd my-game
14
- bun install
15
- bun run dev
13
+ ```bash
14
+ bunx create-gametau my-game
15
+ bunx create-gametau my-game --desktop-shell electrobun
16
+ cd my-game
17
+ bun install
18
+ bun run dev
16
19
  ```
17
20
 
18
21
  For project status and rollout context, see [active milestones](https://github.com/devallibus/gametau/milestones).
@@ -28,11 +31,13 @@ bunx create-gametau my-game --template pixi
28
31
  bunx create-gametau my-game --template vanilla
29
32
  ```
30
33
 
31
- ## CLI Options
32
-
33
- - `--template`, `-t` - Choose scaffold template (`three`, `pixi`, `vanilla`)
34
- - `--help`, `-h` - Show help output
35
- - `--version`, `-v` - Print CLI version
34
+ ## CLI Options
35
+
36
+ - `--template`, `-t` - Choose scaffold template (`three`, `pixi`, `vanilla`)
37
+ - `--desktop-shell` - Choose desktop shell (`tauri`, `electrobun`)
38
+ - `--electrobun-mode` - Electrobun shell mode (`hybrid`, `native`, `dual`)
39
+ - `--help`, `-h` - Show help output
40
+ - `--version`, `-v` - Print CLI version
36
41
 
37
42
  ## What gets scaffolded
38
43
 
@@ -53,10 +58,12 @@ The scaffolded base template now ships a small service architecture instead of a
53
58
  - `src/services/comms.ts` - typed alert/comms channel over `webtau/event`
54
59
  - `src/services/contracts.ts` - interfaces/types for settings, session snapshots, and alerts
55
60
 
56
- Runtime bootstrap is explicit in scaffolded `src/index.ts`:
57
-
58
- - Tauri path: `bootstrapTauri()` from `webtau/adapters/tauri`
59
- - Web path: `configure({ loadWasm })` from `webtau`
61
+ Runtime bootstrap is explicit in scaffolded `src/index.ts`:
62
+
63
+ - Electrobun path: `bootstrapElectrobunFromWindowBridge()` from `webtau/adapters/electrobun`
64
+ - Tauri path: `bootstrapTauri()` from `webtau/adapters/tauri`
65
+ - Web path: `configure({ loadWasm })` from `webtau`
66
+ - Runtime/capability seam: `getRuntimeInfo()` from `webtau`
60
67
 
61
68
  This keeps the generated project lightweight while giving contributors clear extension points for production features.
62
69
 
package/dist/cli.d.ts CHANGED
@@ -1,17 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * create-gametau Scaffold a Tauri game with web + desktop deployment.
3
+ * create-gametau - Scaffold a Tauri game with web + desktop deployment.
4
4
  *
5
5
  * Usage:
6
6
  * bunx create-gametau my-game
7
7
  * bunx create-gametau my-game --template pixi
8
- * bunx create-gametau my-game --template vanilla
8
+ * bunx create-gametau my-game --desktop-shell electrobun
9
9
  */
10
10
  declare const TEMPLATES: readonly ["three", "pixi", "vanilla"];
11
+ declare const DESKTOP_SHELLS: readonly ["tauri", "electrobun"];
12
+ declare const ELECTROBUN_MODES: readonly ["hybrid", "native", "dual"];
11
13
  type Template = (typeof TEMPLATES)[number];
14
+ type DesktopShell = (typeof DESKTOP_SHELLS)[number];
15
+ type ElectrobunMode = (typeof ELECTROBUN_MODES)[number];
12
16
  interface Options {
13
17
  projectName: string;
14
18
  template: Template;
19
+ desktopShell?: DesktopShell;
20
+ electrobunMode?: ElectrobunMode;
15
21
  }
16
22
  export declare function scaffold(options: Options, cwd?: string): void;
17
23
  export {};
package/dist/cli.js CHANGED
@@ -1,16 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * create-gametau Scaffold a Tauri game with web + desktop deployment.
3
+ * create-gametau - Scaffold a Tauri game with web + desktop deployment.
4
4
  *
5
5
  * Usage:
6
6
  * bunx create-gametau my-game
7
7
  * bunx create-gametau my-game --template pixi
8
- * bunx create-gametau my-game --template vanilla
8
+ * bunx create-gametau my-game --desktop-shell electrobun
9
9
  */
10
10
  import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, writeFileSync, } from "node:fs";
11
11
  import { basename, dirname, join, resolve } from "node:path";
12
12
  import { fileURLToPath } from "node:url";
13
13
  const TEMPLATES = ["three", "pixi", "vanilla"];
14
+ const DESKTOP_SHELLS = ["tauri", "electrobun"];
15
+ const ELECTROBUN_MODES = ["hybrid", "native", "dual"];
16
+ const ELECTROBUN_VERSION = "^1.15.1";
17
+ const CROSS_ENV_VERSION = "^7.0.3";
18
+ const CONCURRENTLY_VERSION = "^9.2.1";
19
+ const BUN_TYPES_VERSION = "^1.3.9";
14
20
  function getPackageVersion() {
15
21
  try {
16
22
  const packageJsonPath = new URL("../package.json", import.meta.url);
@@ -24,6 +30,8 @@ function getPackageVersion() {
24
30
  function parseArgs(args) {
25
31
  const positional = [];
26
32
  let template = "three";
33
+ let desktopShell = "tauri";
34
+ let electrobunMode = "hybrid";
27
35
  for (let i = 0; i < args.length; i++) {
28
36
  const arg = args[i];
29
37
  if (arg === "--template" || arg === "-t") {
@@ -35,6 +43,24 @@ function parseArgs(args) {
35
43
  }
36
44
  template = next;
37
45
  }
46
+ else if (arg === "--desktop-shell") {
47
+ const next = args[++i];
48
+ if (!next || !DESKTOP_SHELLS.includes(next)) {
49
+ console.error(`Invalid desktop shell: ${next}`);
50
+ console.error(`Available: ${DESKTOP_SHELLS.join(", ")}`);
51
+ process.exit(1);
52
+ }
53
+ desktopShell = next;
54
+ }
55
+ else if (arg === "--electrobun-mode") {
56
+ const next = args[++i];
57
+ if (!next || !ELECTROBUN_MODES.includes(next)) {
58
+ console.error(`Invalid Electrobun mode: ${next}`);
59
+ console.error(`Available: ${ELECTROBUN_MODES.join(", ")}`);
60
+ process.exit(1);
61
+ }
62
+ electrobunMode = next;
63
+ }
38
64
  else if (arg === "--help" || arg === "-h") {
39
65
  printHelp();
40
66
  process.exit(0);
@@ -57,34 +83,55 @@ function parseArgs(args) {
57
83
  printHelp();
58
84
  process.exit(1);
59
85
  }
60
- return { projectName: positional[0], template };
86
+ const options = {
87
+ projectName: positional[0],
88
+ template,
89
+ desktopShell,
90
+ electrobunMode,
91
+ };
92
+ validateOptions(options);
93
+ return options;
94
+ }
95
+ function validateOptions(options) {
96
+ const desktopShell = options.desktopShell ?? "tauri";
97
+ const electrobunMode = options.electrobunMode ?? "hybrid";
98
+ if (desktopShell !== "electrobun" && electrobunMode !== "hybrid") {
99
+ throw new Error("--electrobun-mode requires --desktop-shell electrobun.");
100
+ }
61
101
  }
62
102
  function printHelp() {
63
103
  console.log(`
64
- create-gametau Scaffold a Tauri game with web + desktop deployment
104
+ create-gametau - Scaffold a Tauri game with web + desktop deployment
65
105
 
66
106
  Usage:
67
107
  bunx create-gametau <project-name> [options]
68
108
 
69
109
  Options:
70
- --template, -t Template to use: three (default), pixi, vanilla
71
- --help, -h Show this help message
72
- --version, -v Show CLI version
110
+ --template, -t Template to use: three (default), pixi, vanilla
111
+ --desktop-shell Desktop shell: tauri (default), electrobun
112
+ --electrobun-mode Electrobun shell mode: hybrid (default), native, dual
113
+ --help, -h Show this help message
114
+ --version, -v Show CLI version
73
115
 
74
116
  Examples:
75
117
  bunx create-gametau my-game
76
118
  bunx create-gametau my-game --template pixi
119
+ bunx create-gametau my-game --desktop-shell electrobun
120
+ bunx create-gametau my-game --desktop-shell electrobun --electrobun-mode dual
77
121
  bun create gametau my-game
78
122
  `.trim());
79
123
  }
80
124
  function getTemplatesDir() {
81
- // Works both when running from source (dev) and from dist (published)
82
125
  const thisFile = fileURLToPath(import.meta.url);
83
126
  const packageRoot = resolve(dirname(thisFile), "..");
84
127
  return join(packageRoot, "templates");
85
128
  }
86
129
  export function scaffold(options, cwd) {
87
- const { projectName, template } = options;
130
+ validateOptions(options);
131
+ const projectName = options.projectName;
132
+ const template = options.template;
133
+ const desktopShell = options.desktopShell ?? "tauri";
134
+ const electrobunMode = options.electrobunMode ?? "hybrid";
88
135
  const targetDir = resolve(cwd || process.cwd(), projectName);
89
136
  if (existsSync(targetDir)) {
90
137
  const contents = readdirSync(targetDir);
@@ -98,21 +145,205 @@ export function scaffold(options, cwd) {
98
145
  if (!existsSync(baseDir)) {
99
146
  throw new Error(`base template not found at ${baseDir}`);
100
147
  }
101
- // Copy base template
102
148
  mkdirSync(targetDir, { recursive: true });
103
149
  cpSync(baseDir, targetDir, { recursive: true });
104
- // Copy template overlay (overwrites base files where applicable)
105
150
  if (existsSync(overlayDir)) {
106
151
  cpSync(overlayDir, targetDir, { recursive: true });
107
152
  }
108
- // npm strips dotfiles named .gitignore / .npmignore from tarballs.
109
- // Templates store the file as "gitignore" (no dot) and we rename it here.
110
153
  renameTemplateGitignore(targetDir);
111
- // Rust crate references in code use underscore identifiers, while
112
- // package names and UI strings should preserve the original project name.
113
154
  replaceInDir(targetDir, "{{PROJECT_NAME}}_", `${toRustIdent(projectName)}_`);
114
- // Replace {{PROJECT_NAME}} placeholders
115
155
  replaceInDir(targetDir, "{{PROJECT_NAME}}", projectName);
156
+ if (desktopShell === "electrobun") {
157
+ addElectrobunSupport(targetDir, projectName, electrobunMode);
158
+ }
159
+ }
160
+ function addElectrobunSupport(targetDir, projectName, electrobunMode) {
161
+ const packageJsonPath = join(targetDir, "package.json");
162
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
163
+ packageJson.dependencies ??= {};
164
+ packageJson.devDependencies ??= {};
165
+ packageJson.scripts ??= {};
166
+ packageJson.dependencies.electrobun = ELECTROBUN_VERSION;
167
+ packageJson.devDependencies["@types/bun"] = BUN_TYPES_VERSION;
168
+ packageJson.devDependencies["cross-env"] = CROSS_ENV_VERSION;
169
+ packageJson.devDependencies.concurrently ??= CONCURRENTLY_VERSION;
170
+ const electrobunCli = "node ./node_modules/electrobun/bin/electrobun.cjs";
171
+ if (electrobunMode === "dual") {
172
+ packageJson.scripts["dev:electrobun"] = "bun run dev:electrobun:browser";
173
+ packageJson.scripts["dev:electrobun:browser"] =
174
+ `concurrently -k -n WEB,APP "vite" "${electrobunCli} dev"`;
175
+ packageJson.scripts["dev:electrobun:gpu"] =
176
+ `concurrently -k -n WEB,APP "vite" "cross-env GAMETAU_ELECTROBUN_RENDER_MODE=gpu ${electrobunCli} dev"`;
177
+ packageJson.scripts["build:electrobun"] = "bun run build:electrobun:browser";
178
+ packageJson.scripts["build:electrobun:browser"] =
179
+ `bun run build:web && ${electrobunCli} build`;
180
+ packageJson.scripts["build:electrobun:gpu"] =
181
+ `bun run build:web && cross-env GAMETAU_ELECTROBUN_RENDER_MODE=gpu ${electrobunCli} build`;
182
+ }
183
+ else if (electrobunMode === "native") {
184
+ packageJson.scripts["dev:electrobun"] =
185
+ `concurrently -k -n WEB,APP "vite" "cross-env GAMETAU_ELECTROBUN_RENDER_MODE=gpu ${electrobunCli} dev"`;
186
+ packageJson.scripts["build:electrobun"] =
187
+ `bun run build:web && cross-env GAMETAU_ELECTROBUN_RENDER_MODE=gpu ${electrobunCli} build`;
188
+ }
189
+ else {
190
+ packageJson.scripts["dev:electrobun"] =
191
+ `concurrently -k -n WEB,APP "vite" "${electrobunCli} dev"`;
192
+ packageJson.scripts["build:electrobun"] = `bun run build:web && ${electrobunCli} build`;
193
+ }
194
+ writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`);
195
+ const bunDir = join(targetDir, "src", "bun");
196
+ const typesDir = join(targetDir, "src", "types");
197
+ mkdirSync(bunDir, { recursive: true });
198
+ mkdirSync(typesDir, { recursive: true });
199
+ patchElectrobunTypePaths(targetDir);
200
+ writeFileSync(join(targetDir, "electrobun.config.ts"), buildElectrobunConfig(projectName));
201
+ writeFileSync(join(bunDir, "browser.ts"), buildElectrobunBrowserEntrypoint(projectName));
202
+ writeFileSync(join(bunDir, "gpu.ts"), buildElectrobunGpuEntrypoint(projectName));
203
+ writeFileSync(join(typesDir, "electrobun.d.ts"), buildElectrobunConfigTypes());
204
+ writeFileSync(join(typesDir, "electrobun-bun.d.ts"), buildElectrobunBunTypes());
205
+ }
206
+ function buildElectrobunConfig(projectName) {
207
+ return `import type { ElectrobunConfig } from "electrobun";
208
+
209
+ const renderMode = process.env.GAMETAU_ELECTROBUN_RENDER_MODE === "gpu"
210
+ ? "gpu"
211
+ : "browser";
212
+ const isGpu = renderMode === "gpu";
213
+
214
+ export default {
215
+ app: {
216
+ name: isGpu ? "${projectName} (Electrobun GPU)" : "${projectName} (Electrobun)",
217
+ identifier: "dev.gametau.${toRustIdent(projectName)}.electrobun",
218
+ version: "0.1.0",
219
+ },
220
+ build: {
221
+ bun: {
222
+ entrypoint: isGpu ? "src/bun/gpu.ts" : "src/bun/browser.ts",
223
+ },
224
+ copy: {
225
+ "dist/index.html": "views/main/index.html",
226
+ "dist/assets": "views/main/assets",
227
+ },
228
+ mac: {
229
+ bundleCEF: !isGpu,
230
+ bundleWGPU: isGpu,
231
+ },
232
+ linux: {
233
+ bundleCEF: !isGpu,
234
+ bundleWGPU: isGpu,
235
+ },
236
+ win: {
237
+ bundleCEF: !isGpu,
238
+ bundleWGPU: isGpu,
239
+ },
240
+ },
241
+ } satisfies ElectrobunConfig;
242
+ `;
243
+ }
244
+ function buildElectrobunBrowserEntrypoint(projectName) {
245
+ return `import { BrowserWindow } from "electrobun/bun";
246
+
247
+ const isProduction = Bun.env.NODE_ENV === "production";
248
+ const url = isProduction ? "views://main/index.html" : "http://localhost:1420";
249
+
250
+ new BrowserWindow({
251
+ title: "${projectName} (Electrobun)",
252
+ url,
253
+ });
254
+ `;
255
+ }
256
+ function buildElectrobunGpuEntrypoint(projectName) {
257
+ return `import { configure } from "webtau";
258
+ import { GpuWindow } from "electrobun/bun";
259
+ import { getWorldView, tickWorld } from "../services/backend";
260
+
261
+ async function loadWasmRuntime() {
262
+ configure({
263
+ loadWasm: async () => {
264
+ const wasm = await import("../wasm/${toRustIdent(projectName)}_wasm");
265
+ await wasm.default();
266
+ wasm.init(42);
267
+ return wasm;
268
+ },
269
+ });
270
+ }
271
+
272
+ async function main() {
273
+ await loadWasmRuntime();
274
+
275
+ const win = new GpuWindow({
276
+ title: "${projectName} (Electrobun GPU)",
277
+ frame: { x: 120, y: 120, width: 960, height: 640 },
278
+ titleBarStyle: "default",
279
+ transparent: false,
280
+ });
281
+
282
+ async function syncWindowTitle() {
283
+ const view = await getWorldView();
284
+ win.setTitle("${projectName} score " + view.score + " tick " + view.tick_count);
285
+ }
286
+
287
+ await syncWindowTitle();
288
+
289
+ setInterval(() => {
290
+ void tickWorld()
291
+ .then(syncWindowTitle)
292
+ .catch(console.error);
293
+ }, 250);
294
+ }
295
+
296
+ main().catch(console.error);
297
+ `;
298
+ }
299
+ function patchElectrobunTypePaths(targetDir) {
300
+ const tsconfigPath = join(targetDir, "tsconfig.json");
301
+ const tsconfig = JSON.parse(readFileSync(tsconfigPath, "utf-8"));
302
+ tsconfig.compilerOptions ??= {};
303
+ tsconfig.compilerOptions.baseUrl ??= ".";
304
+ tsconfig.compilerOptions.types = ["bun"];
305
+ tsconfig.compilerOptions.paths = {
306
+ ...(tsconfig.compilerOptions.paths ?? {}),
307
+ electrobun: ["./src/types/electrobun"],
308
+ "electrobun/bun": ["./src/types/electrobun-bun"],
309
+ };
310
+ writeFileSync(tsconfigPath, `${JSON.stringify(tsconfig, null, 2)}\n`);
311
+ }
312
+ function buildElectrobunConfigTypes() {
313
+ return `export interface ElectrobunConfig {
314
+ app: {
315
+ name: string;
316
+ identifier: string;
317
+ version: string;
318
+ };
319
+ build: {
320
+ bun: {
321
+ entrypoint: string;
322
+ };
323
+ copy?: Record<string, string>;
324
+ mac?: { bundleCEF?: boolean; bundleWGPU?: boolean };
325
+ linux?: { bundleCEF?: boolean; bundleWGPU?: boolean };
326
+ win?: { bundleCEF?: boolean; bundleWGPU?: boolean };
327
+ };
328
+ }
329
+ `;
330
+ }
331
+ function buildElectrobunBunTypes() {
332
+ return `export class BrowserWindow {
333
+ constructor(options: { title?: string; url: string });
334
+ }
335
+
336
+ export class GpuWindow {
337
+ constructor(options: {
338
+ title?: string;
339
+ frame: { x: number; y: number; width: number; height: number };
340
+ titleBarStyle: "hidden" | "hiddenInset" | "default";
341
+ transparent: boolean;
342
+ });
343
+
344
+ setTitle(title: string): void;
345
+ }
346
+ `;
116
347
  }
117
348
  function toRustIdent(value) {
118
349
  let ident = value.replace(/[^A-Za-z0-9_]/g, "_");
@@ -149,7 +380,7 @@ function replaceInDir(dir, search, replace) {
149
380
  }
150
381
  }
151
382
  catch {
152
- // Skip binary files
383
+ // Skip binary files.
153
384
  }
154
385
  }
155
386
  }
@@ -163,12 +394,9 @@ function normalizeExecPath(path) {
163
394
  }
164
395
  }
165
396
  function isDirectExecution() {
166
- // Bun exposes import.meta.main directly.
167
397
  if (typeof Bun !== "undefined") {
168
398
  return import.meta.main;
169
399
  }
170
- // Node 20 does not expose import.meta.main.
171
- // For npm/pnpm/yarn shims, argv[1] often points at node_modules/.bin/create-gametau.
172
400
  const entry = process.argv[1];
173
401
  if (!entry)
174
402
  return false;
@@ -178,7 +406,6 @@ function isDirectExecution() {
178
406
  const currentPath = normalizeExecPath(currentFile);
179
407
  if (entryPath === currentPath)
180
408
  return true;
181
- // Fallback for shim launchers where argv[1] is the shim itself.
182
409
  const launcher = basename(entryPath).toLowerCase();
183
410
  return launcher === "create-gametau" || launcher === "create-gametau.cmd" || launcher === "create-gametau.ps1";
184
411
  }
@@ -186,7 +413,6 @@ function isDirectExecution() {
186
413
  return false;
187
414
  }
188
415
  }
189
- // Main — only runs when executed directly (not when imported by tests)
190
416
  if (isDirectExecution()) {
191
417
  const args = process.argv.slice(2);
192
418
  const options = parseArgs(args);
@@ -198,11 +424,18 @@ Done! Your game is ready.
198
424
 
199
425
  cd ${options.projectName}
200
426
  bun install
201
- bun run dev # web dev server
202
- bun run dev:tauri # desktop dev (requires Tauri CLI)
203
- bun run build:web # build for web deployment
427
+ bun run dev # web dev server
428
+ bun run dev:tauri # desktop dev (requires Tauri CLI)
429
+ bun run build:web # build for web deployment
204
430
  bun run build:desktop # build desktop app
205
431
  `);
432
+ if ((options.desktopShell ?? "tauri") === "electrobun") {
433
+ console.log(`Electrobun shell support was added:
434
+
435
+ bun run dev:electrobun
436
+ bun run build:electrobun
437
+ `);
438
+ }
206
439
  }
207
440
  catch (err) {
208
441
  console.error(`Error: ${err instanceof Error ? err.message : err}`);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-gametau",
3
- "version": "0.5.2",
3
+ "version": "0.7.0",
4
4
  "description": "Scaffold a Tauri game that deploys to web + desktop",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -11,12 +11,12 @@
11
11
  "preview": "vite preview"
12
12
  },
13
13
  "dependencies": {
14
- "webtau": "^0.5.2"
14
+ "webtau": "^0.7.0"
15
15
  },
16
16
  "devDependencies": {
17
17
  "typescript": "^5.8.0",
18
18
  "vite": "^6.0.0",
19
- "webtau-vite": "^0.5.2",
19
+ "webtau-vite": "^0.7.0",
20
20
  "@tauri-apps/cli": "^2.0.0",
21
21
  "@tauri-apps/api": "^2.0.0"
22
22
  }
@@ -1,4 +1,5 @@
1
- import { configure, isTauri } from "webtau";
1
+ import { configure, getRuntimeInfo, isTauri } from "webtau";
2
+ import { bootstrapElectrobunFromWindowBridge } from "webtau/adapters/electrobun";
2
3
  import { bootstrapTauri } from "webtau/adapters/tauri";
3
4
  import { startGameLoop } from "./game/loop";
4
5
  import { createSnapshotQueue } from "./game/snapshot-queue";
@@ -26,8 +27,10 @@ function updateHud(view: WorldView, settings: RuntimeSettings): void {
26
27
  }
27
28
 
28
29
  async function main() {
29
- // Bootstrap runtime: Tauri (desktop) or WASM (web).
30
- if (isTauri()) {
30
+ // Bootstrap runtime in descending order of host specificity.
31
+ if (bootstrapElectrobunFromWindowBridge()) {
32
+ // Electrobun bridge is available; provider/adapters are now wired.
33
+ } else if (isTauri()) {
31
34
  await bootstrapTauri();
32
35
  } else {
33
36
  configure({
@@ -40,6 +43,12 @@ async function main() {
40
43
  });
41
44
  }
42
45
 
46
+ const runtime = getRuntimeInfo();
47
+ document.body.dataset.runtime = runtime.id;
48
+ if (runtime.capabilities.renderMode) {
49
+ document.body.dataset.renderMode = runtime.capabilities.renderMode;
50
+ }
51
+
43
52
  // Set up the renderer
44
53
  const app = document.getElementById("app")!;
45
54
  await initScene(app);
@@ -0,0 +1,4 @@
1
+ declare module "*{{PROJECT_NAME}}_wasm" {
2
+ export default function init(): Promise<void>;
3
+ export function init(seed?: number): void;
4
+ }
@@ -5,7 +5,7 @@ edition.workspace = true
5
5
 
6
6
  [dependencies]
7
7
  {{PROJECT_NAME}}-core = { path = "../core" }
8
- webtau = "0.5.2"
8
+ webtau = "0.7.0"
9
9
 
10
10
  [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
11
11
  tauri = { version = "2", features = [] }
@@ -11,7 +11,7 @@ wasm-bindgen = "0.2"
11
11
  serde = { version = "1", features = ["derive"] }
12
12
  serde-wasm-bindgen = "0.6"
13
13
  getrandom = { version = "0.2", features = ["js"] }
14
- webtau = "0.5.2"
14
+ webtau = "0.7.0"
15
15
  {{PROJECT_NAME}}-core = { path = "../core" }
16
16
  {{PROJECT_NAME}}-commands = { path = "../commands" }
17
17
 
@@ -12,12 +12,12 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "pixi.js": "^8.0.0",
15
- "webtau": "^0.5.2"
15
+ "webtau": "^0.7.0"
16
16
  },
17
17
  "devDependencies": {
18
18
  "typescript": "^5.8.0",
19
19
  "vite": "^6.0.0",
20
- "webtau-vite": "^0.5.2",
20
+ "webtau-vite": "^0.7.0",
21
21
  "@tauri-apps/cli": "^2.0.0",
22
22
  "@tauri-apps/api": "^2.0.0"
23
23
  }
@@ -12,13 +12,13 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "three": "^0.172.0",
15
- "webtau": "^0.5.2"
15
+ "webtau": "^0.7.0"
16
16
  },
17
17
  "devDependencies": {
18
18
  "@types/three": "^0.172.0",
19
19
  "typescript": "^5.8.0",
20
20
  "vite": "^6.0.0",
21
- "webtau-vite": "^0.5.2",
21
+ "webtau-vite": "^0.7.0",
22
22
  "@tauri-apps/cli": "^2.0.0",
23
23
  "@tauri-apps/api": "^2.0.0"
24
24
  }