I'm writing this because I faced the problem recently. When I was wasting my time, the solution was right in front of me in documentation.
Steps
Create an expo app
npx create-expo-app@latest
this will create a template for your project.
NativeWind v4 installation
Step 1
Install nativewind in expo with necessary packages given in doc
npx expo install nativewind tailwindcss react-native-reanimated react-native-safe-area-context
Step 2
then run
npx tailwindcss init
this will create an tailwind.config.js
file.
and paste this, also find it in documentation of nativewind v4
/** @type {import('tailwindcss').Config} */ module.exports = { // NOTE: Update this to include the paths to all of your component files. content: ["./app/**/*.{js,jsx,ts,tsx}"], presets: [require("nativewind/preset")], theme: { extend: {}, }, plugins: [], }
Step 3
Now, create a global.css file in root directory.
Step 4
Update babel.config.js
. If you are using expo which is below 50 then follow expo below 49 sdk
module.exports = function (api) { api.cache(true); return { presets: [ ["babel-preset-expo", { jsxImportSource: "nativewind" }], "nativewind/babel", ], }; };
Step 5
Create metro.config.js
if not have, then add this below codes. This is for Expo SDK 50+
only. If you are using expo which is below 50 then follow expo below 49 sdk
const { getDefaultConfig } = require("expo/metro-config"); const { withNativeWind } = require("nativewind/metro"); const config = getDefaultConfig(__dirname); module.exports = withNativeWind(config, { input: "./global.css" });
Step 6
Create an nativewind-env.d.ts
file and add
/// <reference types="nativewind/types" />
For the final step, import the global.css
to the app/_laybout.tsx
import { Stack } from "expo-router"; import * as SplashScreen from "expo-splash-screen"; import "react-native-reanimated"; import "../global.css"; // Prevent the splash screen from auto-hiding before asset loading is complete. SplashScreen.preventAutoHideAsync(); export default function RootLayout() { return ( <Stack> <Stack.Screen name="index" options={{ headerShown: false }} /> </Stack> ); }
Now, tailwindcss is working in your react native expo project with NativeWind v4.
import React from "react"; import { Text } from "react-native"; import { SafeAreaView } from "react-native-safe-area-context"; const App = () => { return ( <SafeAreaView> <Text className="text-blue-600 font-bold text-3xl "> Creating app with expo </Text> </SafeAreaView> ); }; export default App;
Working...
Note: All these are written in the Official documentation of NativeWind. I just wanted to keep them here, so that no newbie face the problem like me and waste their precious time.
Top comments (2)
In global.css file, I would suggest to add this code: "@tailwind base;
@tailwind components;
@tailwind utilities;"
Some comments may only be visible to logged-in visitors. Sign in to view all comments.