A framework born from hands-on experience
Vue.js was released in February 2014 by Evan You, an engineer who worked at Google on projects built with AngularJS. Direct experience with AngularJS’s limitations — complex configuration, steep learning curve, difficulty of partial adoption in existing projects — led You to design a framework with a different philosophy: to be progressive, adoptable one piece at a time.
Vue takes the two-way data binding and HTML templates from AngularJS but drops the rigid structure. It takes the idea of components as composable UI units from React but keeps HTML templates as the default option rather than requiring JSX. The result is a framework that sits between the two in terms of complexity, accessible to beginners yet powerful enough for complex applications.
Reactivity and rendering system
At the heart of Vue is its reactivity system. When a Vue instance is created with a data object, the framework traverses every property and converts it into getter and setter pairs via Object.defineProperty. When a component accesses a property during rendering, the getter registers that property as a dependency. When the property is modified, the setter notifies all components that depend on it, triggering a targeted re-render.
This system is transparent to the developer: one works with plain JavaScript objects and Vue handles dependency tracking and efficient DOM updates. Rendering uses a Virtual DOM — an in-memory representation of the document structure — that minimises operations on the real DOM by comparing the previous state with the new one.
Single-file components
Vue introduces single-file components (SFC): files with the .vue extension that enclose the HTML template, JavaScript logic and CSS styles in a single file. Each section is delimited by dedicated tags — <template>, <script>, <style> — and styles can be declared as scoped, applying only to the component that defines them.
This organisation solves a practical problem: in a complex application, keeping template, logic and styles in the same file reduces context switching and makes the component a self-contained, reusable unit.
Incremental adoption
The characteristic that sets Vue apart is the ability to adopt it incrementally. One can start by adding a single <script> tag to an existing page to make a portion of the interface reactive, with no build tools or configuration required. As the project grows, components, routing with vue-router and state management are added. There is no need to rewrite the existing application: Vue integrates with what is already there.
Link: vuejs.org
