App Clips and Instant Apps for Instant First Use | Mironsoft
AI generated
RN
native
React Native / App Clips & Instant Apps
App Clips and Instant Apps
for instant first use without installation

App Clips on iOS and Instant Apps on Android deliver small, tightly scoped parts of an app, triggered by a QR code or link, with no full installation required. This article covers architecture, size limits, and the practical feasibility with React Native.

11 min read App Clips Play Instant QR Onboarding

1. What App Clips and Instant Apps do, and where React Native hits limits

App Clips on iOS and Instant Apps on Android follow the same core idea: users should be able to try a small, tightly scoped part of an app without installing the full app from the store first. Typical triggers are a scanned QR code at a physical location, an NFC tag, a link in a message, or a Safari App Banner. Instead of the full app, only a heavily reduced feature set launches, built for exactly one use case, such as paying at a parking meter or viewing a single product.

For React Native apps this is not a trivial feature you simply flip on. Both App Clips and Instant Apps operate under strict size limits that sit well below what a typical React Native bundle brings along, including the Hermes engine, native dependencies, and JavaScript payload. Teams serious about these formats need to plan the main app's architecture from the start so a lean, self-contained slice can be carved out, rather than trying to squeeze the entire app into a tight size budget after the fact.

2. iOS App Clips: size limit, architecture, triggers

An App Clip is technically a standalone Xcode target with its own bundle ID, appended to the main app's bundle ID with the .Clip suffix, and is built as a separate, self-contained binary. Apple caps the uncompressed size of this target: for a long time the limit sat at 10 MB, and since iOS 16 it was raised to 15 MB for App Clips using extended capabilities such as ARKit or certain frameworks, while simple clips remain more tightly bounded. If the binary exceeds the limit, App Store Connect rejects the upload outright.

An App Clip is triggered through an App Clip Code, a visual marker that can optionally integrate NFC, through a regular QR code carrying an invocation URL, through a Safari Smart App Banner on a verified domain, or through a link in Messages or Maps. The invocation URL has to be verified via Associated Domains and an apple-app-site-association file on the server, so iOS reliably routes the link to the correct App Clip instead of just opening it in the browser.


// AppClip/QuickShopClipApp.swift
import SwiftUI

@main
struct QuickShopClipApp: App {
  @State private var productId: String?

  var body: some Scene {
    WindowGroup {
      ProductQuickViewView(productId: productId)
        .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in
          guard let url = activity.webpageURL,
                let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
            return
          }
          productId = components.queryItems?.first(where: { $0.name == "product" })?.value
        }
    }
  }
}

3. Android Instant Apps: feature modules and Play Instant

Google Play Instant follows a conceptually different model than App Clips: instead of a separate binary, the regular app itself is split into feature modules, some of which are explicitly marked as instant-enabled. Through the Android App Bundle, the Play Store selects exactly the modules needed for the current entry point at runtime and delivers only that subset, without developers having to maintain a fully separate second project.

A strict size limit applies here too: the compressed download size of all modules required for an instant entry point must not exceed 15 MB, measured across every involved feature module including the base module combined. An Instant App is triggered through a Try Now button in Play Store search results, through a link in Google search results, or through a regular QR code pointing at an address registered as instant-capable.

4. React Native inside an App Clip: is it actually feasible

Whether React Native can realistically fit inside a 15 MB App Clip budget is a fair question. The statically linked Hermes engine and React Native runtime libraries alone consume several megabytes before a single line of business logic or a single UI asset is added. In practice, a minimal React Native clip only works if you aggressively trim dependencies, compress assets, and drop every native module that is not strictly required.

The more pragmatic recommendation for most teams: build the App Clip in native SwiftUI or UIKit and share only the business logic, such as API calls or business rules, with the main app through a shared Swift package. A fully self-contained, very lean React Native clip with its own Metro entry point remains technically possible, but demands continuous size monitoring in the CI pipeline so a future dependency update does not silently blow the size budget.

5. Practical example: QR-code-based quick access to a product catalog

A realistic use case: a QR code posted at a retail display opens an App Clip on scan that shows exactly one product with price, description, and a buy button, with no login and no app installation required. Technically, the product ID is encoded as a query parameter in the invocation URL, for example https://shop.example.com/clip?product=4821, and iOS forwards that parameter to the App Clip scene via NSUserActivity as soon as it launches.

On Android, the comparable flow runs through a deep link that, on scanning the QR code, directly launches the matching instant module with the same product parameter, without the user ever seeing the Play Store, provided the app is configured as instant-capable. In both cases, the actual payment flow is deliberately kept minimal, usually through Apple Pay or Google Pay, because a full checkout form with address entry would defeat the point of a fast first experience.

6. Code-sharing strategy between the main app and the clip or instant module

To keep the main app and the clip or instant module from becoming completely separate codebases, a clear split between the UI layer and the business logic layer pays off from day one. The API client, validation rules, and data models move into a native shared package consumed by both the main app and the clip, while the UI layer deliberately exists twice: once as the full React Native surface, once as a lean native surface for the clip.

This UI duplication looks like extra work at first glance, but it prevents size optimizations for the clip from forcing compromises on the main app's UI. An alternative approach, rarely viable in practice, is a separate Metro bundle entry point with a curated, heavily trimmed dependency list, which then has to be manually re-checked against the size budget every time the main app's dependencies change.


// app/build.gradle.kts
android {
    dynamicFeatures += setOf(":quickview")
}

// quickview/build.gradle.kts
plugins {
    id("com.android.dynamic-feature")
}

dependencies {
    implementation(project(":app"))
}

7. Technical limitations: size, session duration, and feature scope

Beyond the raw size limit, further technical constraints apply. An App Clip only stays active for about eight hours after being backgrounded before iOS terminates it for good, push notifications are only allowed within a narrow window after use and with explicit consent, and access to certain sensitive permissions, such as full contacts access, is blocked outright.

Instant Apps on Android carry similar restrictions: access to dangerous permissions under the Android permission model, such as background location or camera without explicit runtime grant, is limited or fully blocked, and persistent local storage is not guaranteed by the system to carry over into a later full install once the instant session ends, unless explicit migration logic exists through a shared cloud account.

8. Converting from clip or instant app to the full install

The transition from an App Clip to the full app runs through a native StoreKit overlay, SKOverlay, which Apple deliberately renders as a consistent UI element on top of the clip surface, inviting the user to install the full version. So the user does not start from zero after installing, the App Clip and full app share an App Group container through which, for example, an already filled cart or a started booking carries over seamlessly.

On Android Instant Apps, the transition is less noticeable because the same app bundle base is used technically anyway: the Play Store offers an install button directly inside the instant app surface, and because the instant app and full version share the same package ID, local state can continue through shared databases or a server-side user account without any additional migration code.

9. Testing and the App Store or Play Store review process

App Clips can be launched in Xcode through a dedicated scheme with a stored test invocation URL, directly in the simulator or on real devices, without ever having to scan an actual QR code. For beta testing through TestFlight, a dedicated App Clip release process exists, running independently from the main app's release process, because Apple reviews App Clips more strictly on feature scope and explicitly rejects apps whose clip covers more than the advertised fast single use case.

Android Instant Apps are tested locally by extracting them from the app bundle with bundletool, or distributed via an internal app sharing link in the Play Console before the instant-capable modules go live officially. Google also reviews instant-capable modules separately for size, startup time, and permission scope before they become visible to users through Try Now links.

Aspect iOS App Clip Android Instant App
Architecture Standalone binary target Instant modules inside the app bundle
Size limit 10 to 15 MB depending on feature scope 15 MB compressed for all modules combined
Trigger QR code, NFC, Safari banner, Maps Try Now link, search result, QR code
Session duration Around 8 hours after backgrounding No fixed time limit, but restricted permissions
Conversion to full app SKOverlay with App Group data carryover Direct Play Store install with the same package ID

Mironsoft

React Native app development and Magento integration

A mobile app for the Magento shop that actually runs smoothly?

We build React Native apps cleanly connected to the Magento REST or GraphQL API, from the first line of code to publishing on the App Store and Google Play.

App Concept

Plan the architecture and feature scope of a Magento-connected app together.

Magento API Integration

Cleanly connect product catalog, cart, and checkout to the shop API.

Store Publishing

Guide the App Store and Google Play release process without pitfalls.

10. Summary

App Clips and Instant Apps: The Essentials at a Glance

Size limit

10 to 15 MB for App Clips, 15 MB compressed for Instant Apps.

Recommendation

Build the clip UI natively, share business logic through a package with the main app.

Typical trigger

QR code, NFC tag, or link with no prior app installation.

Limitations

Restricted permissions, limited session duration, a stricter review process.

11. FAQ: App Clips and Instant Apps: The Essentials at a Glance

1Can a complete React Native app run as an App Clip?
Theoretically yes, practically only with aggressive dependency trimming, since the Hermes engine and RN runtime alone already consume several megabytes of the tight size budget.
2How big can an App Clip be at most?
Depending on the features used, the limit is 10 to 15 MB uncompressed, sitting at the upper end of that range since iOS 16 for clips using extended frameworks.
3How does an Instant App technically differ from an App Clip?
An Instant App is not a separate binary, it is a subset of the regular app bundle's modules marked as instant-capable, while an App Clip is a completely standalone Xcode target.
4Can an App Clip send push notifications?
Only within a narrow window after use and only with explicit user consent, after that access is blocked.
5How does the cart carry over when converting to the full app?
Through a shared App Group container that both the App Clip and the full app can read from and write to.
6Can an Instant App access the camera?
Only in a limited way, dangerous permissions under the Android permission model still require an explicit runtime grant and are partly blocked entirely.
7How do I test an App Clip without a real QR code?
Through a dedicated Xcode scheme with a stored test invocation URL that launches the clip directly in the simulator or on a real device.
8Does Apple review App Clips more strictly than regular apps?
Yes, the review process explicitly rejects clips whose feature scope goes beyond the advertised fast single use case.
9Do I need a second Android project for Instant Apps?
No, Instant Apps use the same app bundle base as the full version, only individual feature modules are additionally marked as instant-capable.
10What domain configuration does an App Clip need to be triggered by a link?
Associated Domains with a verified apple-app-site-association file on the server, so iOS reliably routes the invocation URL to the correct clip.