Repository navigation
v0.3.7
Trusted input on real devices, a class of silent asset-loading failures fixed, and a security update.
✨ Features
- Trusted input on physical devices. Agent-driven taps, drags and typing on a connected device can now be real OS-level events (
isTrusted) rather than synthetic ones, so anything gated on trusted input — native gestures, some framework handlers — behaves exactly as it does under a human finger.- Android needs only adb and a debuggable WebView (true of debug builds), and gets the trusted path out of the box.
- iOS goes through WebDriverAgent, which is provisioned as a Build Support item: it is not bundled in the app — it is fetched from a pinned source and compiled + code-signed on your machine, so it needs Xcode and an Apple team. It also auto-installs only when it can actually succeed, rather than failing halfway.
- Without either, device input still works. Synthetic input remains the fallback everywhere, now fronted by a banner naming the cause and the consequence — as a prefix, not a trailing marker that was easy to skim past. Nothing silently degrades.
- Two gestures have no trusted form and say so instead of pretending:
hover(a touchscreen has no hover state) andscroll(it could only be a touch drag, which on a game canvas is a real gameplay gesture).
- iOS out-of-app screenshots. Capture works outside the app's own webview, so system UI and out-of-app states are visible.
🐛 Fixes
- A missing asset no longer reads as a corrupt one. A dev server answers a missing file with
200 OKand an HTML error page; the loaders parsed that as content and reported a corrupt scene, sending you after the wrong bug. Fixed for scenes and for the seven other asset fetches that had the same hole (#91). - Security:
uuidbumped to ^11.1.1 — GHSA-w5hq-g745-h8pq (CVE-2026-41907). - Native builds no longer ship stale plugin code. Engine Capacitor plugins are re-vendored on every native build, with a guard against a stale tarball — previously a build could succeed and silently install the previous native code (#90).
- The debug bridge releases port 9095 when the app is backgrounded, so the foreground app owns it (#95).
- Synthetic input hit-tests its target canvas instead of assuming it (#93).
📝 Other notable
- Windows and e2e now run on every push via the free public runner, alongside a DMG + Windows installer build — coverage that had been off for cost reasons.
- Publishing hardening. The OSS snapshot no longer ships device identifiers or LFS pointer stubs, and it now carries line-ending pins (without them, Windows saw every generated file as stale).
modoki-engine.commoved to a Cloudflare Worker, retiring the GCP load balancer.
Editor-only release: no engine API changes. Existing installs will pick this up through the in-app updater.
Full Changelog: v0.3.6...v0.3.7