Build native Apple targets without leaving Expo
Expo Apple Targets is a Config Plugin that generates native Apple targets like Widgets, App Clips, Safari Extensions, and more—all while keeping your source files outside the/ios directory. Develop in Xcode, and your changes persist through prebuild.
Quickstart
Get a working widget up and running in minutes
Installation
Prerequisites and setup for your Expo project
Target config
Configure icons, colors, entitlements, and more
GitHub repository
View the source code and contribute
What you can build
Expo Apple Targets supports 30+ native Apple extension types:- Widgets & Live Activities - Home screen widgets with real-time updates
- App Clips - Lightweight app experiences that launch instantly
- Share Extensions - Add your app to the iOS share sheet
- Safari Extensions - Content blockers and web extensions
- Notification Extensions - Rich notifications with custom UI
- Watch Apps - Companion apps for Apple Watch
- Control Widgets - Quick actions in Control Center
- Siri Intents - Voice shortcuts and app intents
- And 20+ more extension types
This plugin requires CocoaPods 1.16.2+, Xcode 16+ (macOS Sequoia), and Expo SDK 53+.
How it works
Unlike traditional iOS development, Expo Apple Targets uses Continuous Native Generation to keep your native code outside the generatedios/ directory:
- Create a target - Run
npx create-target widgetto scaffold a new target in/targets - Develop in Xcode - Open your project and edit files in the
expo:targets/virtual folder - Changes persist - Your edits are saved outside
/ios, survivingprebuild --clean - Build and ship - Build in Xcode or use EAS Build for automated CI/CD
/targets directory. Each subfolder contains an expo-target.config.js file that defines target settings, and all files in that folder become part of the target.
Why use this plugin?
Building native Apple extensions traditionally requires:- Manual Xcode project configuration
- Complex entitlements and provisioning setup
- Files lost every time you regenerate your iOS project
- Separate build processes for each target
- ✅ Automated Xcode project setup via Config Plugin
- ✅ Source files preserved outside generated
/iosdirectory - ✅ Automatic entitlements and App Group configuration
- ✅ Integrated EAS Build support for CI/CD
- ✅ Full TypeScript types for target configuration
Real-world examples
This plugin powers production apps like Pillar Valley with home screen widgets and App Clips. Check out the blog post to see how widgets were built using this plugin.Read the full guide
Follow the quickstart to build your first widget