Change UI layer of app in production? What would you do?

Hi there!

So I know threads like this might popup quite often but bear with me … I hope some people can give me their honest opinion and thus help me decide what to do! :slight_smile:

I have a meteor app in production with a few customers and also making money with it. Over the last couple of months many feature requests popped up - all while the whole “is Meteor dead?” (bullsh*t) discussion was going on! I am pretty sure that Meteor is obviously not dead but …

Blaze might be dead. (?!)

My question to you is:
Would you switch from Blaze to another UI lib or would you stick with it?
I kind of like Blaze but some parts of it also drive me crazy.
I started doing a (paid) beginners tutorial for React and again … some parts make total sense to me but many seem like a lot more complex than Blaze … for no reason.
What about VueJS? Does this look like a good alternative to you?

Stick with Blaze or switch to another UI lib?

  • Stick with Blaze
  • Switch to React
  • Switch to Vue.JS
  • Other

0 voters

I am aware that all this is a pretty subjective question but still - please give me your honest opinion what YOU would do - not only voting but also replying WHY you would do X is of course highly appreciated! :slight_smile:

Thanks a lot,
Patrick

The important thing to state at the beginning is, there are few hundreds of React+Meteor developers here compared to just a literal few Vue+Meteor developers out of whom most doesn’t even have experience with Vue+Meteor combo in production yet.

But I believe it’s already a good decision not to consider Angular.

As a fan of Vue, I have to admit that I kept my Blaze apps in production as they are, and used Vue only for new projects. That said, most my Blaze apps are small and practically don’t need any maintainment. I’m rewriting one of the bigger ones, but it was still in a closed beta, with no userbase except for my friends.

There is an option to use both React and Vue components as children of your Blaze templates, as well as using Blaze templates in React and Vue components.

I’m in the middle of writing a longer article about it, but in short, here are the advantages and disadvantages to use Vue as Meteor view layer at the moment. Some of them are a matter of opinion - React users will hate them, Blaze users will love them. Some other are also available in React.

Advantages

  • similar to Blaze
  • no need for ReactiveVars and Sessions
  • very easy to learn
  • great documentation, a lot of free text and video tutorials
  • fast as speedy gonzales
  • virtual dom
  • hot module reload out of the box with Meteor
  • very small footprint for core libraries
  • single file components with separate parts for each language (HTML / JS / CSS)
  • easy use of preprocessors (Jade, Coffee, SASS etc)
  • viewmodel based interaction between templates and scripts (like in manuel:viewmodel)
  • router (Vue-router) in the core
  • transitions support for components in the core
  • state management library (Vuex) in the core, light alternatives for small applications (event bus, store object)
  • Chrome devtools for Vue components with time travel debugging for Vuex
  • nice system of error and warning messages
  • quickly growing ecosystem and adoption in JS community (React still has 10 times bigger though)
  • being able to use it in non-meteor projects too

Advantages that are not integrated with Meteor yet

  • better integration with Vuex
  • full Typescript support
  • Vue solution for native mobile apps (Weex)
  • server side rendering

Disadvantages related to Vue+Meteor

  • for now, very small community for Vue+Meteor combo
  • lack of Vue form/validation packages that support Simple Schema or Astronomy
  • lack of authentication package for Vue+Meteor (you can either write it yourself or include your Blaze one - Accounts UI works totally fine with Vue. Also all Meteor Accounts methods are working fine)

Disadvantages not related to Meteor

  • lack of support by a top company like React and Angular have (this is mostly important for big companies). There are companies among internet top 10 that use Vue for their products though and one of them is even responsible for Weex
  • because of huge hype for Vue in Asia, a significant amount of 3rd party libraries have documentation and Github issues in languages other than English. It’s slowly changing though and more of them gets English documentation too.

Vue seems popular but React is by far the more popular and probably has more momentum with facebook behind it and companies like microsoft’s fabric and react-native support for windows apps.

I would go for Vue if you (a) just want to do it for fun and learning or (2) you or your dev team are much more familiar with vue than they are with react.

Otherwise, from a business standpoint, you can’t really justify using Vue. You’ll get more free stuff (via community) and have an easier time finding developers to hire if you go with React. And at the end of the day, we’ve seen community supported technologies come and go… but company supported projects like Angular are still here because of ongoing funding. Not saying Vue will drop off, just there is a higher probability it could compared to react.

The other thing to keep in mind is that something new will be here in 2 years and blog titles everywhere will be guilt tripping you into tearing out the react/vue code you’re writing now… so maybe the answer is to just keep blaze and not get guilted by the hype beasts.

1 Like

Thanks for your answers guys!
You both bring forward very reasonable points.
I decided to have a try with React at this point by cloning the MeteorChef Base and building on top of that --> merging my backend code step by step and rebuilding my UI in React.

Still as I said … some things of react kind of drive me crazy and I feel like the whole “JSX - HTML + JS” mishmash will be especially weird to me. I hope I will get used to it but I am still not sold on it.

Any other tips from some “Blaze to React” switchers out there?
Any other valid points to maybe give Vue a try?

btw: as @gusto already stated: I left out Angular on purpose as I somehow really dislike this framework + the breaking changes they introduced with Angular2 + the current “weird state” the v2 is currently in make me not liking it even more! :smiley:

I am one of those guys who still stick to Blaze, because of its simplicity. But even I am now considering a switch to React. The main reason is that every time I want to do something new or special (like SSR), I have to learn that nearly all Blaze packages (or even Meteor packages) related to that cool stuff have been abandoned in the meantime. I started a first customer project with React (and without Meteor) and have to say that I really like the combination of React, Redux and Webpack. It’s modularity is quite nice. However, I would not say React is really a “clean” and consistent thing, nor is it easy to comprehend. Regarding consistency, the concept of Context seems to be quite contradictory to what React praises, and Redux relies heavily on that “magic”. Regarding comprehension, all those higher order components allow you to do quite fancy stuff, but it is very hard to understand how everything fits together, especially if you are trying to understand code you haven’t developed yourself. But despite of this, Angular (and especially Angular 2) is even worse than that. So I would still go for React. Vue might be cool, but with my experience with Meteor, I wouldn’t bet on a niche technology anymore until it really gets adopted by a larger audience.