Adding React Native as a side to redwood and let people create hybrid apps.
Attack plan:
--mobile flag with create-redwood-app creates a mobile folder with react-native android and ios setups. yarn redwood generate screen screenName would create a new screen using wix/react-native-navigation@skv-headless ,
@skv-headless react native navigation was originally a pure JS based navigation library. They recently changed to native.
I haven't really evaluated react-native-navigation with their new API, but have enjoyed using Wix in the past and found it stable, well documented, and actively maintained.
Expo is easy to kick start but to get the builds to app store, one needs to pay.
This is a bit misleading. Expo apps are still React Native apps, so you can build and publish them to the app store yourself for free. You only need to pay if you want priority builds in their cloud. (Though specific rules could change in the future, I don't think they'll ever prevent you from publishing your apps for free.)
Expo also works on the web (really it's just a glorified react-native-web with some improved compatibility) and has Next.js integration so, in theory, one could write a single redwoodjs app that would run on all three platforms from the get-go. Though I understand that defaulting redwood with Expo might pose some ownership challenges, I think it would make it easier for users to get started while always having the option to eject to a regular RN app.
Expo is good, and in terms of case you want to gain control over the native side, that is a problem for native RN as well, you have to manage it by yourselves. Maintaining those native dependencies does not only mean manage them, you have to manage the whole RN version upgrade path. If you use expo managed flow, you do not need to worry about it.
But, put that aside, I think if redwood wants to integrate RN, there are several ways:
use Expo managed workflow:
ios and android folders for the user, pure jsuse Expo bare workflow:
ios and android folder, which contains the native projectRedwood integration: use plain RN + own webpack config for RNW with
But it is never that easy, The hard parts are:
<div>, <span>, <button>. you have to depends on <View>, <Text>, < Pressable >.grid, media-query, make-you-feel-smart-css-properties because RN 1stThe above problems can be solved in a way that redwood start to ship its own primitive component:
for example, <Box>, <Text>, <Stack>, so it will abstract the RN's <View>, <Text> from the user

For example, in my codebase, I use my own <Box> component, and it is fully type-checked for the theme I generated, and the related types will be generated as well, no styles generated on the fly for performance reason, they are all predefined values. Which means, even for the web version, the same property you use, will generate only one class, like tailwindcss.
It does not do anything else, its purpose is to fill the gap of theme-based primitive components, all your other components are based on these, after this user-land abstraction, we can start talking about cross-platform solution.
Just my 2 cents though. Let's make it happen :) Would love to contribute
Most helpful comment
Expo is good, and in terms of case you want to gain control over the native side, that is a problem for native RN as well, you have to manage it by yourselves. Maintaining those native dependencies does not only mean manage them, you have to manage the whole RN version upgrade path. If you use expo managed flow, you do not need to worry about it.
But, put that aside, I think if redwood wants to integrate RN, there are several ways:
use Expo managed workflow:
iosandandroidfolders for the user, pure jsuse Expo bare workflow:
iosandandroidfolder, which contains the native projectRedwood integration: use plain RN + own webpack config for RNW with
But it is never that easy, The hard parts are:
<div>,<span>,<button>. you have to depends on<View>,<Text>, < Pressable >.grid,media-query, make-you-feel-smart-css-properties because RN 1stThe above problems can be solved in a way that redwood start to ship its own primitive component:
for example,
<Box>, <Text>, <Stack>, so it will abstract the RN's<View>, <Text>from the userFor example, in my codebase, I use my own
<Box>component, and it is fully type-checked for the theme I generated, and the related types will be generated as well, no styles generated on the fly for performance reason, they are all predefined values. Which means, even for the web version, the same property you use, will generate only one class, like tailwindcss.It does not do anything else, its purpose is to fill the gap of theme-based primitive components, all your other components are based on these, after this user-land abstraction, we can start talking about cross-platform solution.
Just my 2 cents though. Let's make it happen :) Would love to contribute