The thing with frameworks like this is that the time invested could be lost if the framework looses traction. I am very hesitant to use a framework like this for anything serious and business-oriented.
Exactly. I wonder if in the future we will more demand API stability of our host platforms so we aren't rewriting the same framework on every API change. I feel like I'm always building on sinking sand, that my programs have half-lives shorter then radioactive elements. Say what we want about Microsoft but they have always valued API stability.
I understand what you're getting at and agree with the sentiment. Knowing work on the .NET framework is going to be supported (see: not broken) for years to come is a big factor for deciding on a basket for your eggs. But aren't most radioactive elements notorious for having half-lives that are long with respect to the human lifespan? Just sayin'.
Yeah, the radioactive element comment is more statement on how our products are slowly decaying. But if I was to choose one with a half-life similar to the lifetime of the products I've worked on I'd go with the isotope: Sodium-22 with a half-life of 2.602 years.
Yes, and there is not big company behind this one as far as I can see, Google's Flutter and Facebook's React Native will for sure have support from these companies cause they have projects written with their frameworks but this one, I'm hessitant.
Right now I'm vouching for Flutter, I tried their golden prototype "Hamilton — The Official App" on a slow android device and it runs pretty smooth. Not sure about iOS tho.
Thats true, however in the long term, we need a react like framework that solves cross platform development. React Native has lots of problems with navigation, the AirBnB team even stopped using it seriously.
I guess Kotlin and Kotlin Native (which runs on ios) could be a good started for building a KotlinReactNative, which allows creating an UI in a DSL based syntax that works on multiple platforms.
Also interested in hearing if they really stopped using React Native as a whole. Especially since their react-native-maps library is the defacto library for maps. It would be quite scary if they decided to stop using React Native.
Right now, the only thing I'm currently aware of is that their navigation library (native-navigation [1]) is pretty much unmaintained and they are trying to plan out a transition to move it under react-community.[2] The only thing that hints at their slowing use of React Navigation is the mention of conversion to React Native's navigation getting a much lower priority to the point that the native-navigation library has essentially become unmaintained.[3] But when I initially read that, it didn't come off as Airbnb deciding to stop using React Native.
We have definitely not stopped using React Native! Not sure where you got that impression. We continue to heavily invest in it as well as native platforms and make a case by case decision for all new products.
Don't know if it's related, but maybe this has to do with AirBnB releasing their own navigation library (native-navigation), meanwhile Wix's react-native-navigation seems to be seeing more activity and slowly becoming the officially sanctioned RN navigation library?
And one of the main persons behind ReactNative at AirBnB seems to be less enthousiastic in his latest interview.. However i cant find the interview anymore
Do you think they've switched to another navigation framework? I've had some success with https://reactnavigation.org/ - although it's fairly early stage.
We have actually be using an internal navigation framework that is unfortunately quite tightly coupled to our app. It's been working very week for us which is why we decided to make an open source "clone" of it. Our original intention was to migrate our internal navigation library over to the open source clone we made. However, with the realities of life, we haven't had the time to actually do that yet which is why we haven't been maintaining it.
Like Leland said above, we're still working hard and making exciting progress on React Native but we continue to invest in native platforms as well and product teams make a case by case decision on which one to use.
Assuming the person you're talking about was me, I'm curious what it was I said that made me seem less enthusiastic? I always try to be as honest as possible in my interviews, and I don't think my enthusiasm has changed much over the last year or two, though I certainly have learned a lot!
I don't think Airbnb has ever been "completely going all-in on React Native" or "completely dropping React Native", but people always seem to want it to be one or the other. The truth is it's almost always something in the middle.
Early this year, they switched to their own navigation library. The issue they had with React Native's navigation components was they have a React Native project that used to be a native iOS project, so they had to navigate across "screens" from 2 different toolsets seamlessly.
You wouldn't have this problem if you start a React Native project from scratch.
They seem to be still using React Native. Have you heard otherwise?
I was recently reading up on Ionic[1], is going the hybrid route not considered a viable option for solving the cross platform development problem? I am not a front-end developer but also have a recent need for something similar to Matcha/React/Kotlin.
Depends on the problem you're solving. I've seen a ton of ionic apps written for in-house use at large enterprises. Often the lower cost of maintenance and development costs more than justifies the slightly poorer UX that usually comes with cordova apps. That tradeoff isn't always acceptable in a direct to consumer app, which is why you don't see a ton of popular apps in the app/play store backed by ionic framework.
Thanks for your feedback. Would it make sense then to prototype an app in Ionic/Corodva before paying someone to replicate the functionality natively using Java/Swift? Or is that really just false economy? My use case is really just a proof of concept at the moment.
I'd start even simpler and use a tool like Figma to prototype the UI and workflows that are at the core of your app. Then start actual development based on the feedback from showing it to potential users.
A lot will depend on why you need cross-platform support at launch. For most direct to consumer apps, your intended user base should skew to one platform or the other and should be large enough to support a beta and launch on a single platform. Not launching with both platforms supported won't make or break your app and launching with both without much mobile experience to begin with could even prove to be a distraction while you try to iterate on you're app's design.
If you're selling an app to businesses, then not supporting both iOS and Android at launch would be a real roadblock. In that case starting and maybe even staying with Ionic could make sense.
My only recommendation would be to not skip the prototyping phase, even if it's just a pen and paper. No matter how fast you are mocking things up in html, you'll almost always going to be faster sketching it out. When I started mobile development for the first time, I jumped right into coding and I feel like I wasted a lot of time re-arranging things I could have avoided if I just took the time to sketch it out.
This just isn't true. Airbnb is actively using React Native a lot and has not "stopped using it seriously". I'm not sure where you got this impression. Some people responding to this are mentioning the transition of the potential native-navigation library to react-community. This is a library that we never actually used in production, though the plan was to move off of our internal library to this one shortly after open sourcing it. Priorities shifted internally (to other, more pressing react-native related things that aren't OSS), and we have not yet been able to do that. Since the community really wanted to work on the library despite us not actively maintaining it, transitioning it to react-community seemed like a better thing to do than further fragment the community by having people fork it. I'm still hopeful that we will be able to migrate to it in the future.
Source: I am the tech lead of React Native infrastructure at Airbnb and the primary author of native-navigation.
Thanks for your reply @lrichardson. I got the impression that ReactNative was having a hard-time within AirBnB lately due to a lukewarm response from Native Developers. (You mentioned this in an interview). Sorry for my mis-interpretation.
Where does AirBnB actually use ReactNative, and where is it purely native? I was in the understanding the move to ReactNative was not going "the way you preferred".
I can imagine there are some roadblocks using it everywhere. Or some hesitation from Native Developers.
For me also: Using JavaScript as a language run inside a interpreter inside my app doesn't seem like a smart move. Also native like navigation, activity lifecycle, animation etc are probably hard to get right with React Native.
The biggest problem with these frameworks is that they ignore the elephant in the room.
We already have a widely adopted, widely compatible, highly developed and open framework for cross platform development: webpages.
My confidence that Mr. J. Random Hacker - or even J. Random Company Inc. - can do better than this - and support it for over 2 decades - is close to 0.
If this framework focalizes on iOS and Android then it might be more useful than webpages in some cases. Native applications are still the way to go if you need to do computationally intensive tasks, UIs that are responsive (especially on Android), UIs that display real time data (especially on iOS) and anything that uses the cool features the phones have.
Sure. The current problem on iOS is that you can not replace the web-rendering engine, thus you have to send messages or call callbacks into the web engine api. You have no guarantees as to when they will be actually executed and you have to serialize your data.
In my application I needed to display data incoming from a sensor. I can only access this data using the native functions and it comes at around 500Hz from 16 sensors.
For comparison, in Electron, when you call a function defined in a module written in C++, you can get the answer in under 1 ms. When using something like Cordova, you have to serialize the data which can take a seriously long time and then you have to wait for the callback to execute. On Android I suppose it is quite possible to write a V8 native plugin and achieve this performance, but not on iOS where you are limited to included webkit.
As for the Android responsiveness, the problem lies with the single threaded nature of JavaScript. CPUs on android phones _suck_ in single core performance. When I was looking for a good solution for multi platform development, I have found of a tech meeting that was supposed to present solutions taken by several different companies. It turned to be a huge complaint-fest about Android javascript performance and the only happy people were those using Xamarin (which is native).
Edit: Note that I think that using web views for applications like banking or chat and so on is perfectly fine. My issue is with apps that eat a lot of incoming data and/or have to change what is displayed very often.
Don't know about Android, but on iOS and macOS, Apple introduced the WKWebView technology that is recommended over using normal web views (the old way for many years), and it interacts seamlessly and instantly with Swift (and probably Objective-C too), the system even bridges the types for you as they go across the boundary. Apple specifically tried to further support the growing desire to use web views and Javascript technology inside a native app. I've used it quite successfully, the experience feels like native.
Perhaps systems that automatically build out to iOS have not been updated to use these features, or there is something else going on in Cordova to introduce latency? Because for at least 2 years now there is no reason to have the problem you describe.
You clearly haven’t used WKWebView. It renders off-process, so actually data passi gbetween your native code and the JS contained in it is even slower. This is in addition to the many many many limitations due to the off-process nature of the system.
Maybe some day, when people won't prefer native apps over webpages.
What good does it do to make a webpage using technologies that will have support two decades from now (by the way, that isn't happening either), if what you need is people using your webpage/app now?
That's not really a direct comparison. We're not talking about languages here - it's the framework. React Native is used and developed by Facebook, whereas Matcha is used and developed by no one notable (afaik).
You're comparing Go to RN. The comparison he's making is Matcha to RN. Matcha doesn't come from a giant company. The language it's in does, but that doesn't mean anything for framework momentum.
We are discussing about the framework itself and not go as a language.
The framework is a nice idea, and will definitely help into diversifying some of the mobile frontend stuff.
On the other hand you can't compare RN to this framework.
As the person you commented on, facebook has been using RN on its main products like instagram, so it has proven that the framework can be placed on production ready apps with a massive userbase.
Use to be that if there was a nice open source project that solved most of a problem you had, you'd jump on, if you had the ability, and contribute back to it. Now I guess we just wait for random handouts from big companies so we don't have to do any work ourselves. Bit of a shame, the appification of open source, but I guess that's where it's going. Big and supported, with no room for newcomers.
I wonder how this is much different than what people say about net neutrality? Once the big guys are there, they'll actively do what they can to kick the latter down so no upstarts can chase them up it, and I guess this is just as true of the web.
Hope we can find a big company to release us an open source web replacement one of these decades, since I guess we won't be able to band together and build it for ourselves.
I see it as a sign of maturity. People now realize it's completely unreasonable to think about debugging or maintaining some codebase as a hobby themselves (aka: in addition to the product they're building). For a cross-platform dev framework on mobile, knowing the pace at which those platforms are moving, you need something that has both the team , the fund and the stakes.
I just saw a tweet this morning reminding React Native people about three20, the previous Facebook framework that they abandoned.
At least React Native has been around for a while and has a good sized community.
This is a neat little project but I would treat it like a toy unless you were willing to step up and take over maintence before usi it for a production app.
(This wasn’t meant as a stab at React Native, it was meant as a warning about picking up frameworks that don’t have much history. RN is a few years old. I don’t think it will disappear next year).
For those who don't know, Three20 really was two order of magnitude less involving if you decided to use it. It really was just a library of convenient classes that you could choose to use or not, or just part of it.
I've started working on a side-project developing a mobile application when Fuse[1] got "traction". I remember the bashing on HN regarding the name (since well libfuse). I'm usually all sys/backend, but I've got into it. You start digging through their board and see a lot of examples, catch around stuff on their channel and so on. Kind of joy sometimes.
The thing is, I've been planning to support both iOS and Android from the early start. So that was really a great choice, it looked promising. Or so was I thinking.
After fine 7 months, my new shiny mobile app. was behind somehow manageable code and one developer - me. Stay still, I never worked on mobile before. So I went for market and hit few clients at an early stage. Good news everyone, we got this. As a co-founder with other two, designer and marketing manager, we went out as a `free` and rent the magical space. The hype was there and -. Clients started requesting features, which meant another success. The ideas presented were fine with us and I started working furiously on it. Pressure and all, inb4 start digging for more developers. Few remote devs and features are ready, users love them. Now it gets to more advanced features, UI, code starts to get abstract, and devs aren't sure if they web, script or compile. We somehow managed to stay on ball.
After five such months, we ditched the Fuse and rewrote to native. Since devs where remote, they understood the cards. Some of them are still here. Now we are all happy, codebase is eh.. fine, stuff are supported, you know.
The story speaks I think. These tools, at early stage, should be took as a grant of salt. I do however appreciate work given towards creating xp stuff. Some of these tools are great for prototyping.
> The gomatcha.io/bridge package handles the interface between Objective-C and Go. Go values become MatchaGoValue in Objective-C, and Objective-C values become *bridge.Value in Go. Methods and functions can then be called on these objects using reflection.
Does this mean that you can call any of the Objective-c frameworks from Go lang side? if so, and if working well that would be a huge improvement compared with react-native.
Looking at the examples for calling ObjC from Go, it looks like you still need a native piece of code to register the ObjC function being called and act as a shim (so same as RN I think).
Looking at it from another perspective, there's a practical difficulty to being able to dynamically invoke any ObjC function from Go: the ObjC compiler would still need to know what libraries to link, and header files to include.
The reflection is limited to calling methods on objects. So it would be difficult to directly interface with Apple frameworks. You couldn't build closures or respond to delegate callbacks for example.
Wasn't there a proposal to expose native functionality in browsers on iOS and Android? If that were to be finished it could make things like this and react native less necessary.
For me one of the showstopper for webapps on iOS was that there is no immediate, synchronous way to communicate data between the native part and the visualisation part. Since the only way is to communicate via messages which are painfully slow.
Why would Apple ever implement that? They’ve made their point of view on preferring native development (and being very cautious about what’s exposed to the browser) very clear.
Cool! This might make it a lot easier to get IPFS going on Mobile platforms .. there is already a shim for getting IPFS built and running alongside a native iOS app but it'll be much more interesting to do the whole thing in Golang ..
I think it's really great to see a project like this coming out, as someone who loves writing Go on the server side, but has been grinding my teeth through learning JS to be able to do client-side work. That said, I would love to hear more about how a compiled Go app will handle three of what I see as being RN's biggest advantages:
1) Ability to quickly see changes in the simulator as you're modifying code (one of the main reasons I went with RN over ObjC/Swift, is I can just Cmd+R and boom, my changes are live in a second).
2) Pushing new updates remotely, without having to resubmit your app. Would Go being statically compiled, mean we can't ship bits of executable code for minor updates / bug fixes as we see fit?
3) Debugging is really nice on RN, because you get to leverage awesome JS debugging environments like Chrome DevTools. While I've not yet had a need for a fancy debugger with Go, I could see that as a big sticking point for teams trying to choose.
Nonetheless, really applaud this effort so far, and look forward to seeing more. Go's concept of goroutines seems much better suited to UI event handling, then stringing together a ton of promises and callbacks. And don't even get me started on the async keyword...
That is, why be explicit about async when implicit style code is much easier to read. That said, the answer in this case is simply backwards compatibility - JS already had a concurrency model before async/await came around.
You can also make a explicit is better than implicit argument; it’s mostly personal preference/ideology though. That said, Python has been in a fun land of “rewrite the world” because the async model they chose (async/await) was not backwards compatible to any existing libraries. So now in Python which library you use for e.g. http varies with which concurrency model you use in the rest of your app.
NightMKoder is right on, that article ("What color is your function") sums up exactly how I felt, trying to learn JavaScript after knowing Go. Also, this interview with Node.js creator Ryan Dahl, where he himself admits that Go solves the async programming model much better than JavaScript, I can relate completely to the reasons he gives: https://www.mappingthejourney.com/single-post/2017/08/31/epi...
"You can also make a explicit is better than implicit argument;"
While I'm generally an explicit sort of guy in these contexts, there isn't much that being explicit buys you here, except the ability to write bugs. There's really only one right answer and the compiler is perfectly capable of handling it. In the exceedingly rare cases where you need to override it, you can. Given how exceedingly rare those cases are we're easily in the realm of "use another language" or "fork & hack the runtime" sorts of things.
You're totally right, I'd go back and fix that if I could. Funny how a few months learning a new framework can make you forget how normal people talk :)
At one point, I read that the rule in question, is you cannot push new features without going through the approval process again. So it really comes down to what Apple considers "new features". People have definitely pushed bug fixes, and even small features, without issue.
Perhaps ironically, when I worked on the iTunes Store (which is mostly all HTML and JavaScript) there was hardly a week went by that new code didn't get pushed (mostly bug fixes and under-the-hood updates). Yet Apple only really announced new iTunes Store features several times a year. So, one would hope they understand the need for continuously updating a complex piece of software, versus shipping major pieces of new functionality.
Per Apples policy interpreted languages are allowed to be updated over-the-air as long as they don’t change the app in any significant way (aka bug fixes and such)
Yeah unfortunately, those are downsides that I don't think will change unless we get Go on wasm or something similar. Go brings its own advantages though. Fast, static typing, goroutines, theres no need for JSX, etc. And personally the JS ecosystem doesn't appeal to me at all.
You have kinda missed the point, Go produces fat binaries with all dependencies and the Go runtime included.
Serious question: How do you propose that WASM is going to help the situation?
Well if they got the Go runtime on WASM, you could run it in a interpreter and do live reloading. Keeping state across reloads would be challenging, but I don't think it would be an impossible feat.
Saving and reloading object state across code changes is one of those things that if you don't build it in to the language from day one, it's really hard to add it in later. I wouldn't expect Go to get it anytime soon.
Even if you do manage to hack it in to something that wasn't designed with it in mind, it's always hacky, quirky, and unreliable, and you never quite know whether you're looking at a bug in your own code or in the state management hackery.
It isn't impossible. You are technically correct. But it's certainly taking impossible out for drinks, followed by long strolls on the beach, and a lot of meaningful staring.
I actually remember Delphi and C++ Builder (though I spent most of my time in Visual C++), and React Native certainly wasn't my first exposure to hot reloading, but if your only exposure to iOS programming was via XCode, having hot reloading (whether that's React Native or Flutter or Xamarin) can seem like a revelation in how much more productive you can be, when you're not waiting for your app to rebuild and install. So from that perspective, it is kind of like rediscovering the old. (And I didn't mention it, but React Native can reload while preserving state, it's just not the default).
Flutter looks very promising btw, I probably can't use it yet though for the same reasons as Matcha, which is my current project depends on too many external libraries (for which React Native and the larger JavaScript community has been great).
I would love to use this at some point. I would also contribute towards the development of this framework. I love Go and I don't want to switch to JavaScript when I want to write a iOS/Android application. Everything has to begin somewhere. This is probably a first step to something fine.
Any sufficiently advanced mobile app will redo at least its onboarding flow in the web. Capturing acquisition funnel details over an app download flow is either impossible if you're ethical or shady as hell even if you're not.
This inevitably leads to a copy of your settings and account management page ion the web. At that point, why NOT get people into a decent experience as fast as possible?
If it didn't work with React Native and the much richer Javascript/Typescript world, what makes you think that Go will magically make it better?
I get that you like Go, logically (although emotionally, I can only feel confusion from such an idea). But no one has even remotely offered an idea what advantages Go brings to this table other than "I like it!"
Which is cool, but I loathe it. So unless there are compelling things in this framework (hence my question) this seems like a great way to use worse tooling and an awkwardly shoehorned language to fail to accomplish exactly what other frameworks have failed to do.
I would say that React isn't a unique case if one feels this way. There are probably individual frameworks within your language community that translate to usable front-end code.
I'm the author of this framework. I think Matcha has a really cool approach to building UIs. Everything is built on top of interfaces, so its very easy to reuse and customize components and layouts. Its not quite production ready but I can any answer any questions.
Thanks overcyn great framework. How you are bridging between iOS and Android. Can you provide simple example code that make me understand how you make things working and internal details.
It will help me to understand better. Any future plans to write blog.
The bridging happens through Cgo and JNI. bridge/matchaforeign.h contains the functions that Go implements that can be called by ObjC/Java and bridge/matchago.h are the functions that Java/Objc implements that can be called by Go. Everything else is built on top of that.
Repasting my comment from below, but Matcha is actually based on top of gomobile, albeit with a bunch changes to fit the needs of this framework. Gomobile provides language bindings and Matcha adds a usable component library on top of that. It serializes Go data structures into protobuf, passes it through to iOS/Android and creates the necessary views. Matcha also does all the layout, event handling etc.
I really like using go for writing e.g. the logic part of an Android/iOS/Desktop app. Would not it make more sense architecture wise to write UI real native and do the interfaces really well to the logic binary go parts? Are there good examples/libs for this approach?
I amazed by seeing this type of frameworks and code written by a single person. How can one person write this type of framework. I want to learn this. Anyone please provide suggestion how to make myself better like this.
How much time and dedication he devoted in this is really amazing.
Thank you, I appreciate that! I was just lucky to have saved enough money to take some time off and work on something I find interesting and think has a lot of potential.
This is actually based on top of gomobile. Gomobile provides language bindings and Matcha adds a usable component library on top of that. It serializes Go data structures into protobuf, passes it through to iOS/Android and creates the necessary views. Matcha also does all the layout, event handling etc.
You can definitely mix native and dynamic views. Theres an interface for registering custom views with the framework. It doesn't need to take over your entire app either. Matcha gives you a view controller, which displays the Go stuff, but that can be presented however you like.
can someone explains how this is different from ReactNative, Phonegap, etc.
I've never done production mobile app, just played with examples on iOS and Android, wondering if this is a good framework to play with and eventually use for production mobile apps
I’m curious about something. Asking as someone who doesn’t make a living slinging code, and who is kind of terrified of mobile development because of all the UI stuff (xcode makes me want to cry), in case any pro mobile devs want to answer: is the UI part the real pain point here?
It seems to me like it must be, rather than the cross-platform thing, because what people are producing seems heavily weighted toward “here are UI components you can use” (or even in the react native case “here’s an entirely different way of doing UI, yanked straight from webland”). Whereas if it were just a matter of sharing a codebase across platforms, it seems like it would be easier to work on a compiler-side, e.g. by extending clojure, scala, etc. to compile to swift.
But maybe that’s just my bias because I look at any ui code from anything and my eyeballs start to bleed.
UI is the difficult part in my opinion. iOS and Android take different approaches to building apps so even if you had a language that perfectly compiled to both Swift and Java, the code to build your views would end up diverging significantly without some sort of component library.
130 comments
[ 4.0 ms ] story [ 208 ms ] threadMaybe we shouldn’t be building frameworks on top of frameworks on top of other languages?
Maybe officially supported tools/languages are often a good choice.
Edit: Going by https://en.wikipedia.org/wiki/List_of_radioactive_isotopes_b..., it seems that most of the halflives fall in the 10^(n where n <= 6) seconds category which is smaller than a human lifetime.
I guess Kotlin and Kotlin Native (which runs on ios) could be a good started for building a KotlinReactNative, which allows creating an UI in a DSL based syntax that works on multiple platforms.
Do you have any info on why Airbnb stopped using React Native? Would love a good read on why.
Right now, the only thing I'm currently aware of is that their navigation library (native-navigation [1]) is pretty much unmaintained and they are trying to plan out a transition to move it under react-community.[2] The only thing that hints at their slowing use of React Navigation is the mention of conversion to React Native's navigation getting a much lower priority to the point that the native-navigation library has essentially become unmaintained.[3] But when I initially read that, it didn't come off as Airbnb deciding to stop using React Native.
[1] https://github.com/airbnb/native-navigation
[2] https://github.com/airbnb/native-navigation/issues/145
[3] https://github.com/airbnb/native-navigation/issues/145#issue...
Is this true? I'd be interested to see a citation on AirBnB stopping using it, last I heard they were going all-in.
As for the issues with navigation, isn't it just that there isn't a great navigation library yet?
And one of the main persons behind ReactNative at AirBnB seems to be less enthousiastic in his latest interview.. However i cant find the interview anymore
Like Leland said above, we're still working hard and making exciting progress on React Native but we continue to invest in native platforms as well and product teams make a case by case decision on which one to use.
Hope that clarifies things a bit :)
https://github.com/react-community/react-navigation
I don't think Airbnb has ever been "completely going all-in on React Native" or "completely dropping React Native", but people always seem to want it to be one or the other. The truth is it's almost always something in the middle.
You wouldn't have this problem if you start a React Native project from scratch.
They seem to be still using React Native. Have you heard otherwise?
[1] https://ionicframework.com/
A lot will depend on why you need cross-platform support at launch. For most direct to consumer apps, your intended user base should skew to one platform or the other and should be large enough to support a beta and launch on a single platform. Not launching with both platforms supported won't make or break your app and launching with both without much mobile experience to begin with could even prove to be a distraction while you try to iterate on you're app's design.
If you're selling an app to businesses, then not supporting both iOS and Android at launch would be a real roadblock. In that case starting and maybe even staying with Ionic could make sense.
This just isn't true. Airbnb is actively using React Native a lot and has not "stopped using it seriously". I'm not sure where you got this impression. Some people responding to this are mentioning the transition of the potential native-navigation library to react-community. This is a library that we never actually used in production, though the plan was to move off of our internal library to this one shortly after open sourcing it. Priorities shifted internally (to other, more pressing react-native related things that aren't OSS), and we have not yet been able to do that. Since the community really wanted to work on the library despite us not actively maintaining it, transitioning it to react-community seemed like a better thing to do than further fragment the community by having people fork it. I'm still hopeful that we will be able to migrate to it in the future.
Source: I am the tech lead of React Native infrastructure at Airbnb and the primary author of native-navigation.
Where does AirBnB actually use ReactNative, and where is it purely native? I was in the understanding the move to ReactNative was not going "the way you preferred".
I can imagine there are some roadblocks using it everywhere. Or some hesitation from Native Developers.
For me also: Using JavaScript as a language run inside a interpreter inside my app doesn't seem like a smart move. Also native like navigation, activity lifecycle, animation etc are probably hard to get right with React Native.
We already have a widely adopted, widely compatible, highly developed and open framework for cross platform development: webpages.
My confidence that Mr. J. Random Hacker - or even J. Random Company Inc. - can do better than this - and support it for over 2 decades - is close to 0.
In my application I needed to display data incoming from a sensor. I can only access this data using the native functions and it comes at around 500Hz from 16 sensors.
For comparison, in Electron, when you call a function defined in a module written in C++, you can get the answer in under 1 ms. When using something like Cordova, you have to serialize the data which can take a seriously long time and then you have to wait for the callback to execute. On Android I suppose it is quite possible to write a V8 native plugin and achieve this performance, but not on iOS where you are limited to included webkit.
As for the Android responsiveness, the problem lies with the single threaded nature of JavaScript. CPUs on android phones _suck_ in single core performance. When I was looking for a good solution for multi platform development, I have found of a tech meeting that was supposed to present solutions taken by several different companies. It turned to be a huge complaint-fest about Android javascript performance and the only happy people were those using Xamarin (which is native).
Edit: Note that I think that using web views for applications like banking or chat and so on is perfectly fine. My issue is with apps that eat a lot of incoming data and/or have to change what is displayed very often.
Perhaps systems that automatically build out to iOS have not been updated to use these features, or there is something else going on in Cordova to introduce latency? Because for at least 2 years now there is no reason to have the problem you describe.
You clearly haven’t used WKWebView. It renders off-process, so actually data passi gbetween your native code and the JS contained in it is even slower. This is in addition to the many many many limitations due to the off-process nature of the system.
What good does it do to make a webpage using technologies that will have support two decades from now (by the way, that isn't happening either), if what you need is people using your webpage/app now?
RN came from a giant company that uses it in its core product. Big difference.
cf https://talks.golang.org/2012/splash.article
(Agree with parent but not wanting Go to be left out of the "giant company" bucket.)
The framework is a nice idea, and will definitely help into diversifying some of the mobile frontend stuff.
On the other hand you can't compare RN to this framework.
As the person you commented on, facebook has been using RN on its main products like instagram, so it has proven that the framework can be placed on production ready apps with a massive userbase.
Yeah the kids nowadays are terrible.
Large codebases have never been particularly welcoming to newcomers.
At least React Native has been around for a while and has a good sized community.
This is a neat little project but I would treat it like a toy unless you were willing to step up and take over maintence before usi it for a production app.
(This wasn’t meant as a stab at React Native, it was meant as a warning about picking up frameworks that don’t have much history. RN is a few years old. I don’t think it will disappear next year).
RN is an entirely different beast...
I've started working on a side-project developing a mobile application when Fuse[1] got "traction". I remember the bashing on HN regarding the name (since well libfuse). I'm usually all sys/backend, but I've got into it. You start digging through their board and see a lot of examples, catch around stuff on their channel and so on. Kind of joy sometimes.
The thing is, I've been planning to support both iOS and Android from the early start. So that was really a great choice, it looked promising. Or so was I thinking.
After fine 7 months, my new shiny mobile app. was behind somehow manageable code and one developer - me. Stay still, I never worked on mobile before. So I went for market and hit few clients at an early stage. Good news everyone, we got this. As a co-founder with other two, designer and marketing manager, we went out as a `free` and rent the magical space. The hype was there and -. Clients started requesting features, which meant another success. The ideas presented were fine with us and I started working furiously on it. Pressure and all, inb4 start digging for more developers. Few remote devs and features are ready, users love them. Now it gets to more advanced features, UI, code starts to get abstract, and devs aren't sure if they web, script or compile. We somehow managed to stay on ball.
After five such months, we ditched the Fuse and rewrote to native. Since devs where remote, they understood the cards. Some of them are still here. Now we are all happy, codebase is eh.. fine, stuff are supported, you know.
The story speaks I think. These tools, at early stage, should be took as a grant of salt. I do however appreciate work given towards creating xp stuff. Some of these tools are great for prototyping.
[1] https://www.fusetools.com/
> The gomatcha.io/bridge package handles the interface between Objective-C and Go. Go values become MatchaGoValue in Objective-C, and Objective-C values become *bridge.Value in Go. Methods and functions can then be called on these objects using reflection.
Does this mean that you can call any of the Objective-c frameworks from Go lang side? if so, and if working well that would be a huge improvement compared with react-native.
Looking at it from another perspective, there's a practical difficulty to being able to dynamically invoke any ObjC function from Go: the ObjC compiler would still need to know what libraries to link, and header files to include.
1) Ability to quickly see changes in the simulator as you're modifying code (one of the main reasons I went with RN over ObjC/Swift, is I can just Cmd+R and boom, my changes are live in a second).
2) Pushing new updates remotely, without having to resubmit your app. Would Go being statically compiled, mean we can't ship bits of executable code for minor updates / bug fixes as we see fit?
3) Debugging is really nice on RN, because you get to leverage awesome JS debugging environments like Chrome DevTools. While I've not yet had a need for a fancy debugger with Go, I could see that as a big sticking point for teams trying to choose.
Nonetheless, really applaud this effort so far, and look forward to seeing more. Go's concept of goroutines seems much better suited to UI event handling, then stringing together a ton of promises and callbacks. And don't even get me started on the async keyword...
Please do! Genuinely curious what you don't like about it.
That is, why be explicit about async when implicit style code is much easier to read. That said, the answer in this case is simply backwards compatibility - JS already had a concurrency model before async/await came around.
You can also make a explicit is better than implicit argument; it’s mostly personal preference/ideology though. That said, Python has been in a fun land of “rewrite the world” because the async model they chose (async/await) was not backwards compatible to any existing libraries. So now in Python which library you use for e.g. http varies with which concurrency model you use in the rest of your app.
While I'm generally an explicit sort of guy in these contexts, there isn't much that being explicit buys you here, except the ability to write bugs. There's really only one right answer and the compiler is perfectly capable of handling it. In the exceedingly rare cases where you need to override it, you can. Given how exceedingly rare those cases are we're easily in the realm of "use another language" or "fork & hack the runtime" sorts of things.
Perhaps ironically, when I worked on the iTunes Store (which is mostly all HTML and JavaScript) there was hardly a week went by that new code didn't get pushed (mostly bug fixes and under-the-hood updates). Yet Apple only really announced new iTunes Store features several times a year. So, one would hope they understand the need for continuously updating a complex piece of software, versus shipping major pieces of new functionality.
https://github.com/golang/go/issues/18892
Even if you do manage to hack it in to something that wasn't designed with it in mind, it's always hacky, quirky, and unreliable, and you never quite know whether you're looking at a bug in your own code or in the state management hackery.
It isn't impossible. You are technically correct. But it's certainly taking impossible out for drinks, followed by long strolls on the beach, and a lot of meaningful staring.
As someone with experience in Delphi, C++ Builder, Smalltalk having younger developers rediscovering this looks funny.
Have a look at Flutter and Xamarin.
Flutter looks very promising btw, I probably can't use it yet though for the same reasons as Matcha, which is my current project depends on too many external libraries (for which React Native and the larger JavaScript community has been great).
Why would we voluntarily choose an inferior 3rd party tool when superior first party tool exists?
No, write it thrice (need mobile web version as well).
This inevitably leads to a copy of your settings and account management page ion the web. At that point, why NOT get people into a decent experience as fast as possible?
I get that you like Go, logically (although emotionally, I can only feel confusion from such an idea). But no one has even remotely offered an idea what advantages Go brings to this table other than "I like it!"
Which is cool, but I loathe it. So unless there are compelling things in this framework (hence my question) this seems like a great way to use worse tooling and an awkwardly shoehorned language to fail to accomplish exactly what other frameworks have failed to do.
On the basis of language, Go is a regressive and under-performant pile that people seem to love largely because of its nostalgia factor.
What about this framework helps to offset how awful Go is?
It will help me to understand better. Any future plans to write blog.
How much time and dedication he devoted in this is really amazing.
I've never done production mobile app, just played with examples on iOS and Android, wondering if this is a good framework to play with and eventually use for production mobile apps
It seems to me like it must be, rather than the cross-platform thing, because what people are producing seems heavily weighted toward “here are UI components you can use” (or even in the react native case “here’s an entirely different way of doing UI, yanked straight from webland”). Whereas if it were just a matter of sharing a codebase across platforms, it seems like it would be easier to work on a compiler-side, e.g. by extending clojure, scala, etc. to compile to swift.
But maybe that’s just my bias because I look at any ui code from anything and my eyeballs start to bleed.