Shipvo: build once, publish for people and AI agents. Open-source React Native framework with signed OTA updates, a built-in admin, an agent-usable simulator over MCP, and measured simulator-vs-device parity.
翻译准备中
正在加载完整 README。
查看完整 README ↗One React Native app, two places it runs. People get a native Android or iOS app from the stores, kept current with signed over-the-air updates. AI agents get the same release in a phone-sized simulator they can see and operate over MCP, with no device, including native features (camera, location, biometrics, payments, notifications). Every claim about the simulator is measured against real Android and iOS and published.
Shipvo was briefly called PureNative. The hosted control plane is
api.shipvo.devand the hosted simulatorsim.shipvo.dev; the olderpurenative.workers.devaddresses keep answering for apps whose shell was built against them.
Three pillars:
/app/<id>/admin, and a control plane you can self-host on Cloudflare.@shipvo/mcp opens any Shipvo app for an agent: accessibility tree with refs, tap/type/scroll/back, screenshots. @shipvo/device gives apps one device API, real on phones and simulated in the simulator, with Android- and iOS-worded system sheets the agent answers like a person. Simulation is explicit: every simulated event is logged as simulated and no simulated payment or fingerprint is ever presented as real.docs/parity-results.md.Website · Docs · Blog · Shipvo vs Expo · Pricing · Roadmap
Measured. OTA numbers come from a real low-end phone (Redmi 9A, 2 GB RAM):
docs/spike-results.md. Agent results:docs/agent-gate-results.md. Simulator-vs-device parity:docs/parity-results.md. Native-feature parity (camera, location, permissions, payment prompt) is measured on the Android emulator and the iPhone simulator in CI. The iOS OTA runtime is verified on the iOS Simulator in CI on every change to it (fetch, verify, stage, reload, cold start). Measured there on 5 Nov 2026 (docs/spike-results.md, run 41979433300, median of 3, local control plane): launch to new release running and healthy 4.2 s (iOS Simulator; OTA timings on the Redmi 9A are in the same file), full 1.87 MB bundle download 157 ms, apply 266 ms. A first-update bsdiff patch from the embedded bundle was 83,999 bytes against a 1,996,082-byte bundle, 573 ms from last byte to healthy (run 42087991990).
Every change to a native mobile app normally means a new build, a store submission, a review, and then waiting for users to update. Many never do. Shipvo separates what has to go through the store from what doesn't:
| Layer | Ships through | Contains |
|---|---|---|
| Native shell | App Store / Google Play | Native modules, declared permissions, the signing trust root |
| Core runtime | Over the air, signed | The app's JavaScript (Hermes bytecode) |
| Screens and add-ons | Over the air, signed | New screens, features and fixes built on capabilities the shell already declares |
Updates are interpreted JavaScript running on native capabilities the shell declares up front. The app never asks for a permission it hasn't declared.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗