Interview frequency: …
Short answer
They are small parts of an app that open instantly from web links or NFC codes without a full installation, and require a strict maximum bundle size (usually below 10–15 MB) and a fully independent function.
Explanation
App Clips let a user pay a restaurant bill or rent a bike immediately after scanning a QR code, without downloading the full app from the store. Expo does not provide built-in official support for building them; the native target is usually added with community Config Plugins (such as @bacons/apple-targets) or by modifying the native project, subject to strict limits on asset and library size to ensure fast launch.
Code example
// iOS: invoke the App Clip from a website — apple-app-site-association (served at /.well-known/)
// {
// "appclips": { "apps": ["TEAMID.com.example.myapp.Clip"] }
// }
// Android Instant App: the instant-enabled module is declared in its manifest
// <manifest xmlns:dist="http://schemas.android.com/apk/distribution">
// <dist:module dist:instant="true" />
// </manifest>
// Expo has no first-party App Clip support: add the target with a community config plugin
// (e.g. @bacons/apple-targets) in app.config.ts, and keep each experience under the size limits
// (App Clip ≈ 15 MB uncompressed on recent iOS; Instant App ≈ 15 MB per feature module).
export default { plugins: ["@bacons/apple-targets"] };Common mistakes
- Importing the full app's large libraries into the App Clip code, exceeding Apple's maximum permitted size.
Follow-up questions
- What are Expo Config Plugins, and how do they safely modify native code and libraries?
- What is the modern Expo architecture, and what is Continuous Native Generation (CNG)?