What is Vue.js? A Beginner's Guide to the Progressive JavaScript Framework

A beginner-friendly introduction to Vue.js in 2026. Learn what makes Vue progressive, how its template system works, and why thousands of teams pick Vue over other frameworks for their front-end.

Vue.jsbeginner
12 min read

If React feels like JavaScript with a UI library bolted on, Vue feels like HTML and CSS that quietly grew superpowers. Created by Evan You in 2014 — an ex-Google engineer who liked Angular's templates but wanted something lighter — Vue has grown into the second most-used front-end framework in the world, with adoption inside Nintendo, GitLab, Alibaba, Adobe, and thousands of European agencies and startups in 2026.

This guide explains what Vue actually is, what "progressive" means in practice, how its single-file components work, and how to write your first one. By the end you will have a real mental model and the confidence to scaffold a Vue project on your own.

What Vue Actually Is

Vue is an open-source JavaScript framework for building user interfaces. The current major version everyone uses in 2026 is Vue 3 (the 3.x line, currently 3.5+, with Vapor Mode landing as the new compile-to-vanilla-DOM strategy). Vue 2 reached end-of-life in late 2023; nothing new should target it.

Where React gives you a tiny core and asks you to assemble the rest of the puzzle yourself, Vue ships with first-party answers for the things every app needs: a router (Vue Router), a state library (Pinia), a build tool (Vite, created by the same author), a testing setup, and a meta-framework (Nuxt) for full-stack apps. The pieces are designed together, which is why Vue projects feel coherent even after a year of growth.

What "Progressive" Actually Means

Vue's tagline since day one has been "the progressive JavaScript framework." It is not marketing fluff — it describes how you adopt it.

You can drop Vue into a single page on an existing PHP or Rails site by including a <script> tag and using it for one widget. You can build a small SPA with Vue + Vue Router. You can build a full-stack app with Nuxt. You can ship a desktop app with Tauri or a mobile app with Quasar. Same framework, scaling smoothly with your needs. Most React tutorials assume you build the world from scratch; Vue is designed for you to start small and grow.

Single-File Components: The Vue Idea

The signature feature of Vue is the single-file component (SFC) — a .vue file that holds template, script, and style for one component, scoped together.

vuevue
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>
 
<template>
  <button @click="count++">Clicked {{ count }} times</button>
</template>
 
<style scoped>
button { padding: .5rem 1rem; border-radius: .5rem; }
</style>

Three things to notice. The template is real HTML — no JSX, no render functions — with a small set of directives (@click, :value, v-if, v-for). The script uses <script setup>, the modern Composition API style that lets you declare reactive state with ref(). The style is scoped — its rules apply only to this component, no class-name collisions ever. You can go deeper into reactivity in the Vue Composition API article.

Reactivity, the Vue Way

When you wrap a value in ref() (or an object in reactive()), Vue tracks every place it is read and re-runs only the parts of the DOM that depend on it when the value changes. You write what the UI should look like for the current state and Vue handles the diffing.

The big difference from React: you never call a setter. count.value++ (in script) or count++ (in template, where .value is unwrapped) is enough — Vue notices and updates. There is no rule about not mutating; the reactivity system is built around mutation.

In templates, the directives cover almost everything you will need on day one:

  • {{ expression }} — interpolation.
  • :attr="value" — bind an attribute (v-bind shorthand).
  • @event="handler" — listen to an event (v-on shorthand).
  • v-if / v-else-if / v-else — conditional rendering.
  • v-for="item in items" :key="item.id" — list rendering.
  • v-model="state" — two-way binding for form inputs.

That last one is uniquely Vue. v-model="email" on an <input> keeps the input and your state in sync both ways with zero boilerplate.

How to Start a Vue Project in 2026

You need Node.js 22 LTS or newer. Then:

bashbash
npm create vue@latest my-app
cd my-app
npm install
npm run dev

The CLI asks about TypeScript, Vue Router, Pinia, ESLint, and Vitest. Say yes to TypeScript, Router, Pinia, and ESLint for any real project — that is the 2026 default stack. The dev server runs on Vite and gives you instant hot reload at http://localhost:5173.

For full-stack apps with server rendering, file-based routing, and a built-in API layer, scaffold with Nuxt instead: npx nuxi@latest init my-app. Nuxt is to Vue what Next.js is to React.

Vue vs React in One Honest Paragraph

React is the bigger ecosystem, the safer hire, and the default choice in the US. Vue is more opinionated, has a gentler learning curve, ships first-party answers for routing and state, and dominates in Asia and Europe. Pick React if you want maximum job-market reach. Pick Vue if you want the fastest time from "I want to build something" to "I built something." Both are excellent and neither is going away in 2026.

Common Mistakes Beginners Make

  • Forgetting .value when using ref() in script. count is the ref object; count.value is the value.
  • Mutating props directly. Props are read-only; emit an event back to the parent instead.
  • Skipping :key on v-for. Vue can render without it, but it warns and will misbehave on reorders.
  • Following Vue 2 tutorials. Anything teaching Vue.extend, data() returning everything, or the Options API as the default is older. Composition API + <script setup> is the modern way.
  • Reaching for Vuex. It is replaced by Pinia — simpler, fully typed, and the official recommendation in 2026.

Quick Reference

  • Create: npm create vue@latest
  • Run dev: npm run dev (Vite, hot reload)
  • SFC structure: <script setup> + <template> + <style scoped>
  • Reactive value: const x = ref(0)x.value in script, {{ x }} in template
  • Conditional: v-if, list: v-for with :key, two-way: v-model
  • Events: @click="...". Attrs: :href="...". Interpolation: {{ ... }}
  • State: Pinia. Router: Vue Router. Full-stack: Nuxt
  • Devtools: install Vue Devtools browser extension
Rune AI

Rune AI

Key Insights

  • Vue is a progressive JavaScript framework with first-party router, state, and meta-framework.
  • Use Vue 3 with the Composition API and <script setup> in 2026; Vue 2 is end-of-life.
  • Single-file components co-locate template, script, and scoped styles in one .vue file.
  • Reactivity is automatic via ref() and reactive() — no setters, no immutability rules.
  • Pair Vue with Pinia (state) and Vue Router; use Nuxt for full-stack apps.
RunePowered by Rune AI

Frequently Asked Questions

Vue 2 or Vue 3 in 2026?

Vue 3, no question. Vue 2 has been end-of-life since December 2023 and gets no security patches.

Composition API or Options API?

Composition API with `<script setup>` is the modern recommended style. Options API still works and is fine for very simple components, but every new tutorial and library assumes Composition.

Is Vue easier than React?

Most beginners say yes. Templates feel like HTML, reactivity is automatic, and the official packages cover the things React leaves to you. The ceiling is similar.

What is Nuxt?

Vue's official meta-framework — file-based routing, server-side rendering, data fetching, image optimisation, deployment. Same role Next.js plays for React.

Should I learn TypeScript with Vue?

Yes for any real project. Vue 3 was rewritten in TypeScript and the developer experience with `<script setup lang="ts">` is excellent.

Conclusion

Vue is HTML, CSS, and JavaScript composed into single-file components with reactivity built in. It is "progressive" because you can adopt it for one widget on a legacy page or scale all the way up to a Nuxt-powered SaaS. Scaffold a project with npm create vue@latest, build a counter, then a TODO list, then something you actually want — by the third project the model will be second nature.