ignite
Infinite Red's battle-tested React Native project boilerplate, along with a CLI, component/model generators, and more!
Top Related Projects
👾 Clean and minimalist React Native template for a quick start with TypeScript.
An open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.
Material Design for React Native (Android & iOS)
A complete native navigation solution for React Native
Routing and navigation for your React Native apps
Quick Overview
Ignite is a CLI and boilerplate generator for React Native projects. It provides a set of tools and templates to quickly set up and develop React Native applications with best practices and popular libraries pre-configured.
Pros
- Rapid project setup with pre-configured tools and libraries
- Customizable boilerplate templates for different project needs
- Built-in generators for components, screens, and other common elements
- Active community and regular updates
Cons
- Learning curve for developers new to the Ignite ecosystem
- Some opinionated choices in project structure and tooling
- May require additional configuration for complex or unique project requirements
- Potential overhead for simple projects that don't need all the included features
Code Examples
- Creating a new Ignite project:
npx ignite-cli@latest new PizzaApp
This command creates a new React Native project named "PizzaApp" using the latest Ignite CLI.
- Generating a new component:
npx ignite-cli generate component Button
This generates a new Button component with associated files and tests.
- Adding a new screen:
npx ignite-cli generate screen Profile
This creates a new Profile screen with routing and navigation pre-configured.
Getting Started
To get started with Ignite, follow these steps:
- Install Node.js and npm (if not already installed)
- Install the Ignite CLI globally:
npm install -g ignite-cli
- Create a new Ignite project:
ignite new MyAwesomeApp
- Navigate to the project directory:
cd MyAwesomeApp
- Start the development server:
npm start
You can now begin developing your React Native app with Ignite's pre-configured setup and tools.
Competitor Comparisons
👾 Clean and minimalist React Native template for a quick start with TypeScript.
Pros of react-native-template-typescript
- Lightweight and focused solely on TypeScript integration
- Official template maintained by the React Native community
- Minimal setup, allowing developers to add their preferred libraries
Cons of react-native-template-typescript
- Lacks pre-configured tools and best practices
- Requires more manual setup for common React Native development needs
- Limited out-of-the-box features compared to Ignite
Code Comparison
react-native-template-typescript:
import React from 'react';
import { View, Text } from 'react-native';
const App: React.FC = () => (
<View>
<Text>Hello, World!</Text>
</View>
);
Ignite:
import React from 'react'
import { AppNavigator } from './navigators'
import { RootStore, RootStoreProvider, setupRootStore } from './models'
import { ErrorBoundary } from './screens/error/error-boundary'
export const App: React.FC = () => {
const [rootStore, setRootStore] = useState<RootStore | undefined>(undefined)
useEffect(() => {
setupRootStore().then(setRootStore)
}, [])
The react-native-template-typescript provides a basic TypeScript setup for React Native projects, focusing on type safety. Ignite, on the other hand, offers a more comprehensive boilerplate with additional features like state management, navigation, and error handling out of the box. While react-native-template-typescript gives developers more flexibility in choosing their stack, Ignite provides a more opinionated and feature-rich starting point for React Native applications.
An open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.
Pros of Expo
- Simpler setup and configuration process
- Extensive built-in libraries and APIs
- Over-the-air updates without app store approval
Cons of Expo
- Limited access to native modules and custom native code
- Larger app size due to included libraries
- Potential performance issues for complex applications
Code Comparison
Expo:
import React from 'react';
import { Text, View } from 'react-native';
import { Camera } from 'expo-camera';
export default function App() {
return (
<View style={{ flex: 1 }}>
<Camera style={{ flex: 1 }} />
</View>
);
}
Ignite:
import React from 'react'
import { View } from 'react-native'
import { Camera } from 'react-native-camera'
export default function App() {
return (
<View style={{ flex: 1 }}>
<Camera style={{ flex: 1 }} />
</View>
)
}
The code comparison shows that Expo provides a more streamlined approach to using device features like the camera, with built-in modules. Ignite, on the other hand, requires separate installation of third-party libraries but offers more flexibility in choosing and configuring native modules.
Expo is generally easier for beginners and rapid prototyping, while Ignite provides more control and customization options for experienced developers working on complex projects.
Material Design for React Native (Android & iOS)
Pros of React Native Paper
- Comprehensive UI component library specifically designed for React Native
- Follows Material Design guidelines, ensuring a consistent and modern look
- Regular updates and active community support
Cons of React Native Paper
- Limited to Material Design aesthetics, which may not suit all app styles
- Requires additional setup and configuration compared to Ignite's boilerplate
- May have a steeper learning curve for developers new to Material Design
Code Comparison
React Native Paper:
import { Button } from 'react-native-paper';
const MyComponent = () => (
<Button mode="contained" onPress={() => console.log('Pressed')}>
Press me
</Button>
);
Ignite:
import { Button } from '../components/Button'
const MyComponent = () => (
<Button text="Press me" preset="primary" onPress={() => console.log('Pressed')} />
)
Summary
React Native Paper is a UI component library focused on Material Design, offering a wide range of pre-built components. Ignite, on the other hand, is a boilerplate and CLI tool for React Native projects, providing a complete project structure and custom components.
While React Native Paper excels in providing a consistent Material Design look, Ignite offers more flexibility in terms of project structure and custom styling. The choice between the two depends on project requirements, design preferences, and development workflow.
A complete native navigation solution for React Native
Pros of react-native-navigation
- Native navigation implementation, offering smoother transitions and better performance
- Extensive customization options for navigation elements
- Strong community support and regular updates
Cons of react-native-navigation
- Steeper learning curve, especially for developers new to React Native
- Requires additional setup and configuration compared to Ignite's out-of-the-box solution
- May introduce compatibility issues with certain third-party libraries
Code Comparison
react-native-navigation:
Navigation.setRoot({
root: {
stack: {
children: [
{
component: {
name: 'Home'
}
}
]
}
}
});
Ignite (using React Navigation):
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
While react-native-navigation offers native performance and extensive customization, Ignite provides a more streamlined setup with its boilerplate and integrated navigation solution. The choice between the two depends on project requirements, team expertise, and desired level of control over navigation implementation.
Routing and navigation for your React Native apps
Pros of React Navigation
- Focused solely on navigation, providing a comprehensive and flexible solution
- Extensive documentation and community support
- Regular updates and maintenance
Cons of React Navigation
- Requires additional setup and configuration for a complete app structure
- Limited to navigation functionality, lacking other app development features
Code Comparison
React Navigation:
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
Ignite:
import { AppNavigator } from "./navigators"
import { RootStore, RootStoreProvider, setupRootStore } from "./models"
import { ErrorBoundary } from "./screens/error/error-boundary"
function App() {
const [rootStore, setRootStore] = useState<RootStore | undefined>(undefined)
useEffect(() => {
setupRootStore().then(setRootStore)
}, [])
if (!rootStore) return null
return (
<RootStoreProvider value={rootStore}>
<ErrorBoundary catchErrors="always">
<AppNavigator />
</ErrorBoundary>
</RootStoreProvider>
)
}
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Ignite - the battle-tested React Native boilerplate
Proven React Native boilerplate
The culmination of over seven years of constant React Native development, Ignite is the most popular React Native app boilerplate for both Expo and bare React Native.
This is the React Native boilerplate that the Infinite Red team uses on a day-to-day basis to build client apps. Developers who use Ignite report that it saves them two to four weeks of time on average off the beginning of their React Native project!
Intro Videos
Here are a few videos / talks that introduce Ignite and show off some of its features. Check them out!
Full Documentation
We've put great effort into the documentation as a team, please read through it here. If you're unsure why a certain decision was made related to this boilerplate or how to proceed with a particular feature, it's likely documented. If it still isn't clear, go through the proper help channels and we always welcome PRs to improve the docs!
Tech Stack
Nothing makes it into Ignite unless it's been proven on projects that Infinite Red works on. Ignite apps include the following rock-solid technical decisions out of the box:
Library | Category | Version | Description |
---|---|---|---|
React Native | Mobile Framework | v0.74 | The best cross-platform mobile framework |
React | UI Framework | v18 | The most popular UI framework in the world |
TypeScript | Language | v5 | Static typechecking |
React Navigation | Navigation | v6 | Performant and consistent navigation framework |
MobX-State-Tree | State Management | v5 | Observable state tree |
MobX-React-Lite | React Integration | v3 | Re-render React performantly |
Expo | SDK | v51 | Allows (optional) Expo modules |
Expo Font | Custom Fonts | v12 | Import custom fonts |
Expo Localization | Internationalization | v15 | i18n support (including RTL!) |
Expo Status Bar | Status Bar Library | v1 | Status bar support |
RN Reanimated | Animations | v3 | Beautiful and performant animations |
AsyncStorage | Persistence | v1 | State persistence |
apisauce | REST client | v2 | Communicate with back-end |
Reactotron RN | Inspector/Debugger | v3 | JS debugging |
Hermes | JS engine | Fine-tuned JS engine for RN | |
Jest | Test Runner | v26 | Standard test runner for JS apps |
Maestro | Testing Framework | Automate end-to-end UI testing | |
date-fns | Date library | v2 | Excellent date library |
FlashList | FlatList replacement | v1 | A performant drop-in replacement for FlatList |
Ignite also comes with a component library that is tuned for custom designs, theming support, testing, custom fonts, generators, and much, much more.
Quick Start
Prerequisites:
- You'll need at least a recent version of Node to run the CLI
- For compiling/running in a simulator, make sure you're set up for React Native by following the official documentation.
The Ignite CLI will walk you through the steps to ignite a new React Native app:
# Get walked through the prompts for the different options to start your new app
npx ignite-cli@latest new PizzaApp
# Accept all the recommended defaults and get straight to coding!
npx ignite-cli@latest new PizzaApp --yes
Once you're up and running, check out our Getting Started Guide.
If you'd like to follow a tutorial, check out this one from Robin Heinze.
Troubleshooting
The above commands may fail with various errors, depending on your operating system and dependency versions. Some troubleshooting steps to follow:
- Uninstall global versions of the Ignite CLI via
npm uninstall -g ignite-cli
and use the CLI vianpx ignite-cli
- Make sure you are using a reasonably recent version of Node. This can be checked via the
node --version
command. If you require multiple Node versions on your system, installnvm
, and then runnvm install --lts
. At the time of writing, Node LTS is v20.x.x. - If the installation fails because of an Xcode error (missing Xcode command line tools), the easiest way to install them is to run
sudo xcode-select --install
in your terminal. - If Xcode and command line tools are already installed, but the installation complains about missing patch dependencies, you may need to switch the Xcode location to something else:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
- Opening the project in Xcode can give you other insights into what's happening:
open ./ios/<yourapp>.xcworkspace
- Add the
--debug
switch to the Ignite CLI new command to provide additional output during project initialization
Reporting Bugs / Getting Help
If you run into problems, first search the issues and discussions in this repository. If you don't find anything, you can come talk to our friendly and active developers in the Infinite Red Community Slack (community.infinite.red).
If you still need help after reaching out to the proper channels, feel free to open a new GitHub issue via npx ignite-cli issue "Unable to Ignite new app"
(as an example). This will help start writing your issue with the correct diagnostic information included.
Contributing to Ignite
Want to contribute to Ignite? Check out the contributing guide for more info on how to work with the codebase.
Need Inspiration?
If you need battle-tested solutions from Infinite Red experts on everything from Accessibility, to CI/CD configuration, head to Ignite Cookbook for code snippets from our team and the community!
No time to learn React Native? Hire Infinite Red for your next project
We get it â sometimes there just isnât enough time on a project to learn the ins and outs of a new framework. Infinite Redâs here to help! Our experienced team of React Native engineers have worked with companies like Microsoft, GasBuddy, Zoom, and Mercari to bring some of the most complex React Native projects to life.
Whether itâs running a full project or training a team on React Native, we can help you solve your companyâs toughest engineering challenges â and make it a great experience at the same time.
Ready to see how we can work together? Send us a message
Further Reading
- Watch Jamon Holmgren's talk at React Live Amsterdam 2019 where he uses Ignite to build an app in less than 30 minutes: https://www.youtube.com/watch?v=OgiFKMd_TeY
- Prior art includes Ignite Andross and Ignite Bowser (which is very similar to the current version of Ignite).
- Who are We? - Learn More About Infinite Red, the top React Native app development company
Top Related Projects
👾 Clean and minimalist React Native template for a quick start with TypeScript.
An open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.
Material Design for React Native (Android & iOS)
A complete native navigation solution for React Native
Routing and navigation for your React Native apps
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot