Plain ReactNative-Expo setup with pure JavaScript
Source: Dev.to
Presets
- Package manager: Bun
- SDK: 54.0.25
- Language: JavaScript
- Command interface: Bash integrated into terminal
- OS: Windows
For this guide we’ll use bun as the package manager.
Create a project from the starter template
degit https://github.com/Franklivania/expo-js-starter.git
Initialise a bare‑bones Expo project
bun create expo --template blank
Navigate into the project and open it in your editor (the example uses Cursor):
cd && cursor .
Install required dependencies
bun install \
react-native-reanimated \
react-native-screens \
lucide-react-native \
expo-haptics \
expo-router \
expo-image \
expo-linking \
expo-font \
expo-constants \
expo-blur \
expo-system-ui \
react-native-web \
react-native-worklets \
react-native-safe-area-context \
@react-native-community/netinfo \
@react-native-async-storage/async-storage@next \
@react-navigation/bottom-tabs \
@react-navigation/elements \
@react-navigation/native \
expo-splash-screen \
react-dom \
react-native-svg
These packages provide the core functionality needed for a plain JavaScript Expo app.
Configuration
jsconfig.json (optional)
Create or update jsconfig.json to simplify import paths:
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"],
"~/*": ["./assets/*"]
}
}
}
Babel (babel.config.js)
Configure Babel to use the Expo preset and the worklets plugin:
module.exports = function (api) {
api.cache(true);
return {
presets: ["babel-preset-expo"],
plugins: ["react-native-worklets/plugin"]
};
};
app.json
Add the required plugins (Expo Router and Splash Screen) to app.json:
{
"plugins": [
"expo-router",
[
"expo-splash-screen",
{
"image": "./assets/images/splash-icon.png",
"imageWidth": 200,
"resizeMode": "contain",
"backgroundColor": "#ffffff",
"dark": {
"backgroundColor": "#000000"
}
}
]
]
}
Entry point
Update the main field in package.json to point to the Expo Router entry:
{
"main": "expo-router/entry"
}
Expo will automatically locate your layout file (e.g., /app/_layout.jsx or /src/app/_layout.jsx).
Verify dependency compatibility
Run the Expo doctor to check for mismatched versions:
bunx expo-doctor
If issues are reported, fix them with:
bunx expo install --check
After confirming everything is compatible, you can safely delete the default index.js and App.js files.
Final notes
That’s it! You now have a plain JavaScript Expo project set up without the default TypeScript configuration. Happy coding! 🍻💻