{"id":19292,"library":"babel-preset-expo","title":"babel-preset-expo","description":"The official Babel preset for Expo projects, enabling JSX, modern JavaScript, and React Native / web support. Current stable version is 55.0.18. Updated regularly alongside Expo SDK releases. Automatically configures transforms for Expo modules, React Native, and React Native Web. Differentiators: seamless integration with Expo toolchain, automatic platform detection (ios/android/web), and optimized settings for Metro bundler. Requires @babel/runtime and react-refresh for development reloading.","status":"active","version":"55.0.18","language":"javascript","source_language":"en","source_url":"https://github.com/expo/expo","tags":["javascript","babel","babel-preset","expo","expo-web","react-native","react-native-web","metro","webpack","typescript"],"install":[{"cmd":"npm install babel-preset-expo","lang":"bash","label":"npm"},{"cmd":"yarn add babel-preset-expo","lang":"bash","label":"yarn"},{"cmd":"pnpm add babel-preset-expo","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"peer dependency; preset is designed for Expo projects","package":"expo","optional":false},{"reason":"runtime helpers for transpiled code","package":"@babel/runtime","optional":false},{"reason":"enables Fast Refresh in development","package":"react-refresh","optional":true}],"imports":[{"note":"Used in babel.config.js, not imported in app code. Common mistake: trying to import in JavaScript.","wrong":"import babelPresetExpo from 'babel-preset-expo'","symbol":"default","correct":"module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'] }; }"},{"note":"Must call api.cache() in Babel config. Omitting api.cache() can cause performance issues or stale cache.","wrong":"module.exports = { presets: ['babel-preset-expo'] }","symbol":"function","correct":"// babel.config.js\nmodule.exports = function(api) {\n  api.cache(true);\n  return {\n    presets: ['babel-preset-expo'],\n  };\n};"},{"note":"Also works in .babelrc; ensure valid JSON.","wrong":"Using .babelrc with invalid JSON or missing presets array","symbol":"default","correct":".babelrc\n{\n  \"presets\": [\"babel-preset-expo\"]\n}"}],"quickstart":{"code":"// babel.config.js\nmodule.exports = function(api) {\n  api.cache(true);\n  return {\n    presets: [['babel-preset-expo', {\n      // Options: 'ios', 'android', 'web', or 'react-native' (default auto-detects)\n      // Uncomment to override:\n      // platform: 'web',\n      // react-compiler: false, // enable React Compiler (experimental)\n    }]],\n    plugins: [\n      // Additional plugins\n    ],\n  };\n};","lang":"javascript","description":"Configures Expo Babel preset in babel.config.js with optional platform override and comments on available options."},"warnings":[{"fix":"Add 'expo-widgets': '^55.0.14' to dependencies, or install expo-widgets","message":"In v55, expo-widgets peer dependency was added. Projects without expo-widgets may fail to install.","severity":"breaking","affected_versions":">=55.0.0"},{"fix":"Replace 'lazyImports' with 'rewriteImportPath' in preset options.","message":"The 'lazyImports' option is deprecated. Use 'rewriteImportPath' instead.","severity":"deprecated","affected_versions":">=55.0.0"},{"fix":"For web-only projects, set platform: 'web' explicitly. For React DOM projects, consider using @babel/preset-react instead.","message":"Using babel-preset-expo with plain React (not React Native) may cause unexpected transforms for JSX and platform-specific code.","severity":"gotcha","affected_versions":">=50.0.0"},{"fix":"Run npm install @babel/runtime --save (or --save-dev)","message":"In v50, the preset stopped bundling @babel/runtime. You must install @babel/runtime separately.","severity":"breaking","affected_versions":">=50.0.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Upgrade Babel packages to ^7.12.0 or later.","cause":"Using an older Babel version (<7.12)","error":"Requires Babel 7.12+"},{"fix":"Run: npm install @babel/runtime","cause":"Missing @babel/runtime dependency","error":"Cannot find module '@babel/runtime/helpers/interopRequireDefault'"},{"fix":"Replace 'transform-remove-console' with 'expo-remove-console' in plugins list.","cause":"Removed in v55; use 'expo-remove-console' plugin instead","error":"Unknown plugin 'transform-remove-console'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}