Where Does Expo Store Project State and Caches?
Expo keeps per-project state in .expo and shared caches in ~/.expo. What each holds, what to gitignore, and EXPO_NO_CACHE.
Last updated
Starting the dev server creates a .expo directory at the project root with devices.json and settings.json. Both describe your local machine only: recent devices, manifest serving config. New projects gitignore the folder by default, and it should stay that way.
The heavier downloads live globally in ~/.expo: simulator builds, templates and config schemas. Set EXPO_NO_CACHE to skip global caching when debugging corrupt downloads. Metro's own bundler cache is separate again, cleared with npx expo start -c.
Where Expo stores this, by platform
%USERPROFILE%\.expo
Global caches for simulators, templates and schemas. Per-project state sits in .expo at the project root. Clear bundler weirdness with npx expo start -c.
~/.expo
Same global role, including iOS simulator app caches that grow large. Keep .expo and .expo-shared out of version control. EXPO_NO_CACHE disables global caching entirely.
~/.expo
Mirrors macOS. XDG relocation has been requested upstream but home-relative ~/.expo remains the default, so scripts can rely on it.
Frequently asked questions
Should I commit the .expo folder?
No. It holds machine-specific dev-server state like devices.json and settings.json. Leave it gitignored as new templates do. Share .expo-shared instead if teammates need common project settings.
Expo downloads keep failing, where is the cache?
In the global ~/.expo folder: android-apk-cache, ios-simulator-app-cache and template-cache subfolders. Delete the offending one and retry, or set EXPO_NO_CACHE for a fully uncached run.
Notice an outdated path? Let us know.