{"id":10570,"date":"2024-09-04T12:03:39","date_gmt":"2024-09-04T12:03:39","guid":{"rendered":"https:\/\/dianapps.com\/blog\/?p=10570"},"modified":"2024-09-04T12:03:39","modified_gmt":"2024-09-04T12:03:39","slug":"building-a-react-native-app-without-expo-a-comprehensive-guide","status":"publish","type":"post","link":"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/","title":{"rendered":"Building a React Native App Without Expo: A Comprehensive Guide"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Expo is a favorite tool for creating mobile applications for many React Native app developers. It streamlines the process by providing pre-configured tools and services that enable you to immediately launch your app.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sometimes, though, you might want to forego Expo and create your React Native <\/span><a href=\"https:\/\/dianapps.com\/blog\/how-to-build-your-first-ever-android-app-from-scratch\/\"><span style=\"font-weight: 400;\">app from scratch<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This article will assist you through the process whether you need greater control over native modules, want to maximize performance, or just want to stay away from some of Expo&#8217;s constraints.\u00a0<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Why-Build-a-React-Native-App-Without-Expo\"><\/span><span style=\"font-weight: 400;\">Why Build a React Native App Without Expo?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">While Expo provides a streamlined environment for React Native development, it also abstracts a lot of the underlying configurations. This can be both a blessing and a curse. By not using Expo, you gain several advantages:<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Full-Control-Over-Native-Modules\"><\/span><span style=\"font-weight: 400;\">Full Control Over Native Modules<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Expo simplifies many tasks, but it also limits your ability to access and modify native code directly. For instance, if you want to integrate custom native modules or third-party libraries that require native code modifications, using Expo can be restrictive. Building without Expo allows you to have full control over native modules, enabling you to add features that may not be supported by Expo.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Better-Performance\"><\/span><span style=\"font-weight: 400;\">Better Performance<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">For large-scale applications, the overhead introduced by Expo can sometimes lead to performance bottlenecks. Expo apps tend to include a lot of pre-configured features that, while useful, may not be necessary for your specific app. By bypassing Expo, you can strip down your app to only include the features you need, resulting in faster load times and more efficient resource management.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"No-Dependency-on-Expo-SDK-Versions\"><\/span><span style=\"font-weight: 400;\">No Dependency on Expo SDK Versions<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Expo regularly updates its SDK, and while this ensures that you have access to the latest features, it can also be a limitation. If you need to use a version of React Native that is not yet supported by the latest Expo SDK, you\u2019re stuck waiting for Expo to catch up. By building your app without Expo, you have the freedom to update React Native and other dependencies as soon as new versions are released.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Also read: <\/span><a href=\"https:\/\/dianapps.com\/blog\/react-native-app-targeting-mobile-web-desktop-with-expo-tauri\/\"><span style=\"font-weight: 400;\">React Native app targeting mobile, web, desktop with expo tauri.<\/span><\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Setting-Up-the-Development-Environment\"><\/span><span style=\"font-weight: 400;\">Setting Up the Development Environment<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Before you start building your React Native app without Expo, it&#8217;s essential to have the right development environment set up. Here\u2019s a detailed guide to getting your environment ready:<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-1-Install-Nodejs-and-npmyarn\"><\/span><span style=\"font-weight: 400;\">Step 1: Install Node.js and npm\/yarn<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">React Native relies on Node.js, a JavaScript runtime built on Chrome&#8217;s V8 JavaScript engine. npm (Node Package Manager) or yarn will help you manage your project&#8217;s dependencies. To install Node.js, visit the<\/span><a href=\"https:\/\/nodejs.org\/\" target=\"_blank\" rel=\"nofollow noopener\"><span style=\"font-weight: 400;\"> official Node.js website<\/span><\/a><span style=\"font-weight: 400;\"> and download the latest stable version.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Once Node.js is installed, npm will be installed automatically. If you prefer using yarn, you can install it globally using npm:<\/span><\/p>\n<p><b>npm install -g yarn<\/b><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-2-Install-React-Native-CLI\"><\/span><span style=\"font-weight: 400;\">Step 2: Install React Native CLI<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">The React Native CLI is a command-line tool that enables you to initialize and manage React Native projects without relying on Expo. You can install it globally using npm or yarn:<\/span><\/p>\n<p><b>npm install -g react-native-cli<\/b><\/p>\n<p><span style=\"font-weight: 400;\">This CLI will be your primary tool for creating new projects, running your app, and managing other development tasks.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-3-Install-Java-Development-Kit-JDK\"><\/span><span style=\"font-weight: 400;\">Step 3: Install Java Development Kit (JDK)<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">If you&#8217;re developing for Android, you\u2019ll need to install the Java Development Kit (JDK). The JDK provides the necessary tools for compiling and running Java code, which is essential for Android development.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can download the JDK from the<\/span><a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase-jdk11-downloads.html\" target=\"_blank\" rel=\"nofollow noopener\"><span style=\"font-weight: 400;\"> Oracle website<\/span><\/a><span style=\"font-weight: 400;\"> or use an open-source alternative like OpenJDK.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After installation, ensure that the JDK is properly set up by adding it to your system&#8217;s PATH environment variable. This allows your system to recognize Java commands from the terminal.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-4-Set-Up-Android-Studio\"><\/span><span style=\"font-weight: 400;\">Step 4: Set Up Android Studio<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Android Studio is the official Integrated Development Environment (IDE) for Android development. It includes the Android SDK, which provides the necessary tools to build, test, and debug Android apps. Download and install Android Studio from the<\/span><a href=\"https:\/\/developer.android.com\/studio\" target=\"_blank\" rel=\"nofollow noopener\"><span style=\"font-weight: 400;\"> official website<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After installation, open Android Studio and follow the setup wizard to install the necessary components, including the Android SDK, Android Virtual Device (AVD), and any additional tools required for your development needs.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You will also need to set up the Android SDK location in your system environment variables:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Windows: <\/b><span style=\"font-weight: 400;\">Go to System Properties &gt; Environment Variables, and add a new variable named ANDROID_HOME pointing to the Android SDK directory.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>macOS\/Linux: <\/b><span style=\"font-weight: 400;\">Add the following line to your .bash_profile, .zshrc, or equivalent:<\/span><\/li>\n<\/ul>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\">export ANDROID_HOME=$HOME\/Library\/Android\/sdk\r\n\r\nexport PATH=$PATH:$ANDROID_HOME\/emulator\r\n\r\nexport PATH=$PATH:$ANDROID_HOME\/tools\r\n\r\nexport PATH=$PATH:$ANDROID_HOME\/tools\/bin\r\n\r\nexport PATH=$PATH:$ANDROID_HOME\/platform-tools<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Step-5-Install-Xcode-For-iOS-Development\"><\/span><span style=\"font-weight: 400;\">Step 5: Install Xcode (For iOS Development)<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">If you&#8217;re targeting iOS, Xcode is an essential tool. Xcode is the official IDE for <\/span><a href=\"https:\/\/dianapps.com\/ios-app-development\"><b>iOS app development services<\/b><\/a> <span style=\"font-weight: 400;\">and includes the necessary tools to build, test, and debug iOS apps. You can download Xcode from the Mac App Store.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After installing Xcode, open it and agree to the terms and conditions. You may also need to install additional components, such as command-line tools, which Xcode will prompt you to install when you first run it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ensure that you have the latest version of Xcode, as older versions may not support the latest iOS features or may cause compatibility issues with React Native.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Initializing-the-React-Native-Project\"><\/span><span style=\"font-weight: 400;\">Initializing the React Native Project<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">With your environment set up, you&#8217;re ready to <\/span><a href=\"https:\/\/dianapps.com\/blog\/how-to-build-and-deploy-a-react-native-app\/\"><span style=\"font-weight: 400;\">build and deploy a React Native<\/span><\/a><span style=\"font-weight: 400;\"> project. Unlike Expo, where everything is handled behind the scenes, creating a project without Expo gives you full control over the process.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-1-Create-a-New-Project\"><\/span><span style=\"font-weight: 400;\">Step 1: Create a New Project<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To create a new React Native project, use the React Native CLI:<\/span><\/p>\n<p><b>react-native init MyApp<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Replace MyApp with your desired project name. The react-native init command generates a new React Native project with all the necessary files and configurations. This includes native directories (android\/ and ios\/), JavaScript files, and the basic structure needed to start building your app.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-2-Understanding-the-Directory-Structure\"><\/span><span style=\"font-weight: 400;\">Step 2: Understanding the Directory Structure<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Once the project is initialized, you&#8217;ll notice a different directory structure compared to an Expo project. Here&#8217;s an overview of the key directories and files:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>android\/:<\/b><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"> This directory contains Android-specific code and configurations. You&#8217;ll find Gradle build files, AndroidManifest.xml, and Java files for your Android app.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>ios\/: <\/b><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">This directory contains iOS-specific code and configurations. It includes Xcode project files, Info.plist, and Swift or Objective-C files for your iOS app.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>src\/: <\/b><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Although this directory is not created by default, it&#8217;s a good practice to create a src\/ directory for your application&#8217;s main code. This helps keep your project organized and separates your app logic from platform-specific code.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>App.js: <\/b><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">This is the main entry point for your React Native application. You can start building your UI and logic here.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>node_modules\/: <\/b><span style=\"font-weight: 400;\">This directory contains all the dependencies your project needs, installed via npm or yarn.<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Managing-Dependencies\"><\/span><span style=\"font-weight: 400;\">Managing Dependencies<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">One of the significant differences when building a React Native app without Expo is that you\u2019ll need to manage dependencies manually. This offers greater flexibility but requires a deeper understanding of how React Native and its libraries work.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-1-Installing-Libraries\"><\/span><span style=\"font-weight: 400;\">Step 1: Installing Libraries<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Without Expo, you can install any library directly using npm or yarn. For example, if you want to add a library for navigation, you can install it like this:<\/span><\/p>\n<p><b>npm install @react-navigation\/native<\/b><\/p>\n<p><span style=\"font-weight: 400;\">After installing the navigation library, you may need to install additional dependencies and set up your project to use them:<\/span><\/p>\n<p><b>npm install react-native-screens react-native-safe-area-context<\/b><\/p>\n<p><span style=\"font-weight: 400;\">For libraries that involve native code, additional steps may be required. React Native CLI automates much of this through auto-linking, but in some cases, you might need to manually link the library:<\/span><\/p>\n<p><b>react-native link some-library<\/b><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-2-Customizing-the-Build-Process\"><\/span><span style=\"font-weight: 400;\">Step 2: Customizing the Build Process<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">When using Expo, the build process is handled for you. However, without Expo, you\u2019ll need to manage your build configurations, especially if you want to customize the build process for Android or iOS.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For Android, you can modify the build.gradle files to customize how your app is built. This might involve setting different build types (e.g., debug, release), configuring ProGuard for code obfuscation, or setting up multi-APK support.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For iOS, you can modify the Xcode project settings. This might involve setting up different schemes for development and production, configuring the app\u2019s signing and provisioning profiles, or optimizing the build settings for performance.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Running-the-App\"><\/span><span style=\"font-weight: 400;\">Running the App<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">With your dependencies installed and the build process configured, you&#8217;re ready to run your app. The process varies slightly depending on whether you&#8217;re targeting Android or iOS.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-1-Running-on-Android\"><\/span><span style=\"font-weight: 400;\">Step 1: Running on Android<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To run your app on an Android device or emulator, use the following command:<\/span><\/p>\n<p><b>react-native run-android<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Before running this command, make sure you have an Android emulator running or a physical Android device connected to your computer via USB. The React Native CLI will handle the build process and automatically launch your app on the device.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Also read: <\/span><a href=\"https:\/\/dianapps.com\/blog\/android-mvp-app-with-react-native-framework\/\"><span style=\"font-weight: 400;\">How to create an MVP Android app in React Native framework<\/span><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-2-Running-on-iOS\"><\/span><span style=\"font-weight: 400;\">Step 2: Running on iOS<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To run your app on an iOS device or simulator, use the following command:<\/span><\/p>\n<p><b>react-native run-ios<\/b><\/p>\n<p><span style=\"font-weight: 400;\">This command will open the iOS Simulator and launch your app. If you want to run the app on a specific device or simulator, you can specify the device name:<\/span><\/p>\n<p><b>react-native run-ios &#8211;device &#8220;iPhone 12&#8221;<\/b><\/p>\n<p><span style=\"font-weight: 400;\">For deployment to a physical iOS device, ensure that your Xcode project is configured with the correct signing and provisioning profiles. You may also need to trust the developer certificate on your iOS device.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Adding-Native-Modules\"><\/span><span style=\"font-weight: 400;\">Adding Native Modules<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">One of the main reasons to avoid Expo is the ability to add custom native modules. This is particularly useful when you need to access device features that Expo does not support or when you want to optimize performance by writing custom native code.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-1-Understanding-Native-Modules\"><\/span><span style=\"font-weight: 400;\">Step 1: Understanding Native Modules<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Native modules are pieces of code written in platform-specific languages (Java\/Kotlin for Android, Swift\/Objective-C for iOS) that allow you to access device features or integrate with other native libraries. React Native provides a bridge that allows JavaScript code to communicate with these native modules.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, if you want to access a device\u2019s <\/span><a href=\"https:\/\/dianapps.com\/blog\/react-native-camera-know-the-library-comparison\/\"><span style=\"font-weight: 400;\">camera<\/span><\/a><span style=\"font-weight: 400;\"> or GPS, you might need to write or integrate a native module.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-2-Adding-a-Native-Module\"><\/span><span style=\"font-weight: 400;\">Step 2: Adding a Native Module<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To add a native module, you\u2019ll need to modify the code in the android\/ or ios\/ directories. Here\u2019s a high-level overview of the steps:<\/span><\/p>\n<p><b>Android:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Navigate to the android\/ directory and open the appropriate Java file in the app\/src\/main\/java\/com\/myapp\/ directory.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Create a new Java class for your native module and extend it from ReactContextBaseJavaModule.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Implement the methods you need and register the module with React Native.<\/span><\/li>\n<\/ul>\n<p><b>iOS:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Navigate to the ios\/ directory and open the appropriate Swift or Objective-C file.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Create a new class for your native module, ensuring it conforms to the RCTBridgeModule protocol.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Implement the methods you need and register the module with React Native.<\/span><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Step-3-Linking-the-Native-Module\"><\/span><span style=\"font-weight: 400;\">Step 3: Linking the Native Module<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">After creating the native module, you\u2019ll need to link it with your React Native project. This step involves updating the MainApplication.java (for Android) or AppDelegate.m (for iOS) files to include the new module.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For Android, add the following to your MainApplication.java:<\/span><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">@Override\r\n\r\nprotected List&lt;ReactPackage&gt; getPackages() {\r\n\r\n\u00a0\u00a0return Arrays.&lt;ReactPackage&gt;asList(\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0new MainReactPackage(),\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0new YourNativeModulePackage() \/\/ Add your module here\r\n\r\n\u00a0\u00a0);\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">For iOS, add the following to your AppDelegate.m:<\/span><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">#import &lt;YourNativeModule.h&gt; \/\/ Import your module\r\n\r\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\r\n\r\n{\r\n\r\n\u00a0\u00a0RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];\r\n\r\n\u00a0\u00a0RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0moduleName:@\"MyApp\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0initialProperties:nil];\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0\/\/ Additional setup code\r\n\r\n\u00a0\u00a0return YES;\r\n\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">Once linked, your <\/span><a href=\"https:\/\/dianapps.com\/react-native-app-development\"><b>React Native app development services<\/b><\/a><span style=\"font-weight: 400;\"> can communicate with the native module, allowing you to use native device features directly from JavaScript.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Handling-Updates-and-Dependencies\"><\/span><span style=\"font-weight: 400;\">Handling Updates and Dependencies<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Without Expo managing your environment, keeping your app up-to-date is your responsibility. Regularly updating your dependencies is crucial to ensure your app remains secure, performant, and compatible with the <\/span><a href=\"https:\/\/dianapps.com\/blog\/react-native-0-74-yoga-3-0-bridgeless-new-architecture-and-more\/\"><span style=\"font-weight: 400;\">latest versions of React Native<\/span><\/a><span style=\"font-weight: 400;\"> and its libraries.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-1-Updating-Dependencies\"><\/span><span style=\"font-weight: 400;\">Step 1: Updating Dependencies<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To check for updates to your dependencies, you can use the npm-check-updates tool. This tool compares your current dependencies with the latest versions available and updates your package.json accordingly.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">First, install npm-check-updates globally:<\/span><\/p>\n<p><b>npm install -g npm-check-updates<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Then, check for updates:<\/span><\/p>\n<p><b>ncu -u<\/b><\/p>\n<p><span style=\"font-weight: 400;\">This command updates your package.json with the latest versions of your dependencies. To install the updated dependencies, run:<\/span><\/p>\n<p><b>npm install<\/b><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-2-Updating-React-Native\"><\/span><span style=\"font-weight: 400;\">Step 2: Updating React Native<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Updating React Native itself can be more involved, as it may require you to update both JavaScript and native code. The React Native community provides a React Native Upgrade Helper tool that guides you through the upgrade process.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To update React Native, follow these steps:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Update the react-native version in your package.json to the desired version.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Run npm install or yarn install to install the updated version.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Use the React Native Upgrade Helper to manually update any necessary files in the android\/ and ios\/ directories.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Regularly updating React Native and your dependencies ensures that your app benefits from the latest features, security patches, and performance improvements.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Debugging-and-Testing\"><\/span><span style=\"font-weight: 400;\">Debugging and Testing<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Debugging and testing are essential parts of the development process. Without Expo, you&#8217;ll need to rely on different tools and techniques to ensure your app is bug-free and performs well across different devices and platforms.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-1-Debugging-Tools\"><\/span><span style=\"font-weight: 400;\">Step 1: Debugging Tools<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">React Native provides several tools for debugging:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>React Developer Tools: <\/b><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">A standalone app that allows you to inspect the React component hierarchy, view props and state, and debug the app&#8217;s UI.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Chrome Developer Tools: <\/b><span style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">You can use the Chrome DevTools to debug your JavaScript code. To do this, run your app in development mode and press Cmd+D (iOS) or Cmd+M (Android) to open the developer menu. Then, select &#8220;Debug&#8221; to open Chrome DevTools.<\/span><\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Flipper: <\/b><span style=\"font-weight: 400;\">A desktop app for debugging mobile apps. It provides a wide range of tools, including network inspection, layout inspection, and performance monitoring.<\/span><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Step-2-Unit-Testing\"><\/span><span style=\"font-weight: 400;\">Step 2: Unit Testing<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Unit testing ensures that individual components of your app work as expected. You can use testing libraries like Jest, which comes pre-configured with React Native projects.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To write a unit test, create a test file in the __tests__\/ directory and write your test cases using Jest syntax. For example:<\/span><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\">import React from 'react';\r\n\r\nimport { render } from '@testing-library\/react-native';\r\n\r\nimport MyComponent from '..\/src\/MyComponent';\r\n\r\ntest('renders correctly', () =&gt; {\r\n\r\n\u00a0\u00a0const { getByText } = render(&lt;MyComponent \/&gt;);\r\n\r\n\u00a0\u00a0expect(getByText('Hello, World!')).toBeTruthy();\r\n\r\n});<\/pre>\n<p><span style=\"font-weight: 400;\">Run the tests using the following command:<\/span><\/p>\n<p><b>npm test<\/b><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step-3-Integration-Testing\"><\/span><span style=\"font-weight: 400;\">Step 3: Integration Testing<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Integration testing ensures that different parts of your app work together correctly. You can use libraries like Detox for end-to-end testing of React Native apps.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Detox tests run on real devices or emulators, simulating user interactions to ensure your app functions correctly in a real-world scenario.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To set up Detox, follow the official documentation for installation and configuration. Once set up, you can write and run your integration tests.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Typical-Mistakes-and-How-to-Prevent-Them\"><\/span><span style=\"font-weight: 400;\">Typical Mistakes and How to Prevent Them<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">You have greater control when building a React Native project without Expo, but there are drawbacks as well. The following are typical dangers and tips for avoiding them:<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"First-Pitfall-Dependency-Issues\"><\/span><span style=\"font-weight: 400;\">First Pitfall: Dependency Issues<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">You may get into issues with conflicts between various libraries or versions while manually handling dependencies. Runtime issues or build failures may result from this.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Solution:<\/strong> Make sure your dependencies are compatible with one another and periodically check for changes. To properly handle updates, use tools such as the React Native Upgrade Helper and npm-check-updates.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Pitfall-2-Problems-with-Native-Code\"><\/span><span style=\"font-weight: 400;\">Pitfall 2: Problems with Native Code<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">It might be difficult to work with native code, particularly if you&#8217;re not experienced with iOS or Android programming. Incorrect setups, missing files, and compatibility issues can all cause issues.<\/span><\/p>\n<p><b>Solution: <\/b><span style=\"font-weight: 400;\">Begin by learning the fundamentals of iOS and Android coding. To become proficient with native code, consult official documentation and community resources. If problems arise, look for answers in the React Native GitHub source and community forums.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Third-Pitfall-Bottlenecks-in-Performance\"><\/span><span style=\"font-weight: 400;\">Third Pitfall: Bottlenecks in Performance<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Without Expo, you&#8217;ll have to manually improve the speed of your app. This may be difficult, particularly for intricate programs with many of dependencies and components.<\/span><\/p>\n<p><b>Solution: <\/b><span style=\"font-weight: 400;\">Track the performance of your app and locate bottlenecks with tools like Flipper. Reduce the number of pointless re-renders, make advantage of memoization, and utilize as few heavy libraries as possible to optimize your code.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"The-Best-Ways-to-Develop-React-Native-Applications-Without-Expense\"><\/span><span style=\"font-weight: 400;\">The Best Ways to Develop React Native Applications Without Expense<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Use these recommended practices to guarantee a seamless app development process and high quality product:<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Best-Practice-1-Organize-Your-Codebase\"><\/span><span style=\"font-weight: 400;\">Best Practice 1: Organize Your Codebase.<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Keeping the codebase well-organized is essential to long-term maintainability. For the primary code of your project, use a consistent file structure, such the src\/ directory. To make your project easier to explore, group together utilities, services, and similar components.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Best-Practice-2-Compose-Modular-Code\"><\/span><span style=\"font-weight: 400;\">Best Practice 2: Compose Modular Code<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">It is simpler to test, debug, and maintain modular programs. Segment your application into manageable, reusable parts that each take care of a certain UI element or piece of logic. This facilitates updating specific areas of your program without impacting the remainder.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Best-Practice-3-Regularly-Update-Dependencies\"><\/span><span style=\"font-weight: 400;\">Best Practice 3: Regularly Update Dependencies<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Performance concerns, compatibility difficulties, and security risks might result from outdated dependencies. Update your dependencies often to guarantee that your program takes advantage of the newest additions and enhancements.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Best-Practice-4-Test-Often\"><\/span><span style=\"font-weight: 400;\">Best Practice 4: Test Often\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To make sure your app functions as intended on all platforms and devices, testing is essential. Write integration tests for user flows and unit tests for individual components. When testing, if feasible, use real devices to identify problems that may not show up in simulations.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Best-Practice-5-Monitoring-Performance\"><\/span><span style=\"font-weight: 400;\">Best Practice 5: Monitoring Performance\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">For a user experience to be seamless, performance is essential. Utilize resources like as Flipper and React Developer Tools to track the functionality of your project and pinpoint areas in need of development. Optimize your code to decrease battery depletion, increase load times, and use less memory.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Best-Practice-6-Document-Your-Code\"><\/span><span style=\"font-weight: 400;\">Best Practice 6: Document Your Code<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">It is simpler for you and other people to comprehend your code when there is good documentation. For intricate parts, modules, and services, jot down concise remarks and provide documentation. When bringing on new team members or reviewing your code after a lengthy absence, this will save time.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span><span style=\"font-weight: 400;\">Conclusion<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Although creating a React Native app without Expo takes more time and technical expertise, you have more control over the features and architecture of your project.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You&#8217;ll be well-equipped to build a strong and effective React Native app that meets your unique requirements if you follow this course.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Remember to stay organized, keep your dependencies up-to-date, test your app thoroughly, and hire a <\/span><a href=\"https:\/\/dianapps.com\/mobile-app-development\"><b>mobile app development company <\/b><\/a><span style=\"font-weight: 400;\">like DianApps to ensure the best possible user experience.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Expo is a favorite tool for creating mobile applications for many React Native app developers. It streamlines the process by providing pre-configured tools and services that enable you to immediately launch your app. Sometimes, though, you might want to forego Expo and create your React Native app from scratch. This article will assist you through [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":10613,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_wp_applaud_exclude":false,"footnotes":""},"categories":[3],"tags":[136,56,842],"class_list":["post-10570","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-app-development","tag-react-native-app","tag-react-native-app-development","tag-react-native-app-without-an-expo"],"featured_image_src":{"landsacpe":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2024\/09\/React-Native-App-Without-Expo-1140x445.png",1140,445,true],"list":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2024\/09\/React-Native-App-Without-Expo-463x348.png",463,348,true],"medium":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2024\/09\/React-Native-App-Without-Expo-300x169.png",300,169,true],"full":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2024\/09\/React-Native-App-Without-Expo.png",1536,864,false]},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.12 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Create a React Native App Without Expo<\/title>\n<meta name=\"description\" content=\"Learn how to build a React Native app without using Expo. Explore a step-by-step guide on setup, development, &amp; customization techniques.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a React Native App Without Expo\" \/>\n<meta property=\"og:description\" content=\"Learn how to build a React Native app without using Expo. Explore a step-by-step guide on setup, development, &amp; customization techniques.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn About Digital Transformation &amp; Development | DianApps Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-04T12:03:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2024\/09\/React-Native-App-Without-Expo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"864\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Vikash Soni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vikash Soni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Create a React Native App Without Expo","description":"Learn how to build a React Native app without using Expo. Explore a step-by-step guide on setup, development, & customization techniques.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/","og_locale":"en_US","og_type":"article","og_title":"Create a React Native App Without Expo","og_description":"Learn how to build a React Native app without using Expo. Explore a step-by-step guide on setup, development, & customization techniques.","og_url":"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/","og_site_name":"Learn About Digital Transformation &amp; Development | DianApps Blog","article_published_time":"2024-09-04T12:03:39+00:00","og_image":[{"width":1536,"height":864,"url":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2024\/09\/React-Native-App-Without-Expo.png","type":"image\/png"}],"author":"Vikash Soni","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vikash Soni","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/","url":"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/","name":"Create a React Native App Without Expo","isPartOf":{"@id":"https:\/\/dianapps.com\/blog\/#website"},"datePublished":"2024-09-04T12:03:39+00:00","dateModified":"2024-09-04T12:03:39+00:00","author":{"@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/0126fafc83e42bece2acbfe92f7d0f4f"},"description":"Learn how to build a React Native app without using Expo. Explore a step-by-step guide on setup, development, & customization techniques.","breadcrumb":{"@id":"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/dianapps.com\/blog\/building-a-react-native-app-without-expo-a-comprehensive-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dianapps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a React Native App Without Expo: A Comprehensive Guide"}]},{"@type":"WebSite","@id":"https:\/\/dianapps.com\/blog\/#website","url":"https:\/\/dianapps.com\/blog\/","name":"Learn About Digital Transformation &amp; Development | DianApps Blog","description":"Dianapps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dianapps.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/0126fafc83e42bece2acbfe92f7d0f4f","name":"Vikash Soni","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2022\/07\/cropped-vikash-96x96.png","contentUrl":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2022\/07\/cropped-vikash-96x96.png","caption":"Vikash Soni"},"description":"Vikash Soni, the visionary CEO and Co-founder of DianApps. With his profound expertise in Android and iOS app development, he leads the team to deliver top-notch solutions to clients worldwide. Under his guidance, the company has achieved remarkable success, earning a reputation as a leading web and mobile app development company.","sameAs":["https:\/\/www.linkedin.com\/in\/vikash-soni-59726530\/"],"url":"https:\/\/dianapps.com\/blog\/author\/infodianapps-com\/"}]}},"_links":{"self":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/10570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/comments?post=10570"}],"version-history":[{"count":5,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/10570\/revisions"}],"predecessor-version":[{"id":10612,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/10570\/revisions\/10612"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/media\/10613"}],"wp:attachment":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/media?parent=10570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/categories?post=10570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/tags?post=10570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}