All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
webtau/adapters/electrobun:bootstrapElectrobunFromWindowBridge(),createElectrobunWindowBridgeProvider(),isElectrobun(), andgetElectrobunCapabilities()for first-class Electrobun runtime detection and bridge bootstrap.webtau:getRuntimeInfo()for runtime id and capability introspection across WASM, Tauri, and provider-backed runtimes.create-gametau:--desktop-shell electrobunand--electrobun-mode hybrid|native|dual.- Electrobun counter example BrowserWindow and GPUWindow build lanes, including the hybrid embedded WGPU showcase path.
- Battlestation example BrowserWindow and GPUWindow runtime lanes with a native Three WebGPU proof path.
- Scaffolded entrypoints now auto-check for
window.__ELECTROBUN__before falling back to Tauri or plain WASM. - Electrobun counter example and generated Electrobun shell files now target the WGPU-capable
electrobun@^1.15.1line. - CI and release-gate docs now treat
Electrobun Hybrid + GPU Smokeas a required release lane.
#[webtau::command]generated native wrappers now apply#[tauri::command(rename_all = "snake_case")], so desktop IPC argument keys must be snake_case.- Migration: update Tauri
invoke()payload keys from camelCase to snake_case (for example,{ numSamples: 16 }->{ num_samples: 16 }).
webtau-macrosnow generates#[tauri::command(rename_all = "snake_case")]for#[webtau::command]native wrappers, aligning Tauri IPC argument keys with WASM serde snake_case behavior.
- Node ESM consumer smoke script (
scripts/smoke-webtau-esm-consumer.mjs) to validatewebtauimportability from packed tarballs in clean environments. - Package-level smoke hook in
webtau:npm run smoke:esm-consumer.
- CI publish preflight and tag-time publish flow now run Node ESM consumer smoke before npm pack/publish steps.
- Internal ESM relative imports in
webtaunow use explicit.jsspecifiers, fixingERR_MODULE_NOT_FOUNDwhen consumingwebtaufrom Node in0.5.0. See #109.
webtau/tasklifecycle surface:startTask,pollTask,cancelTask, and progress helpers for non-blocking long-running operations.webtau/adapters/tauriadapter bootstrap:bootstrapTauri(),createTauriCoreProvider(),createTauriEventAdapter()for explicit Tauri event and invoke wiring.- Structured diagnostics envelope (
WebtauErrorwithcode,runtime,command,message,hint) throughout the runtime bridge and WASM command wrappers. - Runtime provider contracts in
webtau/provider:CoreProvider,WindowAdapter,EventAdapter,FsAdapter,DialogAdapter. - Provider registry APIs in
webtau/core:registerProvider,getProvider,resetProviderwith lazy Tauri auto-registration. - Adapter override hooks in
webtau/window,webtau/event,webtau/fs, andwebtau/dialog. - Initial Electrobun runtime spike as an opt-in alpha path (via
webtau@alphaat the time, and not yet a scaffold target). That baseline was later expanded by thev0.7.0milestone into explicit shell scaffolding, runtime auto-detection, and GPUWindow smoke coverage.
create-gametaubase scaffold now wiresbootstrapTauri()in desktop mode and ships task lifecycle seams insrc/services/backend.ts.- API docs generation now covers all public
webtauentrypoints includingtask,provider, andadapters/*. webtau/pathdocs corrected:delimitershipped in0.4.0; onlyresolveResourceremains unimplemented.
convertFileSrc()web shim inwebtau/corefor asset URL passthrough.delimiter(),cacheDir(),configDir(),dataDir(),localDataDir()web shims inwebtau/path.getIdentifier()/setAppIdentifier()web shim inwebtau/app.copyFile()andrename()virtual filesystem operations inwebtau/fs.- Workspace lint baseline with Biome plus CI enforcement.
- Battlestation scenario smoke coverage in CI.
- API docs artifact uploads now validate outputs and include hidden directories, preventing false-green publish runs.
- Battlestation radar renderer migrated from Canvas2D to Three.js with improved visual polish.
- Battlestation now uses responsive layout and DPR-aware canvas sizing for sharper rendering across viewport sizes.
webtau-vitenow falls back gracefully whenwasm-packis unavailable but valid prebuilt artifacts exist inwasmOutDir, allowing web builds and dev startup to continue without a fresh compile.- Fallback validation is stricter: requires a paired
*_bg.wasmand loader.js; fails fast when reusable artifacts are missing or incomplete. - Rust watch rebuilds are clearly disabled in fallback mode;
wasm-packremains required for fresh WASM builds and the hot-reload loop.
- Battlestation flagship showcase (
examples/battlestation) — full module coverage (input,audio,assets,fs/path,event,app) running across web and desktop. webtau/appandwebtau/pathruntime parity shims, pluswebtau-vitealias coverage for both.create-gametautemplates now include a production-oriented service layer (settings,session,comms, and shared contracts) as extension seams.
- Web parity shims for
@tauri-apps/apimodules:fs,dialog, andevent. - Gameplay foundation modules:
webtau/input,webtau/audio, andwebtau/assets. - Pong example exercising input, audio, and asset loading together.
- PR-time scaffold smoke now rewrites scaffolded Rust
webtaudependencies to the local workspace crate so CI validates unreleased lines before crates.io publish.
- Hyphenated scaffold names now generate valid Rust module identifiers in templates (e.g.
my-game→my_game).
- Scaffolded template Rust builds no longer fail on
wasm32-unknown-unknowndue togetrandomfeature gating. - Consumer smoke now completes scaffold, install, and build steps for newly published
create-gametautemplates.
create-gametaunow executes correctly when launched throughnode_modules/.binshims (previously could silently exit0).- Release verification now asserts CLI version output and fails if
create-gametaudoes not execute. - Consumer smoke now verifies the scaffolded directory exists immediately after CLI invocation.
- CI now enforces MSRV
1.77with a dedicated workflow job. - Publish workflow verifies npm and crates.io artifacts after release before declaring success.
- Publish workflow includes a registry consumer smoke test and manual
workflow_dispatchverification path.
First stable release. Deploy Tauri games to web and desktop from one codebase.
webtaunpm package —invoke()universal router with automatic Tauri/WASM detection,isTauri()runtime check, window shims, and DPI utilities.webtau-vitenpm package — Vite plugin with wasm-pack automation, Rust file watching,@tauri-apps/apiimport aliasing, and optional wasm-opt.create-gametauCLI — project scaffolder with Three.js, PixiJS, and vanilla Canvas2D templates; generates a ready-to-run 4-crate Rust workspace (core,commands,app,wasm).webtauRust crate —#[webtau::command]proc macro generating both#[tauri::command]and#[wasm_bindgen]wrappers from a single function, andwasm_state!macro for WASM thread-local state.webtau-macrosRust crate — proc macro internals for#[webtau::command].examples/counter— minimal end-to-end demo (browser WASM + Tauri desktop).examples/pong— two-player Pong with Rust physics, PixiJS rendering, and keyboard input.