Another year is almost over and, of course, a year is a long time for the web. As 2016 draws to a close, the retrospective articles start to appear, looking back on the most important changes of the last 12 months (keep your eyes peeled for ours next week). One thing that I doubt anyone is unaware of (unless you’ve been hiding in a WiFi black-spot) is the steadily increasing buzz surrounding Vue.js. The framework ranks highly in terms of developer interest, and it’s difficult to find a React or Angular thread on discussion sites such as Reddit without someone recommending Vue as an alternative.
Earlier in the year, I read an article suggesting that Vue is the new jQuery. On the face of it, that might not seem like a very good comparison; jQuery is a Swiss army knife-like collection of utilities for DOM manipulation and making Ajax requests, while Vue.js is a view library for creating composable UI components. The comparison rests more on the view that both libraries provide a low barrier to getting started building things.
Libraries such as React have popularized a declarative approach to building interfaces, composing views from reusable web components. While many of the major frameworks have adopted this paradigm, the learning curve is often quite steep, especially so for the beginner. Vue.js, on the other hand, provides a gentler entry point into modern application development. Whereas jQuery streamlined and simplified working with the DOM, Vue does the same for web components – getting started is a simple as linking to the library from a CDN and writing HTML-based templates. You’re not required to use module bundling, transpilation, or one-way data flow to begin with, although all those things are supported, so you can start simple and adopt these concepts as you become familiar with them.
When you’re ready to take it up a notch, Vue.js has a strong eco-system of officially supported plugins and libraries. There is a CLI project, to help kick-off new projects with either Browserify or Webpack-based build tools, along with a custom module format (.vue) and loader, to make it painless to create well-organized Vue applications. Vue-devtools is a Chrome extension that adds the capability to inspect your application’s components and their state from within the existing developer tools. Vue-router provides an idiomatic routing solution to help build single-page apps, while Vuex is a Vue’s take on the Flux/Redux state management pattern, which should help with building larger, more complex applications.
One potential area of concern when deciding whether to use Vue.js for your projects is that it’s essentially a one-man show. Unlike React or Angular, which are backed by Facebook and Google respectively, Vue.js is controlled and run by a single person, Evan You. Admittedly, Evan does now work on Vue.js full-time, thanks to the support of the community, but for some, not being backed by a larger organization can be a deal-breaker.
This hasn’t prevented the framework’s adoption by some well-known companies and organizations, though. Vue.js is now being used by some of the biggest Chinese public companies, such as Alibaba and Baidu, along with other household international brands like Nintendo and Sainsbury’s. This year also saw the popular PHP framework Laravel bundle Vue.js as their preferred client-side solution.
2016 has seen an important milestone for the project: the 2.0 release. Probably the most significant change is the incorporation of a virtual DOM, allowing for faster, more efficient rendering, and bringing it into line with other popular view libraries such as React. All things considered, Vue.js is likely to be sticking around, so I’d encourage you to take it for a spin. We had a great article recently by guest author Jack Franklin, where he takes a first look at the most recent release through the eyes of a developer who’s new to the framework. Why not have a read over Christmas and let us know what you think? Should we publish Vue content more often, or do you think it’ll turn out to be short-lived? Let me know what you think in the comments!