React Native Radio

RNR 257 - META RESPONDS! How can we improve React Native, part 2

Episode Summary

Meta’s core React Native team responded to the latest discussion about what could be improved in React Native. Robin, Mazen, and Jamon go over their response!

Episode Notes

Meta’s core React Native team responded to the latest discussion about what could be improved in React Native. Robin, Mazen, and Jamon go over their response!

This episode is brought to you by Infinite Red! Infinite Red is a premier React Native design and development agency located in the USA. With five years of React Native experience and deep roots in the React Native community (hosts of Chain React and the React Native Newsletter), Infinite Red is the best choice for your next React Native app.

Helpful Links:

  1. Original thread
  2. Meta’s Response
  3. RNR 196

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio Podcast, brought to you by my mother. She wants you to know that she brought me into this world and she can take me out. Nice.

Episode 257, "Meta Responds! How can we improve React Native?"

Jamon Holmgren:

You've all heard all this buzz around ChatGPT lately and someone at Infinite Red thought it would be a funny idea to run one of our episodes, like the transcript, through ChatGPT and ask it to summarize and come up with its own script.

Robin Heinze:

Hold on, hold on, hold on. What's ChatGPT?

Jamon Holmgren:

Okay, so for those of you living under a rock lately or just out driving your tractor, ChatGPT is an AI chat tool put out by OpenAI, and it is really amazing. It's incredibly amazing. When you use it, it just kind of blows your mind regularly.

Mazen Chami:

Some of the screenshots I've seen are pretty cool how it can predict things and just start talking to you, basically.

Jamon Holmgren:

Yeah.

Robin Heinze:

I haven't used it yet, but I almost don't need to because Jamon uses it enough and posts screenshots.

Jamon Holmgren:

I think you need to. I think you need to, Robin.

Robin Heinze:

I should. You should give me a tutorial later.

Jamon Holmgren:

I actually used it for parenting advice this week.

Robin Heinze:

Oh, I saw. I think you posted on Twitter about that and I saw it.

Mazen Chami:

Oh, how did that go?

Jamon Holmgren:

Well, okay, so we're going far field of our planned warmer, but that's okay.

We were in a situation where our 11-year-old daughter had kind of some issues with a friend at school and they were texting each other, which is its own issue. Don't yell at me. But they were texting each other and it was not going well, and really, maybe I'm just being a little bit favorable toward my kid, but I feel like the other kid was being way more mean. My kid's a very sweet girl.

Robin Heinze:

You're not biased at all, though.

Jamon Holmgren:

Not at all. And so, my wife and I were like, "Okay, we just need to have them not text each other. This is just not going well." But we didn't want to do it in a way where the other girl would feel like we're blaming her or anything like that.

So I actually ran that through ChatGPT and I just kind of laid out the situation and said, "Give me an example text of what I could send to this other girl," and it gave me something that was maybe a little too harsh and I told it to kind of soften it and a few other things. It eventually it got to a point where there was a great draft tweet, or not tweet, I'm not tweeting this girl, a great draft text that I could send over to this girl from my daughter's phone.

And do you want me to read it for you? I'll actually read it.

Robin Heinze:

Yeah, yeah.

Mazen Chami:

Yeah. Was this actually sent?

Robin Heinze:

Yeah, I actually sent it.

Mazen Chami:

Was there a knock on your door five minutes later?

Robin Heinze:

This is going to be the future. This is going to be baked into our houses. We're just going to be like, "Hey." It'll have a cool name like Jarvis or something.

Jamon Holmgren:

Right? All right, so I just said "Hi," her name.

Mazen Chami:

Redacted.

Jamon Holmgren:

This is my daughter's name. "Dad, we noticed that you and our daughter have been having some issues lately and we feel it would be good for you two to take a break and have some space for a while. We'll be turning off the ability for her to text you, so that's why she won't respond. Feel free to show your parents this message and if they want to discuss, I'm more than happy to. My number for them is," and I gave my number. "I hope you and your family have a good Christmas and New Year."

So ChatGPT wrote the first draft of that and it was pretty good. I was like, "Okay, yeah, I can roll with this." The first one that I had come up with was not nearly as good.

Mazen Chami:

Huh. It's pretty cool.

Jamon Holmgren:

Now I can outsource parenting to machines.

Robin Heinze:

Now see, it's not good at everything though.

Jamon Holmgren:

Yet.

Robin Heinze:

I mean, you mentioned that you ran our show through it. You said what our podcast is about.

Jamon Holmgren:

Yeah. Someone at Infinite Red thought that they would run it through and sort of get a summary of the episode and what did they get? They got a sports show. They thought it was a sports show.

Mazen Chami:

Isn't that what this is?

Jamon Holmgren:

I mean...

Mazen Chami:

Clearly ChatGPT stopped listening after the first five minutes. It was like, "What is this?"

Jamon Holmgren:

That was the interesting part. Right.

Robin Heinze:

I'm guessing, I wonder if it's reading the transcripts and only reads the first paragraph where we talk about sports.

Jamon Holmgren:

What if ChatGPT has ADHD and is like, "Yeah, I've lost the thread"?

Robin Heinze:

I got the gist.

Jamon Holmgren:

Yeah. So I think we need to... No, you know what? We're not going to do that. We're not going to go into sports this time. This time, actually ChatGPT is going to look at the transcript and think we're a parenting advice show.

Robin Heinze:

There you go.

Mazen Chami:

Mm-hmm.

Jamon Holmgren:

All right. Well, Let's get started. We actually have a long episode ahead of us, so let's try to go as quickly as we can. There's a lot to go over.

I'm Jamon Holmgren, your host, friendly CTO of Infinite Red. I live in the beautiful Pacific Northwest with my wife and four kids. I play recreational hockey, even with my bum knee now, I'm planning to play this Saturday, and I drive my tractor whenever I get an excuse to, which has actually been many months, unfortunately.

I'm joined today by my surpassing co-hosts, Robin and Mazen. Robin Heinze is a Senior Software Engineer at Infinite Red. She's located west of Portland, Oregon with her husband and two kids and has specialized in React Native for the past five years. She is also the proud winner of the Over-30 Indoor League with a game-winning penalty save. Wait a minute here.

Mazen Chami:

Wrong person, ChatGPT.

Robin Heinze:

That definitely is not supposed to go in my bio.

Jamon Holmgren:

Wait, how did that end up in her bio though? I think you put it in the wrong spot there, Mazen. Well, that lets me kind of transition.

Robin Heinze:

Ratted him out. Wow. Just right under the bus.

Jamon Holmgren:

Yeah. Mazen Chami lives in Durham, North Carolina with his wife and baby boy. He's a former pro soccer player and coach. See, this makes more sense. And is a Senior React Native Engineer also here at Infinite Red. I'll reread that. Proud winner of the Over-30 Indoor League game-winning penalty save That is awesome, Mazen.

Robin Heinze:

Come on, talk me when you win the Under-30 Indoor League. I'm sorry, I'm sorry. I'm just kidding. I'm just kidding.

Mazen Chami:

We went to the finals and lost. It's okay.

Robin Heinze:

That's amazing.

Jamon Holmgren:

That is really cool. So it went to penalty shots or what happened?

Mazen Chami:

Mm-hmm. Sudden death penalties, yeah.

Jamon Holmgren:

Oh, okay. So it's like a shootout in hockey?

Mazen Chami:

Yeah.

Jamon Holmgren:

That's awesome. You got to be feeling good about that. Very cool. Congrats.

This episode is sponsored by Chain React 2023. Chain React is back. It is the biggest and best US-based React Native conference. You got to come to it. It's in Portland, May 17th through 19th, and you can find out more information, buy tickets, early bird tickets. You can even submit a CFP if this episode comes out in time, if you go to chainreactconf.com. So go check it out. Please do join us.

I think you'll be interacting with me, with Robin, with Mazen. We'll all be there. We're going to be hanging out, interacting with everybody. We might even do a React Native radio thing there. We're not sure yet. We haven't totally decided, but it's going to be a great show.

Robin Heinze:

Whatever we do, you won't get to experience it unless you buy tickets.

Jamon Holmgren:

Yeah, you got to buy tickets, you got to come. It's just the best place to be for React. I mean, seriously. Surrounded by 500 React Native nerds all nerding out on all things React Native. You got to be there. If you're listening to this, you're a React Native nerd. Like, come on.

All right, let's get into our topic for today.

So Meta has responded to the, How Can We improve React Native? thread and so this is a follow-up to React Native Radio 254 where we went over the common complaints about React Native and the stuff that really needs to be fixed and Meta has actually come back and responded to that. So we're going to just be going through those one at a time, and there were actually quite a few comments in there. We won't go over them all. We'll link to the whole discussion in the show notes.

But I thought it was actually really cool, a lot of the responses. Some of them, we'll definitely have some opinions about and whatnot, but I think it's going to be a good discussion.

So the first one is actually a really interesting one. The title of it is, "Upgrade Story is Not Compelling," but it's actually more about the new architecture. It's about why are you wanting to update to the new architecture? How do we convince our bosses that this is worth it if, at the end of the day, it kind of comes back to right back where we started essentially, just with a lot of work? It doesn't feel like something that we can really cohesively sell. What are the benefits of the new architecture essentially?

Mazen Chami:

Yeah, I think because this is so brand new and fresh out of the box, people are finding it hard, potentially one, to upgrade and see all the improvements that we've talked about on the show and that Meta has brought up about what this new architecture actually is.

But I think one thing to keep in mind is this is a step-by-step process to get us to the end goal that we've talked about. Right now, I think, the new architecture, its capabilities, if you want to hone in on one part of it, is just the synchronous rendering and that's probably something that you'll see immediately. Now, the performance gains and all the other stuff that we've mentioned along the lines of this are coming down the lines. So I think it's probably conveying the message better, which is what this thread, this specific comment, kind of talks about.

Robin Heinze:

Well, and they specifically call out that performance gains are not the goal. There may be performance gains, but the goal is performance-neutral, not to regress performance. And really, the goal of the new architecture is to unlock the new features.

Mazen Chami:

I think synchronous rendering alone, you should see some performance gains from that because you're not re-rendering two or three times by setting a statement, you're getting one re-render from all that.

Robin Heinze:

You're not going back and forth across the bridge.

Jamon Holmgren:

That is true. I didn't think of that.

Mazen Chami:

Exactly. So now it's that one back and forth across the bridge and you'll probably see some improvement, whether it's your UI level or whatever it is you're looking at. So performance-neutral, like Robin said, but I would assume you'll see some minor improvements along the way.

Jamon Holmgren:

And how a regular user is going to see this is fewer layout jumps, so you don't have this stuff kind of rendering and then getting measured and then everything else kind of flowing around it.

Robin Heinze:

Which a lot of people would put under the umbrella of performance. If I have an app that's kind of jumpy and laggy and it's upgraded and I don't see those anymore, I would say like, "Oh yeah, it has better performance."

Mazen Chami:

Yeah. Let me just put this out there. The FIFA app-

Jamon Holmgren:

Back to soccer.

Mazen Chami:

Sorry, sorry. But it's coming back to React Native or mobile development in general. When the World Cup started, first thing you go do is download the FIFA app because it's their World Cup. So I downloaded the app and I kind of wanted to see all the different players that were going to be there, the teams. The UI was horrible. With every click, you got a flash. So I'm assuming they're using Flutter from what I understood, what I heard in the community. But with-

Robin Heinze:

Are you assuming they're using Flutter because it's a bad experience or because you have other information that they're using Flutter?

Mazen Chami:

I kind of have other information, but then there was some conflicting information that it's actually native development, but I don't really believe it because if you were to look at it, with every tap, there's this flash. So if you have aversions or anything to flashing, I hate to say it, but you're getting a seizure from this app because it's horrible.

Robin Heinze:

Interesting.

Mazen Chami:

And this is one thing here where now you won't see that flashing in your face.

Long story short, stopped using the app, horrible, moved to something else. But yes, this is something that you would not experience in React Native with this improvement.

Robin Heinze:

To wrap up this particular item, what they're doing about this problem, they're acknowledging that the migration path from old architecture to new architecture isn't where they want it to be and they're trying to minimize the cost of migration to make it more feasible for people.

Jamon Holmgren:

Yeah, they're kind of expanding that, the inter-op layer, the compatibility between not totally removing APIs, maybe they're not going to be perfect. If you were to use older APIs for the old architecture that have been kind of ported over using an inter-op layer, you're going to lose something there. It's not going to be the full experience of the new architecture, but it'll at least work, and so you can just flip the switch. That's kind of the idea hopefully.

And I've certainly been pushing behind the scenes for this. I don't really care if you don't get the full benefits of the new architecture as long as I can flip the switch and it still works.

Robin Heinze:

It's like our approach to type script, which is turn it on and then add your types slowly over time.

Jamon Holmgren:

Gradually, yeah. It's supposed to be a help for you, not a hindrance.

This is my opinion, but I feel like if it is a hindrance, if it feels like it's just getting in the way, you're going to get this bad feeling about the new architecture right away.

Robin Heinze:

Well, and for organizations that are already pretty risk-averse, any hiccup is going to just give them a reason not to move forward with it. So the easier they can make it, the better.

Jamon Holmgren:

The second one is talking about LogBox issues and hard-to-debug errors. And I think this is probably my pet peeve is the fact that a lot of times, you see non-symbolicated errors, so it's just kind of useless back traces that you see.

Robin Heinze:

Yeah, or traces back into the depths of React Native and native code and you're like, "This isn't helpful, I need to know-"

Jamon Holmgren:

This isn't my code, yeah.

Robin Heinze:

"I need to know where it originated in my code so I could do something about it."

Jamon Holmgren:

Yeah. So what they are doing to address this is a better StackFrame collapsing, so they're working on that. Actually, 0.71 includes this, so if you upgrade to 0.71, you're going to get this already. Fewer white screens due to errors. So they found a bug that was sort of causing more white screens just because the LogBox or the air handling wasn't even initialized in time to catch them. Also, letting more logs go through to the console so you can actually see everything that's actually happening.

What they plan to do in the future is to get rid of the Native RedBox experience because that is... They're working on essentially handling those cases better, but they did ask the community for some help with that. Also ahead of time, bundling the LogBox to just make it so that it compiles faster. And then symbolicating the component stacks, and this is actually a big one because I think that this is the one that's actually going to help us the most is the fact that we're actually going to be able to see what component is actually throwing the error.

Robin Heinze:

Definitely. Now they just need to implement some sort of a RABL in their logs.

Jamon Holmgren:

I know, right?

Robin Heinze:

Like Rails errors are the best.

Jamon Holmgren:

Oh, man. Yeah. You could just jump in there and navigate around in your app, access any of the memory, see what variables. Yeah, it's like an interactive debugger in a lot of ways.

Robin Heinze:

This kind of developer experience, debugging experience is so hard to get really, really good, but it makes a huge difference.

Jamon Holmgren:

Yeah. Moving along, there was a question about consistency of APIs across the different platforms that React Native owns. And I think one of the bigger ones was React Native Web. So Nicolas, who created React Native Web, actually responded to that one.

Robin Heinze:

Yeah, yeah. So it sounds like, well, for one, this is the bottom of the list, but it's the biggest deal to me, they're moving React Native Web under Meta ownership or they're working on doing that, which I think is huge.

Jamon Holmgren:

I'm curious if they're going to use it internally, actually use it.

Robin Heinze:

Yeah. Which will make Web a first-class citizen just as one of the platforms, iOS, Android, and Web, much more officially, which would take a lot of burden off of him alone because he maintained it by himself for a long time.

Jamon Holmgren:

Yeah.

Mazen Chami:

So the maintenance there is going to be... You're going to have more people on it to maintain it, so hopefully there's more engagement within the maintenance and improvements of it moving down the line.

Robin Heinze:

And then things like the style API is making style sheet options much more in line with the CSS feature set will go a long way towards making web and mobile more in line.

Jamon Holmgren:

Yeah. And they're adding mouse support, so pointer events like onClick, things like that, unifying that. Because there's different ways of interacting, like a touchscreen is going to have a different... You're going to have more onPress-type events where, with the mouse, it's onClick.

Robin Heinze:

You have onRightClick versus onLongPress. You have different ways of interacting.

Jamon Holmgren:

Right. Yeah, exactly. Exactly.

Mazen Chami:

And that's also good too because I think now with one of the latest OSs, and I think specifically for iPadOS, you can actually connect a mouse and use a mouse on your screen. So this is really good for having this API so that when you are building an iPad app specifically, you can handle this this way, by looking at these clicks.

Jamon Holmgren:

Yeah, I like this. They mentioned, "We're serious about supporting the Web as a target, improving the results developers can expect."

A big question I have is, are they going to use it? If Meta doesn't use it internally, then it will forever be something that's an afterthought. But if they use React Native Web internally, then it will be something that will be supported. I know Meta loves to use ReactJS, but do they love to use React Native Web? That would be the question that I'm kind of still posing from this response here.

The next thing that they talk about is there was sort of a complaint about how PRs just sort of sit out there, pull requests just sit out there and don't really get addressed, and Luna from the Core Team responded to this one.

Mazen Chami:

Yeah. I think one thing Luna is calling for here is when you're pulling a PR together, because React Native code, the code base is huge, so please put together smaller and more targeted PRs. So just really point it, so maybe even if it's just one or two lines or one or two changes, that's perfect.

Robin Heinze:

Which is good advice generally.

Mazen Chami:

In general, yeah. You don't want a PR with 12,000 changes when there's plus or minus.

Jamon Holmgren:

Not with that attitude.

Robin Heinze:

You will get better reviews overall, more thorough reviews overall, the smaller you make your PR. So it's really just good live advice.

Jamon Holmgren:

That is true. So it depends on whether you want the reviews or if you just want blast everybody with code.

Robin Heinze:

Looks good to me, check!

Jamon Holmgren:

I'm known for the latter, which is unfortunate. It goes back to me doing solo development for too long. That's the reality. And if you work in teams, smaller, more targeted PRs are very much appreciated.

Mazen Chami:

The two other points, one was try and look at them within the feature flags that we've been talking about React Native is doing because that'll help them de-risk the changes.

Robin Heinze:

Right. It's less important to be really, really sure that the PR is perfect and won't break anything because you can kind of keep it behind a barrier for a bit.

Mazen Chami:

You can hide it, yeah.

And the last one, the discussions are very... There's a lot of engagement in the discussions, so try and find a discussion before submitting a PR. That way, your PR will probably go through quicker because there already is some background around it. You're not bringing up a bug or an error that no one has heard of yet, or it's a new one no one has come across. Then you have to have the high burden of educating everyone on what it is and then showing how your solution gets there.

Robin Heinze:

Then there's going to be complaints about engagement on discussions.

Mazen Chami:

Yeah.

Jamon Holmgren:

You know, it's good advice just for open source in general. And I think what they're essentially saying is, "Hey, we are committing to getting to these PRs and discussions more quickly, but here's why a lot of times they don't, why we don't get to them. It's just too big of a PR. This is coming out of left field. I have no idea what's going on. I don't have any context."

I feel like you probably... If you see a small, targeted PR that is well-contextualized in the commit, and maybe it's already been talked about in the discussions, it's going to get merged very quickly. But if you have this large one that comes out of nowhere and it's for something that nobody's asked for, it's going to take a lot longer for someone to sit down and wrap their brain around it.

Robin Heinze:

Yeah, definitely.

Mazen Chami:

Yeah. And tested in general.

Jamon Holmgren:

Yeah.

Robin Heinze:

There are sometimes that I lose an entire day just to pulling down, testing, checking, reviewing, reading PRs. It's labor-intensive.

Jamon Holmgren:

It is, yeah, especially if you're sort of leading a team. And that's essentially what's happening here. The internal Core Team is leading our team, the Open Source Communities Team, but they don't even necessarily have a relationship with us, so it makes it doubly difficult.

Robin Heinze:

Well, and you have the constant tug of war between building and then reviewing PRs because the people that have the context required in order to effectively review a PR are the ones that are also writing the code, building the product. It's much harder to have, "Oh, you could just hire someone to where their only job is to review PRs." It's like, well, but then do they have enough context to actually review the PR effectively? So, it's a tough call.

Jamon Holmgren:

Exactly. Yeah, actually this is a very tangled up thing. This is not an easy thing of just putting more people on it.

Robin Heinze:

But small PRs, I think, will help a lot.

Mazen Chami:

Yeah. And the crazy thing about this is I know we're only a couple of points in, but it's the one that didn't have a lot of votes on it, but it's probably one that we could sit and talk about for episodes.

Robin Heinze:

It's true.

Mazen Chami:

Because there there's a lot around it, right?

Robin Heinze:

We did have a whole episode about code reviews. It's one of my favorites.

Jamon Holmgren:

It was a really good one. You should go check it out. We'll put a link in the show notes.

Robin Heinze:

It's almost required listening.

Mazen Chami:

I share that episode all the time. Whenever I'm talking to new developers, it's like, "Hey, listen to this episode. It's a good one," along with type scripts, my favorite.

Jamon Holmgren:

The next one was lacking documentation guidance for workflows. And Luna also responded to this one that they are definitely hearing the complaints and they're talking about how... She mentions that the React documentation's been going through a rewrite.

Robin Heinze:

We also had an episode about that with Rachel.

Jamon Holmgren:

Yeah, that's true. We have an episode. We're going to have a lot of links out. Yeah, Rachel Neighbors, we did an episode with early on when we took over React Native Radio.

So what they're saying is that they want to... Anything new that's coming in, for example, there's new metro symlink support, and they're wanting to include updating documentation and providing guides for that. New architecture, they're adding documentation. So it's really more going forward that they're adding docs for and really focusing on.

What they kind of do is punt it over to the community for the rest, and they kind of say, "Hey, best practices and use cases. That's really, the community knows that better than we do." And actually, even though it feels like a little bit of a punt, it is actually a somewhat humble approach as well. It's like, "We don't have all the answers here at Meta. We have one use case. There's a vast community out there. Can you all help us?" And so this is putting out a sort of plea for help for more ways to share knowledge and whatnot and build out the documentation.

Mazen Chami:

Documentation is hard.

Robin Heinze:

It's very hard.

Mazen Chami:

Good documentation is almost rare.

Robin Heinze:

Mm-hmm.

Jamon Holmgren:

Did you see we got some really kind tweets by some folks out in the community about the new Ignite documentation, by the way?

Robin Heinze:

I did see that. That was nice to see. Which you get a shout-out, if you tweet nice things about us, you might get your name mentioned in the podcast.

Jamon Holmgren:

It's true. Drew Morrison, who he is a friend of the show, hey Drew, really appreciate you listening and checking out everything that we do. He mentioned how good the docs were, super well-written, easy to understand. "I walked away feeling empowered, having more clear direction in my project," stuff like that. So that's always nice because documentation, it feels like a slog sometimes. There's just a lot to do and a lot to write, and it's hard to even know if you're doing it the right way. But it's good to get feedback like that.

Robin Heinze:

Yeah. The next one is about, in general, poor experience with some of the UI capabilities offered by React Native. For example, keyboard handling.

Jamon Holmgren:

Oh, this is kind of just a sort of random bag of stuff, isn't it?

Mazen Chami:

Yeah.

Robin Heinze:

Keyboard handling, flat list, image and image caching, RTL or right-to-left support, which Mazen knows quite a bit about, different platform layouts, layout animations on Android, and the infamous Android shadows.

Mazen Chami:

Even though it's just a random bag of things, it's really... How do I say this? There's a wide variety of ways to tackle all of these. The keyboard, you have different screen layouts and different phone sizes to account for. And even just like you said, the layout, the different platform layouts, we were talking about an iPad and then going down to just the simple mobile device, right-to-left complicates everything.

Image is an interesting one because when we prep for the show notes, so in a couple of days now, the go-to RN FastImage was deprecated. So now it's like, all right, what's the next one to use? Because that was kind of everyone's go-to. And I think from that tweet that we saw, it was focusing that software mention is working on Expo image, and that will take over from React Native FastImage.

So yeah, I mean, keyboard, I think we talked on the show in the past about how keyboard can be very hard to handle, and there's a package out there that did it all really well. FlatList, we now have Flashlist. So it's all this stuff that's so many different ways to tackle it, and people are working on it in different ways in the community.

Jamon Holmgren:

It feels like Expo is providing the missing standard library.

Mazen Chami:

Yeah. Yeah, exactly.

Jamon Holmgren:

And that's okay. I actually kind of prefer that, to be honest.

Robin Heinze:

I would love, if Expo maintains something, I have a high level of confidence that it's going to be good and going to be maintained.

Jamon Holmgren:

I wonder if any of the Expo people are listening. I wonder if they ever feel that pressure, like, "Wow, everybody thinks that our stuff is awesome."

Robin Heinze:

Mm-hmm. Everybody was relying on us now. Yeah.

Mazen Chami:

I mean, that's my check, right? Before I do a React Native package search, I'll do an Expo search. If Expo has it, I'll go with it or else I'm going to look for the community version of it. So, yeah.

Robin Heinze:

Well, and there's lots of great community versions too, but it's so... They're great.

Mazen Chami:

Exactly.

Jamon Holmgren:

It's harder to tell the quality.

Robin Heinze:

But you can't guarantee the quality. And a lot of times, it's a single maintainer who could burn out at any time because it's really difficult.

Mazen Chami:

Take FastImage, FastImage as an example.

Robin Heinze:

Yeah. RN FastImage was just deprecated.

Mazen Chami:

Everyone depends on it. I know I've used it in every app, and this kind of goes back to the Lean Core Initiative. So who is going to be the one that takes over instead of everyone in the community? Sounds like Expo is picking up most of the bags thrown out the door by Meta.

Jamon Holmgren:

I'm just waiting for Expo WebView so that I can completely let go of React WebView.

Mazen Chami:

Help Jamon out, Expo.

Jamon Holmgren:

But that one is a whole other beast. I don't know.

Anyway, yeah, I think that they're very aware of it, but I don't think they really have many real answers there. I do think that Expo's the answer in my opinion.

Mazen Chami:

Yeah.

Jamon Holmgren:

Speaking of Expo being the answer, upgrades being painful, and we don't mean upgrading to the new architecture, we mean just upgrades in general, there have been some improvements made over the years.

Robin Heinze:

It is much better than it used to be.

Mazen Chami:

Big time.

Jamon Holmgren:

So much better. Do you remember the manual linking days when you had to run React Native Link?

Robin Heinze:

Oh my gosh.

Jamon Holmgren:

And before the upgrade helper.

Robin Heinze:

So bad.

Mazen Chami:

Before, yeah.

Robin Heinze:

Oh, it was just a stab in the dark in those days. You changed the version and you see what breaks. That was just, oh, terrible.

Jamon Holmgren:

Yes. You know, there's a reason why upgrades are painful and have been painful. It's not for lack of trying to make it better. I think it's just inherent in the way that it's approached, because you have different things. You have your environment, you've got third-party modules, you've got Xcode, you've got Android Studio, you have your own app code. The native APIs change, so those aren't even stable. The new features, you have to know about the new features, and there's security stuff that you have to be watching.

So I feel like, at the end of the day, not to keep going this direction, just use Expo.

Robin Heinze:

They do it for you.

Jamon Holmgren:

You don't have to use Expo Go. You do not have to use Expo Go. You don't even have to use EAS, even though I like EAS. I like Experience. Just use Expo and Expo's native modules and all of their libraries and their custom clients. Those are the things that will actually make upgrades so much easier. Every project that we're doing using Expo when there's a new version of Expo. But yeah, essentially when you go with Expo, the upgrade process goes much, much smoother.

Mazen Chami:

Yeah. And a very good example of that is today I was working on the Chain React app and I wanted to install Firebase Crashlytics, and cloud messaging, and it was very seamless, very quick. We're using the Expo-managed workflow, so EAS pretty much did everything for me. Created a new build, ran the app, no issue, and it set everything up, and I got my alert.

So very quick, very seamless. If it doesn't work, you don't have to go into Xcode and make sure it's pulled it in and drop in specific files and stuff like that. It's just in my command line and done. I did not have to get out of my terminal.

Robin Heinze:

EAS is really great. There's a lot to learn about it, and I'm still kind of learning the quirks, but it's really amazing.

Jamon Holmgren:

This is not a paid endorsement, by the way.

Robin Heinze:

It's not.

Jamon Holmgren:

Our sponsor is Chain React, not EAS, but we do love it.

Robin Heinze:

Although we should pitch to Expo in general, like, "Hey, you want to sponsor us?"

Jamon Holmgren:

Why? They're getting it for free.

The last thing that we're going to take on is the poor debugging experience. There actually are a few others, but we're just going to look at this one last, and it's really about debugging with Flipper. And they kind of acknowledge that Flipper is really more focused on the native developer experience.

So now they're kind of saying that they're switching over to can they make the Chrome dev tools a better experience using... Literally migrating, don't use Flipper, use Chrome dev tools. And so they are asking the community for input on that. I have a few concerns about that, but I'm going to wait until we see what they actually do.

And then I did actually respond to this particular one, and I mentioned that we at Infinite Red know that a lot of React Native developers rely on Reactotron, which is our desktop debugging app, for debugging support as well. Reactotron's developer experience has also regressed over the past several years. However, we have plans to address that in the new year, so look for improvements. The more high-quality tools we have for debugging React Native apps, the better.

So we're also saying, "Hey, we do intend to move Reactotron forward." By the way, we still use it every day. So it's not like it's bad. It just hasn't really moved forward.

Mazen Chami:

Yeah. I personally use it every day and always have and haven't had any issues with it, until you told me, Jamon, there's the performance thing that Flipper has in Reactotron. I actually, when I got my new computer, I didn't even install Flipper because I was like, "If I run into it, then I'll download it. I'll just stick with Reactotron for now."

Robin Heinze:

Yeah. Reactotron, it's a daily staple around here.

Mazen Chami:

Yep.

Jamon Holmgren:

I think that one of the downsides to Reactotron right now is lack of documentation, lack of some of those types of things. And we have a few stability issues, but we'll address that at some point. We're a small team. We've been focusing on Ignite lately, but we're going to get back to that.

So anyway, Meta responded to all of these things, which is great. Really appreciate them doing that. And yeah, it's looking good. It looks like we're headed the right direction. I love how they stay in tune with the community's needs.

Robin Heinze:

Yeah, they've always been great about asking community for feedback and then actually taking action on what the results are. So we love Meta as a partner.

Jamon Holmgren:

If you'd like to nerd out more about React Native, check out my Twitch stream at RN.live or YouTube.Infinite.Red. You can also join our Slack community at Community.Infinite.Red. We have a Twitter community, RNTwitter.Infinite.Red will go directly to it.

You can also find the three of us on Twitter. Robin is @Robin_Heinze. Mazen is @MazenChami. Just look for the guy that has the giant Over-30 Championship ring on his finger. And I'm @JamonHolmgren.

I don't have enough fingers for how many rec league championships I intend to win. I only have three so far. Well, I technically have four, but it was a sub who... I couldn't make the championship game for the summer league, so it was a sub. So do I count that one? I was the goalie for the most of the season, but I don't know if you can count that.

Mazen Chami:

I was out sick for half the season. I'm counting it as a win.

Jamon Holmgren:

It's true.

As always, thanks to our Producer and Editor, Todd Werth, our Assistant Editor and Episode Release Coordinator, Jed Bartausky, our Designer Justin Huskey, and our Guest Coordinator, Derek Greenberg.

Thanks to our sponsor, Chain React. Check it out, ChainReactConf.com. Special thanks to all of you for listening today, you React Native nerds. Make sure you subscribe if you haven't already, and tell a friend about it. But you know what? We love it when people tell their friends about us. It's just the main way that we grow.

Robin, do you have a mom joke?

Robin Heinze:

I do. I just pulled one up.

Jamon Holmgren:

Okay. Let's hear it.

Robin Heinze:

Why did the student eat his homework? Because the teacher said it was a piece of cake. That credit goes to Carlin for that one. So Carlin, if you listened all the way to the end-

Jamon Holmgren:

Shout out to Carlin.

Robin Heinze:

There's your shout-out.

Jamon Holmgren:

He's kind of the dad joke king in our Slack.

Robin Heinze:

He is. I mean, he has four kids, so.

Jamon Holmgren:

He does. So do I, but I don't know, I'm not as good as Carlin. Carlin's good. All right, we'll see you all next time.

Robin Heinze:

Bye.