1--- 2title: 'Config plugins: Introduction' 3description: An introduction to config plugins for the Expo project. 4sidebar_title: Introduction 5--- 6 7import { Terminal } from '~/ui/components/Snippet'; 8import { BoxLink } from '~/ui/components/BoxLink'; 9import { BookOpen02Icon } from '@expo/styleguide-icons'; 10 11An automatic setup for adding a native module to your project is possible. Sometimes, a module requires a more complex setup. A config plugin can be used to automatically configure your native project for a module and reduce the complexity by avoiding interaction with the native project. 12 13## What is a config plugin 14 15Config plugin is a system for extending the [app config](/workflow/configuration) and customizing the prebuild process for your app. They can be used to add native modules that aren't included, by default, or to add any native code that needs to be configured further. 16 17Internally Expo CLI uses config plugins to generate and configure all the native code for a managed project. Plugins do things such as generate app icons, set the app name, and configure the **AndroidManifest.xml**, **Info.plist**, and so on. 18 19You can think of plugins like a bundler for native projects, and running `npx expo prebuild` as a way to bundle the projects by evaluating all the project plugins. Doing so will generate **android** and **ios** directories. These directories can be modified manually after being generated, but then they can no longer be safely regenerated without potentially overwriting manual modifications. 20 21## Use a config plugin 22 23Expo config plugins mostly come from Node.js modules. You can install them just like other packages in your project. 24 25For example, `expo-camera` has a plugin that adds camera permissions to the **AndroidManifest.xml** and **Info.plist**. To install it in your project, run the following command: 26 27<Terminal cmd={['$ npx expo install expo-camera']} /> 28 29In your app's config (**app.json**, or **app.config.js**), you can add `expo-camera` to the list of plugins: 30 31```json app.json 32{ 33 "expo": { 34 "plugins": ["expo-camera"] 35 } 36} 37``` 38 39Some plugins such as for [`expo-camera`](/versions/latest/sdk/camera/) can be customized by passing an array, where the second argument is the options: 40 41```json app.json 42{ 43 "expo": { 44 "plugins": [ 45 [ 46 "expo-camera", 47 { 48 "cameraPermission": "Allow $(PRODUCT_NAME) to access your camera." 49 } 50 ] 51 ] 52 } 53} 54``` 55 56> For each Expo package that a config plugin is available for, you'll find more information about that in the [package's API reference](/versions/latest/). 57 58On running the `npx expo prebuild`, the [`mods`]() are compiled, and the native files change. 59 60The changes don't take effect until you rebuild the native project, for example, with Xcode. **If you're using config plugins in a managed app, 61they will be applied during the prebuild phase on `eas build`**. 62 63## Next step 64 65<BoxLink 66 title="Create a plugin" 67 description="Learn about how you can create a config plugin." 68 href="/config-plugins/plugins-and-mods" 69 Icon={BookOpen02Icon} 70/> 71