Configure Expo Apps with app.json and app.config.js
A skill configuring Expo app.config.js/eas.json with env variants, plugins, deep linking, and OTA update setup.
Why it matters
Streamline your React Native development by leveraging this expert asset to configure your Expo projects. It specializes in creating robust `app.json` and `app.config.js` files, ensuring optimal platform-specific settings, build configurations, and deployment strategies.
Outcomes
What it gets done
Generate dynamic and static Expo configurations using `app.config.js` and `app.json`.
Implement platform-specific settings for iOS and Android, including permissions and capabilities.
Optimize EAS build configurations and manage environment-specific variables securely.
Configure advanced features like deep linking, plugins, and asset management.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-expo-config-setup | bash Overview
Expo Config Setup Expert
This skill configures Expo apps via app.config.js and eas.json, covering environment-specific app variants, EAS build profiles, native plugin permissions, platform-specific assets, and deep linking setup for both iOS and Android. Use it when an Expo app needs environment-aware configuration, native plugin setup, or deep linking rather than a default app.json.
What it does
This skill configures Expo apps for React Native - app.json/app.config.js setup, SDK features, platform-specific configuration, build settings, and deployment optimization. Core principle: use static app.json for configuration that doesn't change between environments, and dynamic app.config.js when environment variables or conditional logic are needed, never hardcoding sensitive data directly in either. Both iOS and Android should always be configured explicitly, respecting each platform's own permission and capability conventions rather than assuming shared defaults.
When to use - and when NOT to
Use it when an Expo app needs environment-aware configuration (dev/preview/production app names, bundle IDs, and schemes), native plugin setup, or deep linking - not just a default app.json.
const IS_DEV = process.env.APP_VARIANT === 'development';
const IS_PREVIEW = process.env.APP_VARIANT === 'preview';
export default {
expo: {
name: IS_DEV ? 'MyApp (Dev)' : IS_PREVIEW ? 'MyApp (Preview)' : 'MyApp',
slug: IS_DEV ? 'myapp-dev' : IS_PREVIEW ? 'myapp-preview' : 'myapp',
extra: { apiUrl: process.env.API_URL, eas: { projectId: process.env.EAS_PROJECT_ID } },
updates: { url: `https://u.expo.dev/${process.env.EAS_PROJECT_ID}` },
runtimeVersion: { policy: 'sdkVersion' }
}
};
Inputs and outputs
EAS build profiles are configured in eas.json (development with developmentClient: true, preview, and production, each carrying its own APP_VARIANT env var). Plugin configuration is shown for expo-camera, expo-location, expo-notifications, and async-storage, each with platform-specific permission-prompt text. Asset configuration covers icon and splash-screen images at platform-specific resolutions, including per-density Android splash variants (mdpi through xxxhdpi) and a tablet-specific iOS splash image. Deep linking setup covers a custom scheme, iOS associatedDomains for universal links, and Android intentFilters with autoVerify for App Links. Security and performance guidance: never commit sensitive env variables, use EAS Secrets for build-time sensitive values, implement certificate pinning in production, and scope assetBundlePatterns plus metro.config.js tree-shaking to control bundle size.
Who it's for
React Native developers configuring an Expo app's environment variants, native plugins, and deep linking who need concrete app.config.js/eas.json patterns, not just the Expo documentation's individual reference pages. Common pitfalls it calls out directly: missing platform-specific bundle identifiers, incorrect asset dimensions causing build failures, forgetting to bump version codes before store submission, skipping runtime-version configuration needed for OTA updates, and missing permission descriptions for features the app actually uses - each worth checking with expo doctor, a local build, and deep-link testing on both platforms before submitting to EAS, alongside verifying asset loading across different screen densities and confirming permission prompts show the exact intended descriptions rather than a generic system default.
FAQ
Common questions
Discussion
Questions & comments ยท 0
Sign In Sign in to leave a comment.