Skip to content

iOS 15.4.1 - Control UI fails to load with 'Control UI did not start' #90716

Description

@cnnu

iOS 15.4.1 - Control UI fails to load with "Control UI did not start"

Summary

Control UI loads correctly on desktop (Chrome/Safari) and Android, but iOS 15.4.1 (both Safari and in-app WebView, e.g. fnnas app) shows "Control UI did not start" — the Lit openclaw-app custom element never registers, hitting the 12-second fallback timeout.

Environment

Detail Value
OpenClaw 2026.6.1 (2e08f0f)
Host fnnas (Linux NAS)
iOS version 15.4.1
Affected browsers Safari 15.4.1, fnnas app WebView (WKWebView)
Working browsers Chrome 131, Safari 18 (desktop), Android WebView
Access method Via NAS panel reverse proxy (http://<nas>:5666/app/trim-openclaw/default/)

What I've tried

  • Increased data-openclaw-mount-timeout-ms to 60s — no difference
  • Clicked "Keep waiting" — still fails
  • Direct access via http://<nas>:48415/... — server binds to loopback only (NAS restriction)
  • The HTML page loads (styles render), but JS execution fails silently

Investigation

Scanned the bundled JS for iOS 15 compatibility:

  1. replaceChildren — used 1 time, requires iOS 16+
  2. structuredClone — used 1 time, requires iOS 16+ on main thread
  3. Object.hasOwn — used 6 times, OK on iOS 15.4+
  4. import.meta.url — used extensively for dynamic chunk imports
  5. <link rel="modulepreload"> — 6 preload links, iOS 15 has incomplete support

The top-level index-DRTyMBOr.js is a ∼1MB ES Module bundle. iOS 15.4.1 WebKit is more strict than desktop Chrome/Safari about MIME type checking for ES Modules. The NAS reverse proxy rewrites Content-Type to text/plain for all proxied assets, but this alone shouldn't cause complete failure since:

  • Chrome/Safari on desktop tolerate text/plain
  • Android WebView tolerates text/plain
  • iOS 15.4.1 may NOT tolerate text/plain for module scripts

However, since the owner reports that the page correctly shows OpenClaw branding (CSS loads), the HTML is served correctly. The issue is specific to JS execution.

Likely root cause

Two possibilities (or combination):

  1. replaceChildren throws TypeError in iOS 15.4.1, which if called during component registration in Lit, would prevent openclaw-app from being defined
  2. iOS 15.4.1 WKWebView rejects module scripts with incorrect Content-Type, causing the entire bundle to fail to parse

Request

  • Add iOS 15 support (or graceful degradation) to the Control UI build
  • Consider adding a nomodule fallback script for older browsers
  • If replaceChildren is the culprit, a polyfill would fix this
  • Alternatively, document minimum iOS version requirement if support cannot be added

Workaround for users

Use an Android phone or desktop browser to access Control UI until iOS 16+ is available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Normal backlog priority with limited blast radius.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.staleMarked as stale due to inactivity

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions