WindowsmacOSLinux

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

Windows
%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.

macOS
~/.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.

Linux
~/.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.