React Native Radio

RNR 227 - Better React Native Tooling with Tommy Nguyen and Adam Foxman

Episode Summary

Microsoft is doing some amazing work on React Native tooling. Tommy and Adam join the program to talk about rnx-kit, a collection of React Native tools by Microsoft.

Episode Notes

Microsoft is doing some amazing work on React Native tooling. Tommy and Adam join the program to talk about rnx-kit, a collection of React Native tools by Microsoft.

This episode 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. Aurochs
  2. rnx-kit
  3. Solidarity 

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio podcast, Brought to you by the Olympics, the monorepo of this foreign world. Episode 227, better React Native tooling with Tommy Nguyen and Adam Foxman.

Jamon Holmgren:

Have you ever done the Wikipedia deep dive before? You know what I'm talking about?

Mazen Chami:

Yes.

Robin Heinze:

Like six, six clicks to Jesus? I think it was-

Jamon Holmgren:

Okay. Now I haven't heard of that.

Robin Heinze:

That the idea is you Google any Wikipedia article and you start clicking on links, you should be able to get to the article about Jesus in six clicks.

Jamon Holmgren:

Is that right? Okay. I have not experienced that. I'm going to need to try that. What I'm talking about is just literally going and getting curious about something and going to Wikipedia and just scrolling down, seeing something interesting, clicking on it. Now you're onto something else, very interesting. And you scroll down and then you see something interesting. Either you end up on Jesus or you just end up continuing to do that and going and going and going. I did one recently on, I don't even know how to say this, but aurochs, A-U-R-O-C-H-S. They're the ancestors to cows.

Robin Heinze:

What?

Jamon Holmgren:

Yes, they're the ancestors to cows. So they look like cows, they're kind of bigger and more angular than cow, but apparently the last one died, I don't know it was in 1627 or something like that in Poland. And they're depicted all over in cave paintings basically. So, that's how often we know about it and of course, probably writings and whatnot. But it's like the word ox comes from.

Robin Heinze:

That's amazing. How did you end up there?

Jamon Holmgren:

To be completely honest, I don't know.

Robin Heinze:

That's the fun of the Wikipedia game.

Jamon Holmgren:

That's the fun of it. Yeah. What about you two? Have you done any recent ones?

Robin Heinze:

I wouldn't say recently, but I did learn this morning about interrobangs, the character.

Jamon Holmgren:

Okay. Explain.

Robin Heinze:

Which is a combination of a question mark and an exclamation point. I didn't know there was a character for that.

Jamon Holmgren:

Okay. Well, I mean, doesn't that feel like a little... That feels a little aggressive, right?

Robin Heinze:

Yeah, it does.

Jamon Holmgren:

Yeah. A question mark will do. You don't need to throw both at me.

Robin Heinze:

Aggressively inquisitive.

Jamon Holmgren:

It's like answer my question. I guess that's a good transition over to intros. So I'm Jamon Holmgren your host and friendly CTO of Infinite Red. I am joined by my aggressively inquisitive co-hosts Robin and Mazen, as well as a couple of guests who I will be introducing in just a bit. Robin is a senior software engineer located in Portland, Oregon, works at Infinite Red and specializes in React Native. How are you doing Robin? Have you been getting any sleep lately?

Robin Heinze:

Not a lot, but I'm doing okay.

Jamon Holmgren:

With the new little one. That's why I'm asking if you ever sleep.

Robin Heinze:

A little one who has been sick, probably more of his life than he's been healthy. So, lots of a-

Jamon Holmgren:

Poor kid.

Robin Heinze:

Long nights. I apologize for my voice may be a little foggy today as he lovingly shared his germs with me.

Jamon Holmgren:

Yeah, well that's what kids do. They really like to bolster your immune system.

Robin Heinze:

That's a good way to put it.

Jamon Holmgren:

We also have Mazen. Mazen lives in Durham, North Carolina. Is a former pro soccer player and coach, and is a senior React Native engineer also here at Infinite Red. How are you doing Mazen? Do you have any... You don't have any kid related sickness yet, that is?

Mazen Chami:

No, not yet. Yes. My wife is due very soon. So we'll-

Jamon Holmgren:

Is that first time we've said that on the podcast by the way?

Mazen Chami:

I think so. Yes.

Jamon Holmgren:

Oh yeah. Well, congrats Mazen.

Robin Heinze:

Basically, Mazen and I are just tagging in and out. I'm just like, "Okay, your turn. See you."

Jamon Holmgren:

Your turn, right. Exactly. I did my turns eight plus years ago and they're all growing up. They're all getting real big.

Robin Heinze:

One of them is almost graduated.

Jamon Holmgren:

17 years old. Yeah. In fact, you know what, it's funny, not to derail even further. We have a lot of cool stuff to go over. But I was just chatting with him the other day and he's like, "Yeah, I'm almost done with my junior year." Because he's doing self-driven at home and he's just drawing. He's just going so fast. And I was like, "Well, can you just start on your senior year then?" He's like, "Well, I'll email them about it. Maybe I can knock that out this year too."

Mazen Chami:

That's awesome.

Robin Heinze:

Just like his dad.

Jamon Holmgren:

Sure. I don't know. I wasn't that great at homework.

Mazen Chami:

He'll be on the podcast soon.

Jamon Holmgren:

To be honest, maybe so. We also have our guests who are both from Microsoft, Tommy Nguyen, who is a principal software engineer. He's been at Microsoft for seven years and he is currently working on developer experience, which is going to play a very key role in this conversation today. How are you doing Tommy?

Tommy Nguyen:

Good. How are you?

Jamon Holmgren:

Doing really well. Doing well.

Tommy Nguyen:

Happy to be here.

Jamon Holmgren:

Yeah. Awesome. I'm really how happy that you're here. It's going to be a fun... I think a fun and very informative conversation. We also have Adam Foxman. Adam is a principal software engineer. He's been at Microsoft since 1998, way back in the old days, working on lots of projects. He's currently working with Microsoft Office, doing everything, React Native. Adam, how are you doing?

Adam Foxman:

I'm good. Thanks for having me.

Jamon Holmgren:

I didn't mean to inadvertently call you old though. I'm basically the same age as you.

Adam Foxman:

I'm old. I look around always and the youth are joining me every year and-

Robin Heinze:

You wear with pride. It's not a bad thing.

Jamon Holmgren:

You know what? It's always fun to talk shop with people who've been around for a long time, because there's a lot of shared experiences that... This industry has grown really quickly. And for every one of us, there's a hundred of the kind of new to the industry people. And so it's sort of this small club.

Robin Heinze:

Microsoft also looks very different now than it did in 1998. I'm sure.

Adam Foxman:

It does. It's a very different place.

Jamon Holmgren:

It's almost like you've gone through multiple Microsofts.

Mazen Chami:

And the evolution of Office that feel like has come such a long way, along those years.

Adam Foxman:

Yeah, we're a subscription now. No more of selling you 50 floppy discs. That was how I first installed Office.

Jamon Holmgren:

My first encounter with Office, I think was... Was there an Office 97?

Adam Foxman:

Yeah.

Jamon Holmgren:

I'm trying to remember. I think that was my first encounter, which was not your fault because you weren't there until the next year. So actually I got my start doing Office like VBA programing way back in the years.

Robin Heinze:

I think a lot of people did that.

Jamon Holmgren:

Yeah, same.

Robin Heinze:

Microsoft Office probably played a pretty formative role for a lot of developers.

Jamon Holmgren:

This episode is sponsored by Infinite Red. Infinite Red is a premier React Native design and development agency located fully remotely in the U.S. and Canada. If you're looking for React Native expertise for your next project, hit us up. You can learn our website, infinite.red/reactnative. And don't forget to mention that you heard about us through the React Native Radio podcast. And if you're interested in joining this amazing team, this aggressively inquisitive team, just go to careers.infinite.red. We are hiring senior level React Native engineers located in the U.S. or Canada. All right. Let's get to our topic for today. So the topic... I guess what we were titling this is better reactive tooling, but this is primarily around rnx kit. If I remember correctly, both of you were involved in creating rnx kit. So I'd like to ask Tommy to start off, what is rnx kit? If you were to just give a high level overview of what it is.

Tommy Nguyen:

It's basically a collection of React Native tools that we've found to be useful.

Adam Foxman:

Yeah, you're right on it. I mean, rnx kit is a collection of tools, which we've built to help developers work through the entire React Native life cycle. The focus right now is on developer experience and in particular bundle and dependency management. But we have bigger aspirations and we just want to get things in the hands of developers that are going to help them and make the experience smooth.

Jamon Holmgren:

What all does it do right now, as of now? I know you have some kind of aspirations, but what does it do currently?

Adam Foxman:

It kind of does a little bit of everything. On the GitHub, we have a readme with a table that shows all the individual tools and what they do. And you can see that with aka.ms/rnxkit. But there are a bundle plugins and presets. We've got Metro plugins and we've had to make that Metro plugin harness to make those work. We do type checking when you bundle, we'll do symlink traversal, which Metro historically hasn't had. And experimentally, we're playing with tree shaking using ESBuild. We have a dependency management tool, a tool suite really that keeps your repo up to date as React Native changes and all those dependencies that you use change. And that's super important part of hygiene over time, keeping your app working with known good combinations of dependencies is actually quite challenging. So we want React Native to be accessible to everybody. I mean, we've got a command line interface that ties it all together. And we've also got APIs for each tool, if you want to bring one in and customize it, we support both of those avenues.

Robin Heinze:

So I have a question, I'm sort of thinking of on the fly, so if you're not prepared to answer it, that's totally fine. But I'm curious if you could go into maybe some specific examples of pain points, what was painful for your developers that you were trying to make better or to solve?

Adam Foxman:

The dependency manager is the first one that comes to mind. And Tommy wrote that. So Tommy, do you want to jump in there?

Tommy Nguyen:

Basically when we moved, I think we started with React Native back in when it was 40 something like 42, 43. And then bumping React Native to the next version has always been super painful, like which dependencies do you need to bump? Which version number do you need to bump to? Which config do you need to change? Which project files do you need to touch? And so on. And you can imagine that we have a monorepo with hundreds of packages. And so making sure that all of those packages still work after the bump is quite painful.

Robin Heinze:

I imagine by the time you're done, it's time to upgrade again.

Tommy Nguyen:

Sure. Yep. Then the next RC is out and we're like, "Oh my God, again." We have a mixed repo where you have web packages and React Native packages mixed in, and it always gets... People always inadvertently bump something that breaks React Native. The tool went through several iterations internally where we... in the big beginning, we had a simple script to just make sure that everyone is using that one version of React Native, et cetera. But then we had the problem across repos as well. So when our packages were consumed outside of our monorepo, dependencies were not quite aligned, that cost a bunch of issues. And so we were looking to basically create a tool for telling everyone at Microsoft what to do.

Mazen Chami:

That's pretty cool. I think very helpful and helps the developer experience at the end of the day, making it much easier. For people that haven't heard of rnx kit before, what are some competitors or comparable tools out there that they can compare to whether they've used them in the past or not?

Robin Heinze:

Or are there none, are you guys doing something new?

Adam Foxman:

It's a great question. We built rnx kit because there were gaps. So wherever there were existing tools, we would rather just use those. It's just a better approach overall. Because the community is using those tools and everybody is familiar with them. Why create something new? But I think each of the things we built is there because sometimes they've come from things that we built up internally that were missing in the community and we just wanted to publish them. And other times more lately, we've been focusing on what's the holistic developer experience. And there were things like Ts-loader on webpac, there's nothing like that for Metro. And so I've been spending a lot of time integrating Metro on TypeScript, and that's a new thing as far as I know. And I think it's really important to just quality control over time. And so that to me, that was one of the... I don't know that there's a competitor out there doing it, I guess is what I'm saying.

Robin Heinze:

Yeah. I mean, I feel like if there was, we would've heard more about it because this is one of those problems that everybody has been trying to solve for as long as software has existed.

Adam Foxman:

Yeah. There are closely related tools that do some of what we do, but nothing holistic, nothing complete. So we leveraged those where we could and we created where we couldn't.

Mazen Chami:

That's pretty cool. I mean, plugging the gaps, like you mentioned earlier, that's pretty good. And just looking at the full list, which we'll get into a little bit later. But there's a lot of different aspects of this kit that are very helpful and definitely plugging some gaps.

Jamon Holmgren:

We're using... In fact, this is the first time I had really looked at it. So Tommy and Lorenzo Sciandra, I hope I saying that correctly. Sciandra. I don't know exactly how to say that.

Robin Heinze:

It's just Lorenzo.

Jamon Holmgren:

Lorenzo. I just know him as Lorenzo.

Robin Heinze:

React Native Lorenzo.

Jamon Holmgren:

Exactly. React Native Lorenzo, gave a talk at React Native EU about it, which was great. But I hadn't actually encountered it necessarily in the wild until we integrated it into Ignite our React Native boiler plate to support symlinks out of the box because Metro doesn't support that. And so symlinks are important for a few different reasons, but most notably two, one is monorepo support. Often monorepos are using symlinks and also PMPM. If you want to use PMPM instead of NPM or Yarn, PMPM uses symlinks, and so you need to have that. There were a few other things we had to do to make that work, but rnx kit was very key there. So I have a question about that. Why did you build a separate module rather than extending Metro to have all these features internally, essentially?

Adam Foxman:

The idea is to upstream what we're building eventually. But we've built it as plugins and presets for now because it's a way to use rnx kit as approving ground. We want to build prototypes. We want to run experiments and when we don't get it right, we want to start all over again. And we want to do that off to the side without impacting the whole community.

Robin Heinze:

That makes a ton of sense.

Adam Foxman:

Yeah.

Jamon Holmgren:

Yeah, it actually does.

Adam Foxman:

We're fortunate, we have a lot of internal monorepos, big ones, that we can try these out at scale and really see how they're going to work, not just perform, but is the experience any good? Could it be better? And so we're rolling that all in back into rnx kit and it's becoming extremely useful. And we're at the point now where we're ready to start sharing the ideas and promoting what we've built, but also thinking about upstreaming. The tools work better together. So upstreaming one here and there doesn't always make the best sense, but it is where we're heading at least wherever possible. The Metro stuff I could see going into core. Some of the other stuff, probably not.

Robin Heinze:

Well definitely keep an eye out. It would be really great to see some of it integrated into Metro itself. So can you talk a little bit about the interface, the CLI, what does a user actually interact with?

Adam Foxman:

There's two surfaces. The CLI is the main one and it ties everything together. It's just a scripting interface. It's really useful in package JSON script blocks or CI loops. And it gives you high level control over everything working in concert. You can run the depth checker. You can do bundling with our add-ons and plug-ins. You can run a Metro server in the same way. You can even clean out your repo cache if something's gone wrong internally. We've also got an API level interface for each of the tools and it's documented in the readme file. So if you want to do something specific or you don't want the opinions that are built into the CLI, you can just grab something off the shelf, like the Metro configuration, and you can tweak it. I think you guys are doing something like that with the symlink resolver in your templates. And it just... You can get the benefit of that particular piece without having to deal with all the rest of it.

Robin Heinze:

That's really cool.

Jamon Holmgren:

Yeah. That's super cool. I love these types of tools.

Robin Heinze:

You can tell they were made by developers for developers.

Jamon Holmgren:

Right. On real projects. Not just for-

Robin Heinze:

Not hypothetical. I love things that are developed organically like that, where they were... The problem arose first and then the tool was built to fill the gap or fix the problem. I want to know a bit about what the magic sauce is behind the dependency manager, because that... I mean, it's such a difficult problem that no one's really been able to solve. What's the magic? And does it ever get things wrong?

Tommy Nguyen:

Yeah, well, it's magic. No, it's based on a lot of the apps that we are using internally. So we have several apps that we co-maintain and we take the dependency from them basically. So when we bump React Native to the version, we make sure that we also bump the whatever React Native community modules we use and make sure that they work. So we have test beds basically, where we can try out some of these combinations and make sure that they work and we ship them out to customers. And all of that knowledge also goes back into the depth check to make sure of that.

Robin Heinze:

I see.

Tommy Nguyen:

The next person also receive the benefit of the work that we did. So they don't have to go through the same process that we did basically.

Robin Heinze:

I see. Okay.

Tommy Nguyen:

So it's basically a curated list of dependencies, but we also have... We are looking to automate that in some way so that we don't have to go through every capability.

Robin Heinze:

There is a human element to the magic. That makes a lot of sense.

Jamon Holmgren:

It reminds me a bit of a package that Gant Laborde, who's one of the owners here at Infinite Red build called Solidarity, which is essentially checking environment more than maybe dependencies, but in some ways there's some parallels here where it's really trying to make it so that you can get to a common setup where we know things work. Right? And so same thing for dependencies. You can say, "Okay, these dependencies work with React Native 67.2 or whatever."

Robin Heinze:

I mean, as a more junior developer, I don't think-

Jamon Holmgren:

Okay. Hold on.

Robin Heinze:

No.

Jamon Holmgren:

I'm not letting you get away with that.

Robin Heinze:

No, not now. When I was a more junior developer.

Jamon Holmgren:

In the past. Oh, okay. I was like, as... I thought you were saying, "I'm a junior developer," I'm like, "Robin, you have like eight years of experience now."

Robin Heinze:

It took me a long time to stop saying that, but I did get there.

Jamon Holmgren:

You did get there. Okay. All right. Okay. Good.

Robin Heinze:

When I was sort of more green, I don't think I realized how much of that kind of thing was really based on just human people, figuring, tinkering the stuff until figured out what worked. I thought there was just sort of I don't know that people sort of knew intuitively or that there was tooling out there that would be like, "Okay, so this package works with this version of this package." And not like, it was all automated, but it's really not. And that's the idea behind Solidarity, like you were just saying, is you basically find someone has an environment where it works and so they can snapshot their environment.

Jamon Holmgren:

They take a snapshot.

Robin Heinze:

And then we know that this combination of things works And then other people can use that tool to be like, "Okay, does my environment match this?" So it sounds a little bit like that's what you're doing. And we discovered yesterday, right, Jamon? That it's only as good as what you put into it.

Jamon Holmgren:

It's true. So Robin was doing some work at Ignite, I think.

Robin Heinze:

Yeah, I still work at Ignite. And I was getting an error that wasn't on CI, nobody else was getting this error. So we snap shotted our environments and I was like, "Oh, wait, I'm using node 12," which is four versions behind. And that was the issue. But was because our Solidarity file hadn't been updated in two years.

Jamon Holmgren:

I think it was saying you have to use at least node 8.6.

Robin Heinze:

Which... Yeah. Anyway. So the tool only works as well as the people that are configuring it.

Jamon Holmgren:

As the input. Yeah. I really wish it was magic.

Mazen Chami:

So how did you guys come together to develop rnx kit? Was that something that just came about organically? Was... I know you mentioned it was to help fill some gaps, did a developer eventually say, "Hey I was running into this issue, so I created this," and then it came together and so grew from there?

Adam Foxman:

Well, Microsoft's been doing React Native for a number of years and internally we've been building these tools up as we go because we needed them. It wasn't that someone came from outside or said, "Hey, we should do a big push to open source tools as we make them." We just had developed the tools as we were going. And we got to a point where we realized we have a lot of good stuff here, let's put it out there into the world and see if we can get other people using it and have it benefit them in the ways that it's benefited us. And also get contributions and be more active members in the community because it's a really great community, a really active community. And so it just seemed like the next right step. We have aspirations to do big things with it, but at this point it's focused on developer experience and tools and dependency management, which are seen to be the core problems that we keep hearing from a lot of internal developers. And so that's how we got here.

Robin Heinze:

Is this part of an effort to start more widely promoting it? I mean, I know you guys did the RNEU talk, not that long ago, are you trying to get the word out more?

Adam Foxman:

That is a bit of serendipity that this podcast is happening now because I was just thinking, nobody really knows what we're doing here. And we had this RNEU talk and we had some helpful tweets, but I think after the holidays, I was thinking it's time to really start to spread the word because what we have is really stable and it's useful and we're using it internally. And so when I heard that we were going to get to go on this podcast with you all I was thinking, this is a really wonderful way to kick things off.

Robin Heinze:

Got to put your marketing hat on.

Adam Foxman:

Yeah. We need more exposure. And I definitely want to hear from people who try out this stuff and write about it and good and bad experiences they've had, because that's really only going to help us do better.

Jamon Holmgren:

It's kind of funny because as developers our first instinct is to build not necessarily to market it and... But yeah, sometimes really cool stuff can go under the radar. But the more I look into rnx kit, the more I'm like, "We've got to be using this. This is really cool. There's cool stuff here." And I've known that there's cool stuff happening at Microsoft for a long time. I'm in the open source discord where the core team is doing discussions and whatnot and I'm seeing the discussions happening between the Facebook, Meta engineers and Microsoft. But this is the first time where it's like, oh, this is like a real thing that we can use as a community and that's going to really make our lives easier. And it already has made our lives easier. So I appreciate it.

Jamon Holmgren:

In fact, I saw a tweet by [Eli White 00:25:09]. This is a while ago was in October, but Eli of course works for Facebook. And he said, "I spent a night upgrading a personal React Native project from 0.63 to 0.66," which I think at the time was the latest version, in order to run on iOS 15, I kept running into Xcode builders, crashes boxes. Then I had to update my third party libraries to be compatible. Then I got pointed to a tool by Microsoft, which is depth check which is in rnx kit and Microsoft talked about at React Native this year.

Jamon Holmgren:

He told me all the versions of my dependencies that were compatible with 0.66, I ran it and then my app launched no problem. That's amazing." And then he gives a shout out to Tommy for the work there, which I know that's some pretty awesome work. So there's some like recognition happening, but I really do think that the community needs to go check this out. If you're a React Native developer right now, we're on a React Native project, go see what's in there. Because there's a lot in there that you may be not even thinking about that it's like, "Okay, well this solves a problem for us." But yeah, I'm really happy about these tools.

Adam Foxman:

Thanks. We're fortunate to have corporate funding and we're happy to put it out there and support the community. So we're lucky that we don't have to do this as a second job.

Jamon Holmgren:

Yeah, sure.

Adam Foxman:

That this is just our primary job. And so these tools are actively maintained and will be that way for some time.

Robin Heinze:

That's definitely a nice benefit of working for a behemoth like Microsoft, is that they have the resources to have teams that are dedicated to tools like this.

Mazen Chami:

We've talked about this, a bunch on the podcast. And I think now that we have another company as big as Microsoft coming on board and actually managing and maintaining libraries like this, we talked about previously Facebook and Meta investing a lot of money in their all platforms initiative and how it's getting more stable as things progress and we can now trust in it completely.

Mazen Chami:

So now also hearing this from you guys and you guys working on this while you're in your full-time job, I think that's very helpful for the community. And if listeners haven't gone to rnx kit by now, I feel like you definitely should. There's lot of cool stuff in that table that you mentioned earlier. And I mean, there's a couple that caught our attention and one of them was bundle diff and there was a RN changelog generator. Those are just a handful and obviously we mentioned already the depth check one. Those are just a handful of some that we thought that were really cool. And on the RNEU talk has also highlighted a bunch of other ones out there. What are some of you guys' favorite ones from this kit and what do you use it for?

Adam Foxman:

Tommy, do you have a favorite? Or do you want me to just jump in?

Robin Heinze:

All of them is an acceptable answer.

Adam Foxman:

I feel like-

Tommy Nguyen:

Yeah, I do like all of them. You can go ahead.

Adam Foxman:

Okay. I think the depth checker is pretty magical. I'm partial with TypeScript integration with Metro because I wrote it and because I think Typesafety, it just adds a layer of security and stability that I find comforting as a developer, knowing that stuff's not going to break three months from now, in production of all places, because somebody made a change, they didn't understand was not going to work, but they're all useful on their own right. And even the small ones, like the symlink traverse plugin, makes a huge difference, I mean.

Robin Heinze:

Yeah. It's true. I mean, we had a monorepo project not too long ago, which we actually had to work around not being able to do symlink and Metro. And so something like that can just be like a linchpin for a huge project and make a huge difference, even though it's a pretty simple concept.

Mazen Chami:

So with that being said, do you guys find all these libraries helpful outside of Microsoft? So as Infinite Red or as just an individual out there working on a project, how beneficial do you think looking into and integrating these libraries would be in our project?

Adam Foxman:

Our hope is that it's useful outside of Microsoft. Our approach to rnx kit was build for the community first and Microsoft is just another customer.

Mazen Chami:

That's awesome.

Adam Foxman:

Yes, the tools came from internal monorepos, but I'm a huge developer experience advocate. I wear that hat a lot. And I tend to look at these problems as what makes life hard and what makes life easier. And then I go work on those problems and it always ends up benefiting Microsoft, but I think it also is going to benefit everybody else. We want these things to be easy to use. We want you to be able to keep your apps up to date and healthy. We want you to succeed really and benefit from the work we've done because it's going to make React Native better for us in the long run selfishly. But it's also really nice to help other folks who don't have the same resources that we have.

Robin Heinze:

I love it when I see big companies like Microsoft doing that.

Jamon Holmgren:

We're a big believers at Infinite Red of a rising tide raises all boats type of approach. And so we put a ton of open source out there. In fact, one of the things I'd like to do is more of a deep integration with rnx kit within Ignite where rnx kit becomes an integral part of Ignite. We use TypeScript, for example, and we're not taking advantage of the tools that you have for bundling TypeScript. And so I'd like to maybe take a look at that and see what we can do there.

Robin Heinze:

I mean, Infinite Red, we're really small though. That's sometimes the frustrating part, is that we are so invested in the community and we want to see improve and we contribute where we can. But the reality is all of us have to be billing on revenue generating projects. And so we don't always have the time and resources. And so we love it when Microsoft, when Facebook, when whoever is leading the way on things like this, and then we can contribute where we can. But yeah, we love to see it.

Adam Foxman:

I wanted to add one more note in there too, rnx kit isn't just a place where we're going to build and release tools. You had mentioned earlier that the changelog generator that Lorenzo uses when he does releases for React Native core, rnx kit could be a place for other people to propose and contribute tools like that. It's not just for filling gaps that we found. It could be another community repository.

Jamon Holmgren:

Yeah. I mean, that could potentially be a place where solidarity goes. That's something that we're still not sure if we want to continue to maintain or not, but there's some really cool stuff in there and it would totally fit what you're doing there. So, that might be something to talk about at some point. But yeah, we see our role is often promoting these things. The efforts that you all are doing, and some of the other things out there. We have a podcast, we have live streaming, we do a bunch of other media related things. That's stuff that we do. And so getting the word out there is pretty big.

Jamon Holmgren:

Just to wrap up again, I'm super happy that Microsoft is investing in React Native tooling, which in general has been a dusty corner that has been mostly stagnating for the past few years. And apologies to the core team who have been working on stuff, but it's just felt like it's not kept up maybe with where web is. And so it's really nice to see the tooling making strides forward. And it also just shows that Microsoft is going to continue and invest in React Native. And that's just good for the community. Thank you both for coming on the program, maybe hopeful we could have you on again at some point to talk about some more details, but did not have a good transition there.

Robin Heinze:

In the meantime.

Jamon Holmgren:

In the meantime, where can people find you, GitHub, Twitter, anywhere on online, Tommy?

Tommy Nguyen:

Yeah, on GitHub. On the rnx kit repo, you can reach me there.

Jamon Holmgren:

Perfect. And Adam?

Adam Foxman:

I'm on GitHub as AFoxman, spell it like it sounds okay. I'm on the React Native discord, too. Same name.

Jamon Holmgren:

Perfect. Robin, where can people find you?

Robin Heinze:

I'm on Twitter @robin_heinze with an e at the end.

Jamon Holmgren:

Mazen?

Mazen Chami:

@mazenchami.

Jamon Holmgren:

And you can find me @jamonholmgren. You can follow React Native Radio, Twitter account @reactnativerdio. Thanks so much to Tommy and Adam for joining us today. And as always, thanks to our producer and editor, Todd Werth, our assistant editor and episode release coordinator, Jed Bartausky, our social media coordinator, Missy Warren, our designer, Justin Huskey, and our guest coordinator, Derek Greenberg. Thanks to our sponsor, Infinite Red, check us out at infinite.red/reactnative. And thanks to you listening today, make sure to subscribe, send this to a friend, et cetera, really appreciate when people promote and also when we get feedback. Reminder, we are hiring, go to careers.infinite.red. We'll see you all next time.