npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

technology-detector

v1.0.4

Published

Powerful **website technology detector** for Node.js. Accurately identify **web stack** technologies, including **CMS**, **e-commerce platforms**, **analytics providers**, **CDNs**, **advertising tech**, and **JavaScript frameworks**. Utilizes HTML, HTTP

Readme

technology-detector

SEO-friendly, lightweight website technology detector for Node.js. Ship your own stack insights without heavy headless browsers. Bundles the Wappalyzer dataset and detects CMS, ecommerce, analytics, CDN, adtech, and web frameworks from HTML, headers, cookies, script/link URLs, meta tags, simple DOM selectors, and linked JS/CSS assets.

Install

npm i technology-detector

Usage

const { analyzeUrl } = require('technology-detector')

async function run() {
  const result = await analyzeUrl('https://example.com')
  console.log(result.detected)
}

run()

What you get back

The promise resolves to:

{
  "url": "https://example.com/",
  "detected": [
    {
      "name": "Next.js",
      "description": "React framework",
      "categories": ["JavaScript frameworks", "Web frameworks"],
      "categoryIds": [12, 18],
      "matchedBy": ["headers", "scriptSrc"],
      "matchedByCount": 2
    }
  ],
  "categorySummary": [
    { "name": "Web frameworks", "count": 1 },
    { "name": "JavaScript frameworks", "count": 1 }
  ],
  "assets": [
    { "url": "https://example.com/_next/static/chunk.js", "bytes": 42000 }
  ],
  "stats": {
    "signalsChecked": 2,
    "datasetSize": 600,
    "assetsFetched": 2,
    "assetBytes": 84000
  }
}

Detection coverage

  • HTML and visible text regexes (framework signatures, CMS markers, meta generator tags).
  • Script and stylesheet URLs (framework/runtime chunks, CDN tags, analytics URLs).
  • HTTP headers and cookies (server banners, session cookies, A/B testing IDs).
  • Simple DOM selectors and meta tags (Open Graph, generator, theme color).
  • Lightweight fetch of up to 10 linked JS/CSS assets (600KB each).
  • Output is trimmed: top 50 matches, matchedBy truncated, and categories elevated to major groups when available.

Front-end usage (Next.js/React/Vite)

  • Use the browser build to avoid Node-only modules: import { analyzeContent } from 'technology-detector/browser'.
  • Provide HTML and optional headers/cookies/assets yourself (browser cannot fetch cross-origin HTML without a proxy).
  • Basic example (client component or Vite React):
import { analyzeContent } from 'technology-detector/browser'

async function detect(url: string) {
  // Fetch HTML from a same-origin proxy or your API to avoid CORS
  const html = await fetch(`/api/fetch-html?url=${encodeURIComponent(url)}`).then((r) => r.text())
  const result = await analyzeContent({ html, url })
  return result.detected
}
  • Next.js App Router server route (keeps network and CORS on the server):
// app/api/tech-detector/route.ts
import { NextResponse } from 'next/server'
import { analyzeUrl } from 'technology-detector'

export async function POST(req: Request) {
  const { url } = await req.json()
  if (!url) return NextResponse.json({ error: 'Missing url' }, { status: 400 })

  try {
    const result = await analyzeUrl(url)
    return NextResponse.json(result)
  } catch (error: any) {
    return NextResponse.json({ error: error.message || 'Failed to analyze' }, { status: 500 })
  }
}
  • Client-side call example:
async function check(url: string) {
  const res = await fetch('/api/tech-detector', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ url })
  })

  if (!res.ok) throw new Error('Request failed')
  return res.json()
}

Use the returned detected list to render technologies in your React component.

What it finds

  • CMS, ecommerce platforms, marketing/analytics tags, adtech, CDNs, web servers, frameworks, JS libraries, and hosting hints.
  • Signals from HTML, visible text, meta tags, headers, cookies, script/link URLs, and lightweight JS/CSS asset fetches (first 10 assets, 600KB each).

API

analyzeUrl(url: string) => Promise<{ url, detected, assets, stats }>

Returns:

  • detected: { name, description, categories, website, icon, matchedBy }[]
  • assets: { url, bytes }[]
  • stats: signals checked, dataset size, assets fetched/bytes

Limits

  • HTML capped at 2MB, assets at 600KB each, max 10 assets.
  • No headless rendering; only server-side HTTP fetch + static parsing.
  • Only HTTP/HTTPS URLs accepted.

License

MIT