Expo Router
Installation
1. Install NativeWind
You will need to install nativewind@^4.0.1
and it's peer dependencies tailwindcss
and react-native-reanimated
.
- npm
- yarn
- pnpm
- Expo
npm install nativewind@^4.0.1 react-native-reanimated
npm install -D tailwindcss
yarn add nativewind@^4.0.1 react-native-reanimated
yarn add -D tailwindcss
pnpm install nativewind@^4.0.1 react-native-reanimated
pnpm install -D tailwindcss
npx expo install nativewind@^4.0.1 react-native-reanimated
npx expo install -D tailwindcss
Run pod-install
to install Reanimated pod:
npx pod-install
2. Setup Tailwind CSS
Run npx tailwindcss init
to create a tailwind.config.js
file
Add the paths to all of your component files in your tailwind.config.js file.
tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
- content: [],
+ content: ["./<custom-folder>/**/*.{js,jsx,ts,tsx}"],
+ presets: [require("nativewind/preset")],
theme: {
extend: {},
},
plugins: [],
}
Create a CSS file and add the Tailwind directives
global.css
@tailwind base;
@tailwind components;
@tailwind utilities;
info
From here onwards, replace ./your-css-file.css
with the relative path to the CSS file you just created
3. Add the Babel preset
babel.config.js
module.exports = {
- presets: ['babel-preset-expo'],
+ presets: [
+ ["babel-preset-expo", { jsxImportSource: "nativewind" }],
+ "nativewind/babel",
+ ],
plugins: [
// Required for expo-router
"expo-router/babel",
"react-native-reanimated/plugin",
],
};
4. Modify your metro.config.js
If your project does not have a metro.config.js
run npx expo customize metro.config.js
- SDK 49
- SDK 50+
metro.config.js
const { getDefaultConfig } = require("expo/metro-config");
+ const { withNativeWind } = require('nativewind/metro');
- const config = getDefaultConfig(__dirname)
+ const config = getDefaultConfig(__dirname, { isCSSEnabled: true })
- module.exports = config
+ module.exports = withNativeWind(config, { input: './your-css-file.css' })
metro.config.js
const { getDefaultConfig } = require("expo/metro-config");
+ const { withNativeWind } = require('nativewind/metro');
const config = getDefaultConfig(__dirname)
- module.exports = config
+ module.exports = withNativeWind(config, { input: './your-css-file.css' })
5. Import your CSS file
app/_layout.js
import Slot from "expo-router/Slot";
+ import "./<your-css-file>.css"
export default Slot
6. TypeScript (optional)
Please follow the TypeScript guide.