How to Detect What JavaScript Framework a Website Uses

March 25, 2026 · 9 min read

Whether you're evaluating a competitor's tech choices, planning a migration, assessing security exposure, or researching hiring needs, knowing which JavaScript framework powers a website is valuable information. React, Vue, Angular, Next.js, Nuxt, and Svelte each leave distinct fingerprints in the DOM, in JavaScript globals, and in HTTP responses—if you know where to look.

This guide covers three approaches: manual detection with browser DevTools, browser extensions like Wappalyzer, and programmatic detection with the DetectZeStack API. Each has trade-offs in accuracy, scalability, and what they can actually see.

Why Framework Detection Matters

Identifying the JavaScript framework behind a website isn't just trivia. There are concrete reasons teams care about this:

How JavaScript Frameworks Leave Fingerprints

Every major framework leaves identifiable traces in the rendered page. Some are intentional (development aids), others are side effects of how the framework renders HTML. Here are the signatures for the most popular frameworks:

React

Vue.js

Angular

Next.js

Nuxt

Svelte

Manual Detection with Browser DevTools

You can identify most frameworks in under 30 seconds using Chrome DevTools. Here are three techniques:

1. Check the DOM (Elements tab)

Open DevTools (F12), go to the Elements tab, and inspect the root <div> or <body> element. Look for:

2. Check window globals (Console tab)

Open the Console tab and type these one at a time:

// React
!!document.querySelector('[data-reactroot]') || !!document.querySelector('#__next')

// Vue
!!window.__VUE__ || !!document.querySelector('[data-v-]')

// Angular
!!document.querySelector('[ng-version]')

// Next.js
!!window.__NEXT_DATA__

// Nuxt
!!window.__NUXT__

Each returns true or false. The ng-version attribute is especially useful because it gives you the exact Angular version: document.querySelector('[ng-version]')?.getAttribute('ng-version').

3. Check the Network tab

Reload the page with the Network tab open and filter by JS files. Look for telltale paths:

Also check response headers: an X-Nextjs-Cache header confirms Next.js, while X-Powered-By: Nuxt confirms Nuxt (though many sites strip the X-Powered-By header for security).

Using Browser Extensions

Extensions like Wappalyzer, WhatRuns, and the BuiltWith browser addon automate the DOM and header checks described above. They run JavaScript on each page you visit and match patterns against a database of technology signatures. For a full comparison of these tools (including free options), see our free BuiltWith alternatives guide.

What they do well

What they miss

Programmatic Detection with the DetectZeStack API

For anything beyond one-off manual checks—competitive research across dozens of sites, security audits, or building detection into your own tools—you need an API. If you're building AI-powered workflows, you can also integrate tech detection into AI agents via MCP. DetectZeStack's /analyze endpoint fetches the target URL, inspects the HTML, HTTP headers, JavaScript, DNS records, and TLS certificates, then returns structured JSON.

curl -s "https://detectzestack.p.rapidapi.com/analyze?url=vercel.com" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: detectzestack.p.rapidapi.com" | jq '.technologies[] | {name, categories, version}'

A response for a Next.js site typically includes:

{
  "name": "Next.js",
  "categories": ["Static site generator", "JavaScript frameworks"],
  "version": null
}
{
  "name": "React",
  "categories": ["JavaScript frameworks"],
  "version": null
}
{
  "name": "Vercel",
  "categories": ["PaaS"],
  "version": null
}
{
  "name": "Node.js",
  "categories": ["Programming languages"],
  "version": null
}

Notice that the API detects the full stack: Next.js (the meta-framework), React (the underlying library), Vercel (the hosting platform via DNS), and Node.js (the runtime). A browser extension would catch Next.js and React but miss Vercel and Node.js.

For scanning multiple sites at once, the batch endpoint accepts up to 10 URLs in a single request, making competitive analysis straightforward.

SSR Frameworks Are Harder to Detect

Server-side rendering (SSR) complicates detection because the server may deliver fully rendered HTML without exposing client-side framework globals. Here's how SSR affects detection for each framework:

Next.js

Next.js is usually detectable even with SSR because it embeds a <script id="__NEXT_DATA__"> tag containing the page props and build ID. ISR (Incremental Static Regeneration) pages also expose the X-Nextjs-Cache response header. However, if a site uses Next.js only for the build step and exports purely static HTML, these signals disappear.

Nuxt

Nuxt SSR pages include the __NUXT__ global with serialized server state. Nuxt 3 also sets a __nuxt root element. Static-generated Nuxt sites (nuxt generate) may retain these markers, but heavily customized deployments can strip them.

Angular Universal

Angular's SSR solution (Angular Universal) still renders the ng-version attribute on the root element, making server-rendered Angular pages as detectable as client-rendered ones. This is one of the most reliable framework fingerprints across any rendering mode.

SvelteKit

SvelteKit SSR pages leave fewer traces than other frameworks because Svelte compiles components to vanilla JavaScript at build time. The resulting HTML may contain svelte- prefixed CSS classes, but there's no runtime global to check. This makes Svelte and SvelteKit the hardest major frameworks to detect programmatically.

When Frameworks Hide

Several factors can make framework detection unreliable, regardless of which method you use:

Tip: When a single detection method fails, combining approaches works better. The DetectZeStack API already does this—it cross-references HTML patterns, HTTP headers, JavaScript globals, DNS records, and TLS certificates to maximize detection accuracy.

Detection Methods Compared

Criteria Manual (DevTools) Browser Extension API (DetectZeStack)
Setup required None Install extension API key (free)
Speed per site 30–60 seconds Instant (page load) 1–3 seconds
Bulk scanning No No Yes (batch endpoint)
Detects React/Vue/Angular Yes Yes Yes
Detects Next.js/Nuxt Yes Yes Yes
Detects Svelte/SvelteKit Sometimes Sometimes Sometimes
CDN/hosting detection No No Yes (DNS + TLS)
Version detection Yes (if exposed) Yes (if exposed) Yes (if exposed)
Automation/CI integration No No Yes (REST API)
Cost Free Free (basic) Free (100 req/mo)

Manual inspection is the most thorough for a single site—you can dig into minified bundles, explore the DOM tree, and check every header. But it doesn't scale. Browser extensions automate the process for casual use. The API is the only option that supports bulk scanning, CI integration, and infrastructure-layer detection via DNS and TLS.

Practical Recommendations

One-off check

Open DevTools, check the DOM root for ng-version, data-reactroot, or __next. Check the Console for __NEXT_DATA__ or __NUXT__. Takes 30 seconds.

Browsing competitors

Install the Wappalyzer extension. It identifies frameworks on every page you visit with zero effort. Good for passive discovery.

Systematic research

Use the DetectZeStack API to scan dozens or hundreds of sites programmatically. The batch endpoint handles up to 10 URLs per request, and you get infrastructure data that extensions miss.

Related Reading

Try DetectZeStack Free

100 requests/month, no credit card required. Detect JavaScript frameworks, infrastructure, and more in a single API call.

Get Your API Key

Get API updates and tech detection tips

Join the mailing list. No spam, unsubscribe anytime.