For those of you I haven’t met, I’m Geoff Schmidt, one of the original Meteor core developers and CEO of MDG. With Galaxy in the field now and doing great, I’ve been able to clear out a big chunk of my schedule and you can expect to see me much more active on the forums.
As we start to approach the end of the year, MDG is taking a look at the Meteor stack from top to bottom and thinking about what’s next. We’re thinking about testing, routing, schemas, and more, and what should be a core package and what shouldn’t. I’m also super excited about the many new technologies in the JS ecosystem, from GraphQL to Webpack to ES7/ES2016, and how we can bring them to Meteor.
To start with, I want to talk about Blaze. Meteor 1.2 brought official Angular and React support in core. We think that React and Angular are great. We’d like to cooperate, rather than compete, with these projects, and get the full benefit of the thriving ecosystems around them. We originally built Blaze because the alternative was shipping Meteor against Backbone. That’s a very different situation from today.
There’s been talk for some time about Blaze 2 and components. When we took a look at what it would look like, it looked a lot like React. We think that React has the right component model and good APIs. And while there are differences in the DOM update algorithms used (React’s virtual DOM diffing versus Blaze’s fine grained reactivity), both approaches work.
What’s missing from React (as a Blaze upgrade) is templates and the tight integration with Tracker. We think the combination of the two is basically the core of what people like about Blaze (correct me if I’m wrong!) You can’t really get a comparable experience with Angular 1.0, React, or anything else I know of that’s a viable choice in production today. What would be great is if you could get the best of both worlds: Blaze-style reactive templating, combined with the component model of React and full compatibility with the React ecosystem.
So what we’re planning to do is to build templating on top of React, and to encourage Blaze users to upgrade to it (or, for those that prefer it, to plain React JSX). We think that this is the best possible “Blaze 2". If you choose to upgrade you’ll have to port your templates, but that’d probably be the case no matter what direction we go with Blaze 2. And your porting effort will be richly rewarded with access to React’s in-browser debugger tools, vibrant component ecosystem, and more. Today’s Blaze will continue to work but MDG’s development efforts will be focused on the new React-based templating option, React JSX, and on Angular.
As excited as we are about React, we’re just as excited about Angular. Our intention is to support both of them equally as first class citizens, and deliver the best possible full-stack experience for each of them. Though this particular post has mostly been about React we are just as committed to Angular. We will be continuing to invest in Angular as well, especially with the advent of Angular 2.0.
We think that this is the path that makes the most sense for Meteor: working as closely as possible with the Angular and React teams to deliver an amazing full-stack JS app platform, rather than trying the duplicate the work of those communities. There’s an incredible opportunity in front of the whole JS community right now, to make app development faster and easier than it’s ever been before. We should all partner up and work together to make that happen.
So there you have it – our thinking at MDG on the future of Blaze. It’s an emotional moment for me. I wrote the first version of LiveRange, Blaze’s underlying DOM annotation technology, sitting in a tiny office years ago with a couple of friends. It’s still one of the technical contributions that I’m proudest of – even though it doesn’t hold a candle to the work that David Greenspan, Avital Oliver, and others subsequently did on Blaze. But I think that this is the right plan, and I feel good about the benefits that it will bring to Meteor.
Before we finalize this decision I want to hear what you think. And we also need your feedback on how best to do it – what does great reactive templating for React look like? what are the parts of the Blaze 1 experience that we need to keep, and what do we need to change? We’re starting work on it this week, so let me know what you think!