Bare Workflow

When to Eject to a Bare Workflow

"Ejecting" meant the old global Expo 6,418 CLI's expo eject, which turned a managed app into a plain React Native 36,878 project with committed android/ and ios/ folders. Today the same step is running npx expo prebuild once, deleting /android and /ios from .gitignore, and committing the result. From then on the native folders are yours: prebuild will not regenerate them, and every Expo SDK upgrade means merging native template changes by hand (the React Native Upgrade Helper shows the diffs).

That trade pays only when native changes cannot be expressed as config or code that CNG regenerates: vendor SDKs demanding hand-edited Gradle 19,597 and Xcode 10 settings, a native app that embeds React Native screens (a "brownfield" app), or native developers who own the projects directly. Everything this section needed stayed within CNG. Try a config plugin or an Expo Module first, and treat committing android/ as a one-way door: going back to CNG means rewriting every manual change as a plugin.