mrkeyoor.com_
Wed 30 Sept 06:10 UTC
Self-Hostedevaluationupdated 30 Sept 2026

vphone-web review

vphone-web is an English-documented control panel for running several research virtual iPhones on one Apple Silicon Mac. It adds accounts, device assignment, browser streaming, app installation, a root shell, and file access around the separate vphone-cli engine.

Verdict

Our vphone-web run installed 71 packages and used 294 MB, but its build failed after 7 seconds and there was no test target, so this is research infrastructure rather than a ready device cloud. Use it only if you already accept vphone-cli's Apple Silicon, private-entitlement, and weakened-host-security requirements. Everyone else should choose a supported simulator service or a narrower automation tool.

We ran it

Lab card: what happened when we ran vphone-webScreenshot of vphone-web (github.com/34306/vphone-web)
Install✓ · 29s71 packages · 294 MB
Build✗ · 7s
Testsn/ano test script
Known vulns0(pip-audit)
Repo32 files~3,473 lines of source · 0.3 MB · 0 CI workflows

Answers from our run

Does vphone-web build from source?

Dependencies installed in 29 seconds (71 packages), and the build failed. We cloned commit c2f7aec into a clean Debian container with 3 CPUs and no project-specific setup.

Does vphone-web have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does vphone-web have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use vphone-web?

Ordinary app teams wanting a supported iOS simulator farm: the README requires Apple Silicon, macOS 15 or newer, private virtualization entitlements, and disabled SIP plus AMFI.

What are the alternatives to vphone-web?

vphone-cli, DeviceFarmer STF, Appium. Our vphone-web run installed 71 packages and used 294 MB, but its build failed after 7 seconds and there was no test target, so this is research infrastructure rather than a ready device cloud.

Setup1/5Build failed; host needs a patched VM stack and reduced macOS security
Docs4/5Clear host, VM, tunnel, storage, and shutdown instructions
Community2/5371 stars, 2 commits, and 1 unanswered setup issue
Maturity1/5No release, CI, Dockerfile, or tests; our build failed

Who it’s for

iOS researchers who already understand vphone-cli and need shared browser access to several VMs.
Small labs willing to dedicate an Apple Silicon Mac and operate it with SIP and AMFI disabled.
Administrators who need user accounts, role-based assignment, logs, shell access, and IPA installation in one local panel.
Experimenters who can build and maintain their own base VM images.

Who it’s NOT for

Ordinary app teams wanting a supported iOS simulator farm: the README requires Apple Silicon, macOS 15 or newer, private virtualization entitlements, and disabled SIP plus AMFI.
Anyone expecting a ready image: the repository excludes the base VM and requires the separate vphone-cli restore and patch pipeline.
Teams with a green-build release rule: our build failed in 7 seconds, and the repository has no test target, CI workflow, or Dockerfile.
Administrators unwilling to expose a root shell and file browser to assigned users: those are central features, so account and tunnel security carry unusual weight.
Users relying on Apple's command-line-tools Python 3.9: open issue 1 shows make setup_tools stopping on newer Python syntax under that interpreter.

Setup reality

Our fresh Debian sandbox installed commit c2f7aec in 29 seconds: 71 packages used 294 MB, and pip-audit found 0 known vulnerabilities. The build failed with exit code 1 after 7 seconds. The supplied result has no error tail, so it does not establish why the build failed. There was no test script or target to run.

A real deployment needs an Apple Silicon Mac on macOS 15 or newer, Xcode tools, Homebrew, Python 3.11 or newer, a recursively cloned vphone-cli submodule, and a base VM you build yourself. The documented engine setup also requires disabling SIP and AMFI for private virtualization entitlements.

VM images should live on fast internal storage, and browser-controlled VMs need a logged-in GUI session. The web server binds to localhost by default; remote access uses a separate tunnel, where video falls back from WebRTC to MJPEG over WebSocket.

The web panel sits on top of a research VM engine

vphone-web is useful only after vphone-cli already works. The panel adds accounts, roles, per-user device assignment, live screen control, hardware-button input, IPA installation, logs, a root shell, and a file browser. Administrators can create copy-on-write VMs from a base image and decide which users may open them. That is a coherent product for a small internal lab, especially when command-line access has become a queue of people asking one Mac owner for help.

The repository itself is small: our checkout had 32 files, about 3,473 lines of source, and occupied 0.3 MB. Most of the visible product is a FastAPI service plus static browser assets. The heavy part is excluded. You must recursively clone the vphone-cli submodule, compile and sign its engine, then create a base VM containing the disk, NVRAM, SEP storage, configuration, booter files, and a signed helper.

macOS 15 and disabled host protections are hard requirements

The README requires Apple Silicon and macOS 15 or newer because the engine uses Apple's Virtualization framework with a research VM configuration. It also says to disable System Integrity Protection and AMFI so private virtualization entitlements can work. That is a serious host decision. A dedicated research Mac is the reasonable boundary; weakening the workstation that holds your daily credentials and personal files is much harder to defend.

Python 3.11 or newer, Xcode command-line tools, Homebrew, and fast disk are also part of setup. Open issue 1 shows what happens when the toolchain falls back to Apple's Python 3.9: make setup_tools reaches xonsh and stops on match syntax it cannot parse. The issue does not show a maintainer reply. It reinforces the README's version requirement without proving that every Python 3.11 installation will finish.

Base creation is its own operation. vphone-cli downloads firmware inputs, restores and patches the VM, installs its custom software, and performs a first boot. The web repository does not bundle those large files. It can point different environment variables at several iOS bases, but only versions with an actual Disk.img appear in the interface. Shut a VM down cleanly before copying a base, since the README warns that a hard kill leaves APFS replay work for the next boot.

What happened when we ran it

Our sandbox installed commit c2f7aec in 29 seconds. The Python environment pulled 71 packages and occupied 294 MB on disk. Pip-audit reported 0 known vulnerabilities. Those are encouraging dependency results, but they cover a fresh Debian container rather than the required Apple virtualization host and do not prove that the VM engine can boot an iPhone image.

The build failed with exit code 1 after 7 seconds. The supplied lab record does not include the failing line or traceback, so assigning the failure to Linux, a missing Apple framework, or a source defect would be guesswork. We can report only the outcome: this commit did not complete our build step. The project exposes no test script or target, so the test phase was skipped.

Our scan also found 0 CI workflow files, no Dockerfile, and no tests directory. That leaves the README's manual function check as the main assurance offered by the author. A project tied to private entitlements and VM images cannot be fully exercised in an ordinary Linux runner, but it can still test account permissions, database rules, path handling, and browser routes away from the hypervisor. This repository does not supply that visible safety net.

The browser adds useful controls and a large trust boundary

The default configuration gives a VM 4 CPUs and 4,096 MB of memory, with a 12,288 MB total running-memory budget. Per-VM copy-on-write storage keeps cloning quick, while the administrator assigns devices to one or more accounts. WebRTC carries local video and control traffic. When a Cloudflare Tunnel cannot proxy WebRTC's UDP path, the application falls back to MJPEG over WebSocket.

Remote access deserves more care than the short tunnel recipe suggests. An assigned user can reach an in-browser root shell, browse VM files, and install .ipa or .tipa packages. The admin page can create and assign machines, and a separate dashboard live-tails logs. Bind the service to localhost, protect the tunnel identity layer, use a strong seeded administrator password, and treat a shared cookie domain as a security choice rather than a convenience checkbox.

A GUI login session is required for the virtual machines, so unattended recovery uses per-user LaunchAgents and optional automatic login rather than a system LaunchDaemon. That makes this closer to a remotely operated Mac workstation than a headless Linux appliance. Internal SSD storage is strongly recommended because first boot performs many small writes. Capacity planning must include the base images, clones, memory budget, and a logged-in desktop session.

Two commits and one open setup issue make this an early project

GitHub showed 371 stars and 1 open issue or pull request on September 30, 2026. The only open item is the Python 3.9 setup failure. The repository was created and last pushed on September 5, with 2 commits and no published release. That is recent enough to avoid an abandonment claim, but there is too little history to judge upgrade discipline or response time.

The README deserves credit for stating the dangerous and inconvenient parts: disabled protections, missing VM images, internal-SSD advice, clean shutdowns, tunnel behavior, and the need for a GUI login. The code may save real coordination work for a vphone-cli lab. Our failed 7-second build and the absence of tests keep it out of production-device-farm territory. Adopt it as a research console, on a machine whose security posture you chose for that purpose.

Alternatives

ProjectWhat it isPick it when
vphone-cliThe underlying command-line engine for Apple research virtual phones.pick this instead when one operator needs the VM engine without accounts, browser streaming, or device assignment.
DeviceFarmer STFA browser-based control system for shared Android devices.pick this instead when physical Android fleet access is acceptable and iOS virtualization is not required.
AppiumA cross-platform mobile automation server built around WebDriver.pick this instead when repeatable app automation matters more than an interactive multi-user virtual-phone desktop.

What people are saying

  1. [velocity-scout] 34306/vphone-web

Sources

  1. vphone-web README
  2. vphone-web example configuration
  3. Open setup failure issue
  4. vphone-cli engine

More self-hosted reviews

opencti · cap · Qwen3.8-Flash-Next-Single-DGX-Spark · superlocal · usque-custom-pro · anythingmcp · the whole board →