Every modern framework ships a scaffolder that gets you to a running dev server in about a minute. The commands below are the current ones; the paragraph after each is the part nobody tells you.
# Vite - React, Vue, Svelte, Solid, Preact, Lit, Qwik
npm create vite@latest my-app
cd my-app && npm install && npm run dev
# Next.js (React, server components, file routing)
npx create-next-app@latest my-app
# SvelteKit
npx sv create my-app
# Nuxt (Vue)
npm create nuxt my-app
# Astro (content sites, islands)
npm create astro@latest my-app
# Remix / React Router framework mode
npx create-react-router@latest my-app
All of them assume Node 20 or newer. If npm create hangs, it is usually a stale npx cache — npm cache clean --force or add @latest explicitly, which is why every command above has it.
Vite is a dev server and build tool, not a framework. It serves your source as native ES modules in development so there is no bundle step, which is why the dev server starts in well under a second regardless of project size, and it builds with Rollup for production. Picking a framework template inside Vite gives you a single-page app with client-side routing and no server. That is the right starting point for a dashboard behind a login; it is the wrong one for anything that needs SEO.
Next, Nuxt, SvelteKit and Remix all add the same three things: server rendering, file-based routing, and a data-loading convention. You take on a Node server (or an edge runtime) in exchange. If your page content must be in the initial HTML for search engines or social previews, you want one of these or a static generator. If it must not — because everything is behind auth — the extra machinery buys you little.
Astro ships zero JavaScript by default and renders components to static HTML at build time. You opt into interactivity per component with client:load, client:idle or client:visible. For a blog, docs site or marketing site, this produces dramatically smaller payloads than an SPA, and you can still use React or Svelte components where you genuinely need them.
Content site with occasional interactivity: Astro. React app that needs SSR and a hiring pool: Next.js. You want the smallest runtime and the least ceremony: SvelteKit. Vue team: Nuxt. Internal tool behind a login: plain Vite plus React Router or TanStack Router — the simplest thing that works, and the easiest to deploy as static files.
Before you write a feature, do four things while the project is still empty: turn on TypeScript strict mode (retrofitting it later is genuinely painful), add Prettier and an ESLint config so formatting never enters a code review, add a .nvmrc or the engines field so everyone is on the same Node, and commit. A scaffolded project is the cleanest your repo will ever be and the cheapest moment to set standards.
Do not add a state management library, a component library, a testing framework and an i18n layer on day one. Every scaffolder offers them and most projects need none of them for the first month. Add each when a concrete problem forces the decision — the framework choice is hard to reverse, but those are not.