Mobile & Native Apps

You can put your configurator inside an iOS, Android, React Native or Flutter app today, with no changes to your project. There are two approaches: embed the published configurator in a web view, or build native interface around it.

Start with the embedThe published share view is already mobile-responsive and is the same runtime your customers use on the web — you get the 3D scene, option logic, pricing, AR and checkout with no feature gaps. Most teams ship this in a day or two.

Option A — Embed the configurator

  1. 1Publish the project and copy the share URL (see Sharing & Embedding).
  2. 2Load that URL in a web view: WKWebView on iOS, WebView on Android, react-native-webview, or webview_flutter.
  3. 3Enable DOM storage. On Android this is OFF by default and the configurator will not render without it.
  4. 4Leave hardware acceleration enabled so WebGL works — the 3D view has no software fallback.
  5. 5Handle the AR hand-off (below) and confirm on a physical device.

Web view settings

SettingNeeded forWhat to do
DOM storageTheme, language and interface stateRequired. Android defaults to off — set domStorageEnabled = true, or the page fails to render.
Hardware accelerationAll 3D rendering (WebGL)Required. Ensure android:hardwareAccelerated is not disabled in your manifest.
File chooserProjects with artwork or image upload optionsAndroid only — implement WebChromeClient.onShowFileChooser, or the upload button does nothing.
Camera permissionWearable AR (face, wrist, body try-on) onlyNot needed for standard "place in your room" AR. The prompt appears when the shopper opens AR, not at launch.
The AR hand-off is the step most integrations missAugmented reality is handed from the page to the operating system, and a web view intercepts that hand-off by default — so without the two hooks below the “View in your space” button appears to do nothing. On Android, catch the intent:// URL in shouldOverrideUrlLoading and start the activity. On iOS, a raw WKWebView does not present AR Quick Look itself — intercept the navigation to the .usdz file and show a QLPreviewController. Neither path works in a simulator, so test on real hardware.

Two more things to handle

SituationWhat to do
CheckoutCompleting a configuration navigates to your Shopify or WooCommerce checkout. Decide whether that stays in the web view, opens a native screen, or opens the system browser. If your platform opens links in a new window, implement onCreateWindow on Android too.
Configurator unavailableIf the account behind the project is inactive, the server responds 402 and a branded "unavailable" card is shown. Leave it visible or show your own message — do not retry in a loop.

Option B — Native interface around the configurator

Keep the web view for the 3D scene and option controls, and draw the surrounding interface natively — navigation, branding, your call to action, cart, account and analytics. The configurator broadcasts three events your app can subscribe to by injecting a small listener script and forwarding to a native bridge (WKScriptMessageHandler on iOS, @JavascriptInterface on Android, onMessage in React Native).

EventFires whenPayload
simplio3d:option.changedA shopper changes a selectable optionblockId, blockName, value, label, type
simplio3d:form.submittedAn enquiry form is submitted successfullyrequestId, formData
simplio3d:quote.submittedSame moment — a semantic aliasrequestId, formData

form.submitted and quote.submitted fire together on the same submission — subscribe to one, or you will double-count. In option.changed, the shape of value depends on type: checkbox options report an array and number inputs report an object of named values, so switch on type rather than assuming a single value.

Embedding on a web page rather than in an app? You do not need to inject a listener at all — a Custom Script already runs inside the share-view document and can forward these same events to the page hosting your iframe with postMessage. See Sharing & Embedding → “Listening to the Configurator from Your Page” for a worked, origin-checked example.

What the events do and don’t coverYour app observes the configurator; configuration state stays owned by the configurator, which is what saves you from re-implementing the option logic, material rules and pricing. To open on a specific configuration, use a saved-configuration permalink (?c=). Driving a selection into the configurator from native code, and event coverage for modular module placement, are not part of the supported interface yet — tell us if you need either and we will extend it.

Which to choose

Option A — EmbedOption B — Native shell
Typical effort1–2 days1–3 weeks
3D, options and pricingConfiguratorConfigurator
Header, navigation, call to actionConfiguratorYour app
Checkout and cartOpens externallyYour app
Analytics and attributionWeb-sideYour app

Option B builds on the same embed as Option A, so starting with A costs you nothing if you later want native chrome. For the underlying endpoints, see the API reference.

More in Integrations

WooCommerceConnect WooCommerce and choose, per project, cart or checkout, the configured product with its 3D image and options, and the Simplio3D or WooCommerce price.WordPress PluginBuild configurator pages in WordPress from native blocks — Viewer, Options, Price, Summary and Add to Cart — connected to your account, with WooCommerce prices verified by Simplio3D.WordPress Plugin in ElementorBuild a Simplio3D configurator page in Elementor with the plugin’s shortcodes — one Shortcode widget per block, copied from the block editor, with Add to Cart, styling and fixes.ShopifyUse the Simplio3D app for Shopify from the Shopify App Store (works for client-owned stores) or connect your own Shopify app in the dashboard, then sell configured products via cart permalinks, draft orders, or SKU-matched carts.API & SDK Quick StartGet started with the Simplio3D REST API and headless TypeScript SDK to drive configurators from your own code.AI Connections (MCP)Connect an AI agent such as Claude to your workspace with a scoped, expiring token — pick least-privilege scopes, rotate or revoke it any time, and approve every risky change in the app.Building a Custom UIDesign your own configurator interface with @simplio3d/viewer — the platform renders the 3D product while you own every control, in any framework.Headless Integration WalkthroughShip a custom-UI configurator with @simplio3d/viewer step by step — install it, wire your own controls, handle failures, and avoid the traps that break silently.