Vue 2 landed a few weeks ago with a full virtual DOM rewrite under the hood, and we used it to rebuild a small internal admin dashboard that was previously a tangle of jQuery and template strings.
The headline change is performance — Vue's own benchmarks claim it is now competitive with React on rendering large lists, and in our dashboard, which renders a few hundred rows of order data, the difference from our old jQuery version was immediately visible. Scrolling and filtering feel instant, and re-rendering the table after a filter change no longer produces the brief flash of stale content we used to see when we were manually diffing and patching the DOM ourselves.
What surprised us more was how little of our mental model had to change coming from Vue 1. Components, `v-if`, `v-for`, computed properties — all still there, still simple. Single-file `.vue` components paired with `vue-loader` and webpack made organizing the dashboard's dozen or so components painless, and colocating a component's template, script, and styles in one file turned out to matter more for day-to-day productivity than we expected going in.
A few smaller things stood out during the rebuild. The new render function API, which sits underneath the template compiler, gives us an escape hatch for the one component that genuinely needed dynamic, programmatically-generated markup rather than a static template — something that would have meant awkward string concatenation in our old jQuery version. Vue's reactivity system also handled a tricky case we worried about going in: nested object mutations inside an array of order objects, which update the table correctly without any manual "re-render this row" logic on our part.
Build size was another pleasant surprise. The whole dashboard, Vue runtime included, came in noticeably lighter than the equivalent React setup we sized up for comparison, which matters less for an internal tool on a fast office connection but is a genuinely useful data point for the client-facing work we expect to eventually bring Vue into.
We are not moving every project to Vue yet; most client-facing work is still React or plain jQuery depending on the client's existing stack, and we are not going to force a framework change on a project that is working fine as it is. But for internal tools where we control the whole stack, Vue 2 is now our default pick, and this dashboard rebuild is the reason why.