All documentation

Hardware requirements & compatibility

Check the board, phone, network, and setup requirements before you buy.

The important part is ESP32-S3, not just “ESP32.” The project needs native USB for mouse and keyboard input, plus PSRAM for its video path.

The tested setup

ComponentRequirement
BoardPlain Seeed Studio XIAO ESP32S3, with 8 MB PSRAM; not the Sense or Plus variant
PhoneiPhone running iOS 18 or later
USB-C iPhoneA data connection to the board’s native USB port
Lightning iPhoneLightning to USB Camera Adapter, plus a suitable data connection
NetworkBoard hotspot for mirroring; cellular data for model requests
Initial setupA Mac with Xcode, arduino-cli, and an Apple ID
ModelAn image-capable, OpenAI-compatible chat endpoint

The iPhone powers the board. The board’s approximate $7 price is not a total project budget: adapters, model requests, and data can add costs. See the upstream board reference for the tested hardware.

Using another ESP32-S3

The upstream README says other ESP32-S3 boards with native USB and PSRAM should work. That is an expectation, not a verified compatibility list.

Before choosing another board, check that its USB connector reaches the S3’s native USB peripheral rather than only a USB-to-serial chip. Also check flash size and PSRAM mode: the supplied flash script targets 8 MB flash and OPI PSRAM. Another board can require build-setting changes.

Do not assume an ESP32, ESP32-C3, or a board with no PSRAM is a drop-in replacement. Follow the known board first if your goal is a straightforward setup.

Wi-Fi and model access

The phone joins the ESP32’s own hotspot to mirror its screen. That hotspot has no internet uplink. Model requests use cellular data, including when you select a self-hosted endpoint.

A server available only on your usual home Wi-Fi will not automatically be reachable in this arrangement. Check network reachability from the phone before expecting a local model to work.

Signing and the Mac requirement

The current documented workflow uses a Mac to flash the board and build the iOS app. A free Apple ID can sign the app, with a seven-day re-signing interval. One-tap hotspot joining requires the optional Hotspot Configuration entitlement and a paid developer account; manual joining is available without it.

Current operating limits

  • Portrait only. Landscape coordinate handling is still on the roadmap.
  • ASCII keyboard input. Direct Chinese and Japanese text input is not implemented.
  • Keep the phone unlocked. Locking stops screen mirroring.
  • Some content is invisible. Passcode screens, Apple Pay, and DRM-protected video are not available through the mirror.
  • Steps take time. The README describes a small, low-frame-rate mirror, with model latency adding to each step. This is not a high-frame-rate remote desktop.
  • Self-built app. The current app uses a private iOS suspend API; do not assume App Store availability or approval.

Ready to proceed? Start with the full setup guide.

Project sources

README.md