 Hello, everyone. Good morning. Was it too loud? Hello, everyone. Good morning. My name is Ram and I work at Facebook on react native I'm here to talk to you about building react native not just building apps with react native but building react native as a platform This basically is based upon my experiences as a web developer all the way from starting websites to building the framework itself When I started building websites, it was mostly about changing DOM nodes here and there. There was jQuery. There was angular The web has actually come a pretty long way. I think the key Contribution of react to the UI engineering space itself is the way we think about UI going forward The whole idea of using components. It's not new but react basically set that in stone The fact that you can use components not just in your web applications But also on your mobile phones was actually pretty interesting Apart from that, it's this whole idea of declaring or being declarative on your components You know the fact that you have props you have state and then just using those two you'd be able to create and Ensure that react is able to manage the changes for you. What's a pretty big deal? You you're you don't no longer have to worry about hey if I click on something what changes react takes care of it With the react reconciliation algorithm and this idea of building the web or using these component Components as building blocks is pretty critical in the way we think about UI engineering these days Effectively what we describe when we are writing a react code is a tree pretty much It's like hey, this is what my component tree is going to look like my page is going to be composed of components And then this component tree is transformed into something bigger and displayed on the web page It's all about the trees at the end of the day, I mean Effectively trimming removing components removing leaf nodes stuff like that So in my talk, I'm going to talk to you a little bit about how react native can evolve from react and also about the Similarities and more importantly the differences between these two platforms But before I jump in how many of you here have done any sort of react native in the past by show of hands Okay, that's a pretty good number So I'm guessing most of you know that react.js is a library for writing websites On the other hand you can use react native to build mobile applications for iOS Android and a bunch of other platforms Using the same design paradigms and the development knowledge that you acquired using react native The idea of react and react native basically was that you could learn the whole paradigm of react ones and you could apply it to multiple platforms I think Tom or during his JS who keynote just can't keynote said that it's the idea of learn once right anywhere So let's look at what react really does inside like what what does react really boil down to so on my screen right now I have a simple component and effectively that component has the tree on the other side Now this tree is converted to a DOM structure and react takes care of it for us Now let's say that I want to add a new element. Let's say an input element to type something using the keyboard I would change my JSX for that react would automatically change the tree and issue the necessary instructions to mutate the tree and The tree basically can then get rendered on the screen and when people talk about like virtual DOM Which is basically a concept. It's basically this concept that they're talking about the idea of Taking the first taking a snapshot of your component tree at one time Comparing it with the snapshot after the changes have been applied and then using those comparisons generating Instructions that can be sent to the browser to draw stuff now of course inputs are a little tricky with react because You inputs are controlled components So in react you have this a little bit of weirdness where you have to say Hey, my value is based on a state and whenever someone types something I'd want to update that state So this is more like a complete component that you use with react. Yes today. I haven't even gotten into react native yet So how does this really work? Now, I know most what most of you are thinking. Hey hooks are out for almost six months. Why haven't I moved the hooks, right? So fine. I'm not a dinosaur. I like to live on the edge. Let's just use hooks. There's no difference there So if the same thing with the hooks example existed, this is how the code will sort of look like now, let's say You have this application Yeah, the interesting thing especially in a demographic like India is a lot of people also use websites on their mobile phones and React doesn't really have an opinion about whether it's a website or a mobile browser So let's pretend that this is running on the mobile browser So let's say you whip out your mobile phones and you start typing something That's a native event that the browser gets that on change event is called whenever someone types something Because it's an on change. It's a function that react components describe and this will effectively say hey set the value of text to something else And then that is sent back to the actual DOM element There is nothing new. I mean most of you should already know about this if you've done any sort of react, right? I mean this isn't isn't this common paradigm So this is how react basically works Now the question is why does it have to be input text? Can we make it a little more generic and probably call it? Something that will work on the mobile phones also so the interesting thing about mobile phones is Yes, you can display a web page. You can display a mobile browser But there are tons of apps that look good and you will kind of look a little bit different when you are just a website not a more app itself so That's the pattern that react supports react lets you use instead of saying input text You can actually take say something that's a little bit different text input and this would basically Render real native components that let you that that become a part of your application So the whole story about on change a lot that that is exactly the same No difference in terms of the way react versus react native behaves in this specific scenario however There is a slight disconnect effectively Remember that on the browser it's JavaScript manipulating the DOM right in react native. There is no DOM The components on the mobile phone are actually components that are native UI components that Android or iOS provides. Let's say the text box there is an Android text view the Textbox on iOS would be a UI text, right? So those are actually Android NIO specific components, which means this interaction won't really work because it's not really You being able to call a DOM method and this is where react native starts to diverge from react While in react, you can use direct DOM calls on react native. You use a concept of a bridge The best way to think about a bridge is that it is a it is a way for you to communicate between your JavaScript player to your native layer or to your object to see your Java layer What that means is instead of calling methods directly You have to serialize them into something like a JSON area or something and then send them across the bridge So whenever someone talks to you about react native and someone talks to you about the bridge This is pretty much what they're talking about the whole idea of how the react reconciler can create JSON structures and sends them over the bridge Everyone with me until here. This is clear Okay, there's another gap in mobile mobile app development, which I have not really spoken about and that is layouts So on the browser the browser understands flexbox and CSS and all of that Unfortunately, there is no concept of a flexbox or any of the other browser CSS styles on a mobile device I mean Android has its own layout system iOS has its own layout system, but they're not there. They're actually different from flexbox In fact, both an Android and an iOS your layout components are a part of your Component tree that you have saved for example in Android. How many of you have done some sort of Android before? Okay, so you must have encountered things like linear layout and Like a constrained layout and stuff. So they actually become a part of your component tree HTML and like the web world on the other hand kind of combine visual elements with layout elements And the web developers have found this to be pretty useful The fact that you can build your structure your semantic documents just with a web structure and then style them and layout them in line Using CSS has been a very powerful and very appealing a method of programming and react native adopts this paradigm to make web developers Be able to write mobile applications What that means is when you're on Android and when you are on iOS devices You need some way to convert your see a flexbox CSS styles to something that Android understands And this is where a shadow DOM or a layout system comes into play the layout system in react native is called yoga and the primary use of yoga is you given flexbox and CSS and Properties and yoga will give you the X and Y coordinates of where stuff should be displayed on the screen Yoga is very similar to CSS rendering engine. Basically yoga does the exact same thing and On the screen what you see is three separate steps and Whenever someone says react native runs using three threads. These are the primary threads for react native where? react native executes in a multi threaded fashion What this also means is JavaScript has its own thread while the UI layer has its own thread and this is very different from the way react works on the react Your JavaScript thread pretty much interrupts the UI thread, right react native has these multi-threaded applications multi-threaded of Way of doing things right from ground up Now this can be an interesting dance. So let's see how a typical rent leg Let's take the example of a typical render method and see how stuff starts getting rendering on the screen So what's going to happen is as soon as your application is loaded your mobile phone is going to say hey, I'm ready Let's go draw something There's an asynchronous call from the mobile to your JavaScript player that says hey come on render method Tell me what should I draw the render method is then going to start doing the reconciliation algorithm Trying to figure out what instructions are sent and it will send it to yoga Yoga would then calculate the layout and it will start queuing all of that information over to the UI thread or the native UI hierarchy manager thread This jump and this whole System of multi-threaded environment is primarily asynchronous What that means is the UI thread is not waiting for JavaScript to tell it what to draw the UI thread is super responsive And this is one of the reasons why react native is very very performant The the basic point that your UI thread doesn't have heavy operations running is pretty impressive In fact, most of the heavy lifting in fact most of the business logic happens in the JavaScript thread Most of your layout logic happens in the layout thread and the UI thread is just responsible for displaying elements Now all this is well and good Let's also take the example of you know the first example we took about keyboard and on change right? How does that work? So in react native the on change method gets called and again. This is asynchronous, right? So that's good But once the JavaScript is is has finally figured out what to do with that on change method It'll send it to layout and this is where the 1% cases of react native is weirdness coming to play So what because react native is inherently asynchronous? What could technically happen is before the layout thread is done with its work The user may have typed the next character And while JavaScript is processing it The on change event is going to go out what this means is for a split second The user has typed a b but then the b gets cancelled and only is displayed because the set text instruction is shown This is sort of a collision between. Hey, this is what I want my state to be but this is what my state is So yes, you will get eventual consistency, but for that split second There is this weirdness where you say hey, I typed something but it doesn't show up Of course, this is a little bit weird, right? I mean we have we don't see this behavior on the web This is one of the key This is a side effect of the whole process being asynchronous. This is typically a race condition of course eventually the Final method will get called and the text will be set to a b. So the whole thing is fixed. So this is not that big a problem However, this kind of has a janky effect like the user suddenly sees be removed for a minute And then shows showing up again is a little bit janky and it's not the best of performance experiences, right? Like what do you want is smooth native first-class performance experiences and even slight glitches like this could be an issue Again, this is only for the one person case or even less than one person cases, but react native wants to fix this also Here's a much more pronounced use case that you see remember I told you that react native UI 3 is responsive It actually is in fact It's so responsive that the scroll doesn't stop and because the scroll doesn't stop Even though JavaScript is not sure what to render for certain elements the scroll will continue So what you see is actually white screen white space and then the even the elements start showing up eventually Now this is interesting and this is an accepted paradigm on the web like on the web if you start scrolling You can show placeholders and that's perfectly fine However, if you if you take out your applications and look at native native apps that have native implementations They actually stop and start showing janky content and that is the acceptable way to do it on mobile browsers And because with react native we strive to recreate all the features and the bugs of the way mobile works We want to be able to replicate this too So by by now I'm sure most of you are thinking hey all of these problems don't exist on the web, right? Why is that? Well, that's because on the web. It's all synchronous Whenever a change event happens you immediately respond and you can actually block and Even cancel input events like whenever you have whenever there's a key press on the browser That is a synchronous call and you can always say e.prevent default or even dot set propagation to falls and stuff like that You can't do that on react native because it's a completely separate thread on react native events are fire and forget not so on mobile So it's kind of funny that You with fiber and all the improvements in react the react the JavaScript framework is trying to move from a synchronous to an asynchronous world Well, on the other hand react native which is inherently asynchronous is actually trying to move to a synchronous world And I think this is where both these worlds are starting to finally come together and look more and more like each other And that's basically what I want to be covering in this talk The idea is there are going to be use cases where you want to be a synchronous Typically like you've already waited one minute for one second for a network request Waiting another hundred milliseconds to render it is perfectly fine On the other hand when someone when there's a user input like a touch or a scroll or a drag that needs to be instant So what this proves is there is in the world There are use cases where both synchronous cases work and asynchronous cases work asynchronous cases would be Performing for 99% of the cases while we also want to be able to support synchronous rendering in case of react native So how is all this achieved The first thing we want to do is remember I told you about the bridge The bridge is basically the culprit here. The problem is that the bridge is Fundamentally asynchronous now if you if you typically look at computer science concepts It's easy to make a synchronous call into an asynchronous call I mean you just add a set time out and kind of becomes asynchronous The best way to think about it is if it's a synchronous call Just add a set time out on the other hand if it's an asynchronous call Making it synchronous or making it blocking is hard if you have a set time out How would you ever receive a response back the maximum thing you can receive back is a promise You you may not be able to get the value back right back right unless you are you do like blocking and add like semaphores and stuff like that So that's the case we we want to solve what we are going to be doing is This bridge is actually a little perilous. It's a little dangerous So we want to be able within the new new architecture of react native. We want to burn the bridge You want to get rid of the bridge What we want to do is not use a bridge to cross over but use more like a jetpack to jump over from one thread to the other We want synchronous and asynchronous operations Now what does that really mean before I explain what react native does? Let's take some inspiration from what react does and let's see how that mirrors to what react native could do So the bottom part that I'm going to show you here show you here is what how the browser works So let's say in the browser you use an API called document or create element What is the what does it give you back? It gives you back a node right and then you can use this node to append child to somewhere and stuff like that Effectively the what exactly is that node that node is an HTML input element That is a C++ object. That's not a JavaScript object that someone created. In fact It's so much. It's it's an object that probably has a reference to a system control that's written in Windows So if you remember if you look at the checkbox On a website on a Mac versus the Windows desktop. It looks different. That's because you are Inherently using on the background the country the UI control that the system provides Let's match this to what react native does today react native uses native control right native UI. So that's that Today we use JSON but JSON is asynchronous. What we want is a you API like this and what we want to be able to do is Is exactly what the browser does? So in a way React native is starting to look more and more like the browser in the new world in the new architecture Surprisingly over the four or five years that react native has been around it hasn't changed fundamentally I think and I think this is one big change The scale of the change that's happening right now is probably much much bigger than anything that has happened in the past And this is good not just for performance because you now will be able to make animations much faster This is also important to ensure that your applications continue to work and look just like native applications So here's the fundamental idea The idea is what you need is not a bridge What you need is an RPC call or a method call JavaScript should be able to call Java functions directly. That's the basic idea The basic idea is all of these Java or objective C methods are directly exposed to JavaScript Why are C++ host objects? The reason you have to do C++ host objects is because react native bundles a JavaScript VM or uses a JavaScript VM to execute your JavaScript code and that's a C++ object, right? so JavaScript needs to be able to call these methods and JavaScript will be able to hold references to native objects Let me explain in terms of code how this might look like and The first thing to understand is whenever someone whenever you're talking to someone and they say JSI This is the basic idea. They're talking about now JSI is is a pretty interesting idea because this base is the is the basis of all of the new and Improve a new improvements that we are making in react native for example in case of view managers or in case of UI elements What's going to happen? so in case of UI elements All of you all of the new managers are going to be exposed as host objects and then react reconciling You know the set props and set value that I showed you for initially That's going to be instead of serializing it. You can actually call that from JavaScript into native land So in terms of code what it might like this is pseudo code. So this may not work But here's what you do in the browser, right? What you'll be able to do with react native is something like this So this is not the exact code again This is pseudo code and this is an influx but the idea is this you'll be able to create a node on the UI manager directly and that node is no different than an HTML input element except that node may be implemented in a C++ object like this And this is starting to look like JavaScript already because if you see there's a getter object So this one here is getter is a getter it returns a value and if the method is create node What it basically says is it invokes an Android or an iOS API So whenever JavaScript calls create node It'll call a C++ method which will eventually call an Android or an iOS method to create the view or create a UI view Or a creator create an Android dot view And all of this again is synchronous if you want you can make this method asynchronous Basically, what you can do is I create a new thread in here Or create a new thread inside the Android API or the iOS API and make it asynchronous So this is for UI manager views. What about native modules? So in react native if you want to access Bluetooth or geolocation you use this idea of a native module everyone here knows What a native module is? sort of So let's let's take the example of the browser in the browser. This is how you take a picture or record a video What exactly is navigator so you say navigator to get user media, right? What exactly is navigator navigator is window dot navigator? But it is actually a C++ object that the browser exposes to you on the JavaScript side In react native There's no window or there's no global really. So you might just require a native module called camera and then call the method on it Just like the view managers the C++ is going to be a The get native module camera will actually be a host object and whenever the get pictures methods called here That would call the Android or the iOS get picture API and again remember because this whole thing is a synchronous call JavaScript will be able to directly call into native Java or native iOS methods So here's a simple use case of why this is much more performant than what we have today So let's say you have a scenario where you want to take a picture of what you're eating and upload it to Instagram The way you do it is you get the native module for taking a picture that will give you a picture back And then you will call the upload method and pass the picture in right like this. This is this is straightforward, right? Today what happens is this is what happens? So on the this that's the JavaScript side. You have the Android side here The get the get pictures method returns a picture which is sent over to JavaScript and then this JavaScript is sent back to upload Unfortunately because these are two different lands and because you have the bridge today You have to do JSON conversion for both of them and imagine converting a blob type to like JSON and then sending over that's painful In the new world in the future the way it's gonna look like is this Get picture will actually be a picture C++ object and JavaScript can hold a reference to it And when you want to pass in this you just pass the pointer back in In fact because this is a pointer you can actually start even calling methods on that picture object and this This way of direct calling is much more similar to what the browser does and if you think about it in retrospect You would be like hey, why isn't react like this from from the day one, right? So You saw a lot of C++ code. How many of you here are C++ developers? Two three four five. Okay. How many of you are JavaScript developers? Okay, keep your hands up keep your hands up. How many of you so keep All of you who are a JavaScript developer and want to write C++ keep your hands up others put your hands down That's that's surprising. I mean look around you There are just the people aren't really super interested in writing C++ yet, right? So the question is our does it mean that you have to write C++ in react net it not really in fact Most of the code that you saw about the host object and stuff is sort of repetitive If it's repetitive and if a computer can do it, why does why do humans have to do it, right? So we are actually thinking of a code generation system. The idea of the code generation system is this You do something like flow or type script to define what your native module or what your view manager is going to look like Computer can look at this and says hey, this is a native module and these are the different functions in it And we can have a system that generates the C++ module for it There's another hidden advantage of this. So Effectively the big advantage is One you have the C++ code generated so you don't have to worry about it But more importantly when you do things like over-the-air updates a lot of people have pain trying to compare the native version Versus the bundle version for example, you have native version one You have a bundle version and then that bundle version uses a new API Can that new bundle go to older versions of your app that's published? So this is really painful and with this new architecture and the reason why this exists today as a problem is because you might have a type system in JavaScript You have a type system in native, but there's no way to translate them between each other and this whole code generation will actually solve that You'll be able to translate your types into C++ types and tell exactly what exists on the device So what does this really mean for like this is new architecture? What does it really mean for you and me like all this theory was good But our day jobs are writing writing production applications, right? What does this mean? for JS developers Almost nothing should change. I mean the JavaScript code that they write is going to be pretty much similar There's going to be code gen and all that is going to be very similar For people who write native modules or for people who write View managers like basically people write Java Java code or object to see code We'll have this is going to be backward compatible So you cannot so if you want the performance you can convert your existing native modules and view managers into the new system Or you can continue using it with the backward ship, which obviously is going to be a little slower than the modern system Question is can I use this? What's the state of this? You'd be surprised to hear what a lot of this code actually exists in react native which GitHub repository today Technically speaking if you want you may be able to again. I say may because I don't know what the latest What the state of it was last night. I tried it and it worked last night I don't know if something changed today, but you may be able to create a turbo module or a view manager All of this code or at the minimum if you want to understand how the system works end-to-end You should be able to read the code and figure out like hey This is how the end-to-end system looks like so all of this is actually in production right now In fact in Facebook We are testing the system to ensure that this doesn't crash and the performance is there is actually as good as book as good as what we say it is and This is backward compatible that the goal here is we want it's not backward combat It's back out compact. We don't want to fight backward compatibility You remember how when fiber came in you didn't have to worry about it as much You remember how hooks came in and you didn't have to worry about it because hooks was just one way of doing things I think that's something I really like about the react team the react team Very consciously things about their APIs and ensures that they are backward compatible and we want to follow the same sweet So that's about the new arcade new internals of react native But react native is not just about Facebook or not just about what we are doing react native is about the community I'm not sure how many of you are following the react native blog But there was a time when there were tons of pull requests and tons of issues and people were not sure what was happening And there are companies not using react native and stuff like that things have improved tremendously since then If you look at the way react native is effectively structured today, there are a bunch of you managers There are a bunch of native modules which run using a singular react instance layer On which there is a Javascript VM and this is where react.js and your product code work, right? Of course, there are multiple of these view managers and native modules So one of the things we are doing is to ensure that the community has the power. We are moving many of these outside into The community repository what this means is react native will be much thinner This effort is codenamed lean core and what this means is your upgrade switch A lot of people actually have trouble upgrading react native now that react native is going to be much more thinner It'll have much less components upgrading is going to be much easier In fact a lot of this the benefits of this we are already starting to see now the latest version of react native Replaces a react native diff and uses react native purge diff which makes upgrading much much much better Similarly, we are going to now start supporting cocoa pods by default Which means that all of that pain about you going to have you going to try and understand the next code project and modifying it No more you can just use cocoa pods and upgrading will be much much easier the whole the whole paradigm here is react native is a community project and it is the community that is able to make this framework so powerful You can read more about it at the URL below But that's where all of our architectural discussions happen in a very transparent manner So people like me anyone in the audience here can actually go influence the roadmap of react native There are some really good discussions and proposals happening related to turbo modules fabric The new JavaScript the the whole JavaScript VM upgrading it cocoa pods graded dependency even removing the CLI out of the react native core That's a that's a good place to get there I mean if you start getting started with react native and want to get involved that's that's a good place And as I said, it's the community that's building react native and all of the work the hardware that community is doing is actually paying off very well Inside Facebook we use react native for a ton of apps like our ads manager app or our analytics app or our Oculus Companion app. They are all written in react native completely. They are greenfield applications Even things like Instagram and the main Facebook app have tons of react native screens In fact in the main in the main Facebook app if you look at marketplace that uses react native and it's not just Facebook Even bigger companies like Microsoft Amazon Sony Wix all of them actually use react native. In fact Skype has over a hundred contributions into the existing react native framework skype runs react XP Which is like a cross-platform react native web sort of an in a sort of an abstraction And a lot of mobile versions of office the office outlook app that you see parts of it actually are written in react native You'd be surprised you wouldn't know and that's the whole point you you don't as a user You don't have to know if your app is written with react native or not It needs to be smooth. It needs to be performant. It needs to be a native app Here are some more. I mean my here here are some of my favorites like Pinterest For example has react native life. You have the Pinterest app that uses react native a game like Zynga the words with friend games That is actually react native people writing games are using react native for delivering buttery smooth performance And there are many many more I am personally very excited about the future of react native and the direction in which it's going I Personally have been working on cross-platform and hybrid frameworks forever. In fact, I'm actually a commenter in the Apache Cordova project I speak regularly with people from the native script team. We recently visited the people at Flutter a Google at Flutter We're doing Flutter. I used to also report to the same management chain that did Xamarin So I've been doing hybrid apps for a very long time And I think we are in a world where hybrid apps are finally starting to deliver top Experiences and top application performances and this is what is react native and this is what is where react native is headed If you have any questions and are socially awkward like me ping me on Twitter my DMs are open But that is what is react native bringing to you in the future. Thank you Okay Yeah, okay, so questions Sandeep, can you please hand the mic? Hi Pashram. My name is Manu. I wanted to ask What are your views on react XP? It sounds like a good concept that you write code once and have it work on all platforms But why is it not taking off or what are your views on it? Hey, that's actually a very good question In fact, that's also something that we are exploring inside Facebook I am not sure if you've heard but we have hired Nicholas Gallagher who wrote react native web We also hired Vincent Reimer who wrote react native DOM and Facebook internally I think we do believe in the react way of doing things today A lot of people think about react native and react DOM is too like to desperate disparate systems What the way we want to think about it is there is a react way of doing things and react DOM react native react We are are just ways or renderers on top of it So I actually really like the idea of react XP and react XP is not the only one who are trying that There are multiple of these people who are like there are multiple places where Where people have like one component library and then they just reuse it. In fact, yesterday I visited Yesterday I visited Mindra and Flipkart and there's a there's a talk by the people from Flipkart Who are going to talk about this but this is a very interesting interesting concept that's That's getting So this is an It's something that's getting picked up and I think this is where the future is and people are starting to pick up I wouldn't say it's not like react native is react XP is not popular Skype is using it and again the JavaScript community likes drama. So saying popular versus non-popular is I mean if it works for you, it's it's popular that that's why I would put it one more question. Sorry, so The concept of having JavaScript call your C++ functions everything sounds pretty much similar to WebAssembly Is it something that react native is aligning to is it something react is investing into I Mean I can't talk to what react is doing, but it's similar to what the browser is effectively Like browser does this react it only makes this this makes natural sense if you think about it. Okay next question anybody Do we have questions? No Yeah, what are some components that are being moved away from core react native like I saw that async storage is being Moved away. So so the question is the question is what are some of the components that are getting moved out of the core So last half we experimented with web view. How many of you here use react native web view? And how many of you know that it's horrible, right? Like it uses the old system and Stuff so Facebook hasn't been able to do justice to react native web view we moved web view out and in a matter of two months not only were they able to rewrite or like move it to the newer versions of WK web kit web kit, but they were also able to Accept a ton of pull requests. So that's the basic mentality and what we are trying to do is we are trying to move out all Non-essential or all components that we think the community can handle So one set of components are like components that are either iOS specific or Android specific snapshot iOS Android progress bar things like that are moving out The second set of components The second set of components are components that we believe the community is heavily invested in and want to pick up and run with it Like there are people who have expressed interest in ensuring that async storage moves faster And there's no reason for Facebook to be blocking them and we figured hey, let's just move it up That's the general philosophy I think in general the community has been doing an amazing job The rate at which now people can merge pull requests is much much faster than if it was only Facebook being the bottleneck Any more questions? So my question is that for if you are a new developer You want to start on on open source and if you want to work on on react native Or try to Build on some of the modules which you have externalized What are what are some of the tips which you would what you would offer? So I think that's a very good question and it's it's a question that comes up comes up often especially in a demographic like India where people want to get involved but There are no clear guidelines. Unfortunately. So my recommendation would be remember the URL I showed you about discussions and proposals go look at that and that actually has a call for action It says hey, are you interested in picking up this component? You should go pick it up. So that's one way The other way is so I actually spoke with him yesterday He's from Intra and Intra is doing some really good stuff with react native They have some amazing components and if they were to open source those components that in itself will be a big deal So that's another like if you're a company and you think there are that you have built some really good components open source them at The minimum there'll be this extra order of people send you pull requests and stuff Sure, you can choose to ignore them But effectively that's actually a good way to get started because remember everything that you like you personally may not think that that's a big deal But for people outside the work that you do is actually a big deal So there's nothing wrong in either putting stuff that you're already doing out there or trying to see if there are any call for actions and getting involved with that in fact Almost like two months ago Eli who's on art on the react native team. He said on Twitter He posted hey here are some first tasks can anyone help us and all of those tasks But people were picked up by people who have never ever contributed to react native And now they're actually starting to own bigger pieces and bigger chunks of react native And that's actually a pretty big progress from like in two months from doing your first PR to now Managing the entire community. So that's actually another good way to do it. Watch out for the Twitter Like follow me or follow like two people on react native and we kind of ask about this or the better place is on Github The discussions and proposals Thanks One last question. We have one minute. Yeah quick question, please Hi, my name is Paavan. So I have a question. So this new architecture How will it affect debugging and especially I'm coming from a Android Background and also debugging with multiple Different packages together with react native. Hey Paavan, that's actually a very good question In fact, I should have probably covered that but it it goes a little deep So the one thing I would want to tell you is debugging with react native today is one of the best hacks I've ever seen Yet it is a hack What you do is when you start so when you start debugging react native You actually run react native code not on your device But on chrome on a desktop and that's because the javascript VM cannot be debug directly With this new architecture when all calls are synchronous You will be able to attach your debugger directly to that javascript virtual machine So, you know how you debug node using chrome because node uses a chrome remote debug protocol The new debugging is going to be exactly that it's going to jse or the javascript VM is going to expose those methods And you'll be able to directly attach to that. Yeah Thank you everyone and we also have a birds of feather session if you have any questions Especially questions that are specific to your product. Please come talk to us and I'm here to help you people. Thank you