title: Understanding code push for react-native
body: <p>I'm starting building a react native application for both iOS and Android. I've read through the documentation of react native application, but there is one thing now I do not understand:</p>
  
  <p><strong>Is react-native app fully native application?</strong></p>
  
  <p>They say in react-native, that it would be. Then why am I asking this question? Well, I found the reason to ask the question through <a href="https://github.com/Microsoft/react-native-code-push" rel="nofollow noreferrer">https://github.com/Microsoft/react-native-code-push</a>. According to code push, they are able to dynamically update the application. And this is done by updating the javascript part of the application. But wait, if the application is real native app, then in the final version of the app there shouldn't be any javascript, am I right? So how are they doing it? Are they compiling the application at code push servers, and then sending the compiled app to the user or what? This really worries me that the react-native app is really not fully native app.</p>
  
  <blockquote>
    <p>The CodePush plugin helps get product improvements in front of your end users instantly, by keeping your JavaScript and images synchronized with updates you release to the CodePush server. This way, your app gets the benefits of an offline mobile experience, as well as the "web-like" agility of side-loading updates as soon as they are available. It's a win-win!</p>
  </blockquote>
  
  <p>Also, the reason I'm doubting this is because they say also in code-push documentation, that they are unable to update the native part of the react-native application: </p>
  
  <blockquote>
    <p>Note: Any product changes which touch native code (e.g. modifying your AppDelegate.m/MainActivity.java file, adding a new plugin) cannot be distributed via CodePush, and therefore, must be updated via the appropriate store(s).</p>
  </blockquote>
  
  <p>If the react-native app would be fully native, then in the end, all code should be native code. So I don't really understand why would it be harder to update the native native code, than the code that has been compiled to native?</p>