Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Wappalyzer Laravel Package

madeitbelgium/wappalyzer

madeitbelgium/wappalyzer is a Laravel/PHP wrapper for Wappalyzer that detects the technologies behind any website, including CMSs, frameworks, analytics, servers, and more. Use its simple API to identify tech stacks for audits, lead research, or competitive analysis.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. madeitbelgium/wappalyzer is a server-side PHP implementation of the Wappalyzer fingerprinting concept: it fetches a target URL, parses the HTTP response, and matches headers, HTML, cookies, and other static signals against a bundled technology-detection ruleset. It is a point-in-time detection engine, not a platform. It fits naturally as an internal component inside a Laravel/PHP backend that already has an outbound HTTP client and a queue worker: lead/account enrichment, competitive intelligence, tech-stack tagging for sales or security scoring, or website audits. It is a poor fit as a customer-facing real-time API (network-bound latency) or as anything requiring JavaScript-rendered detection.

Integration feasibility. Mechanically trivial — Composer install, one call per URL. The blockers are not technical:

  • License (GPL-3.0) — copyleft. Distribution of a product that links this package would force GPL obligations on it. If the consuming product is a hosted SaaS not distributed to customers, GPL obligations are generally not triggered for mere use, but this must be confirmed by counsel and is a hard blocker for anything shipped as an on-prem binary, SDK, or embedded appliance.
  • Server-side only — no headless browser, so anything only visible after JS execution (SPA frameworks, client-side analytics, tag managers, dynamically injected libraries) is a false negative. Modern detection coverage is therefore materially weaker than the browser-based Wappalyzer or commercial alternatives.
  • Ruleset provenance — detection quality is entirely a function of which Wappalyzer fingerprint corpus is bundled, its version, and whether it can be updated independently of the package.

Technical risk. High on license, medium on data quality, medium on abandonment.

  • License: GPL-3.0 is the dominant risk and should be treated as a go/no-go gate before engineering time is spent.
  • Maintenance: 16 stars, single vendor, one release (2024-04). Low bus factor; assume you will own the code and ruleset.
  • Staleness: the bundled ruleset will drift from the current web. New technologies and rebranded signatures degrade recall over time with no automatic update path.
  • Security: invoking this on user-supplied URLs creates an SSRF surface — internal IPs, cloud metadata endpoints (169.254.169.254), DNS rebinding, redirect chains, unbounded response bodies. Must be wrapped, never called raw.
  • Accuracy: fingerprinting is probabilistic. False positives propagate into downstream scoring, CRM fields, or routing logic unless confidence thresholds and review exist.

Key questions.

  1. Does the package bundle the Wappalyzer ruleset, and what is its version/date? Can we point it at our own JSON corpus?
  2. Is it framework-agnostic PSR-18/Guzzle, or hard-coupled to Laravel facades/config?
  3. What SSRF, redirect, timeout, and response-size protections exist out of the box (likely none)?
  4. Are per-detection confidence scores exposed, or only booleans?
  5. Does it expose categories (CMS, analytics, ecommerce) or only raw technology names?
  6. What is the stated PHP/Laravel version support matrix in composer.json?
  7. Is there any path to JS rendering (headless integration) or is it strictly static response parsing?

Integration Approach

Stack fit. Laravel 9–11 / PHP 8.1+, Composer, existing queue and HTTP stack. The package imposes no schema — you own storage, which is good: persist {url, domain, technologies[], ruleset_version, confidence, detected_at, fetch_status} so results are reproducible and re-scorable when the ruleset changes.

Migration / isolation path. The recommended pattern is a boundary: run the package in a dedicated internal detection service (a small containerized PHP worker or a Laravel sidecar app) and call it over HTTP or a queue from the main application. This:

  • keeps GPL code out of the core proprietary codebase graph,
  • creates a single choke point for SSRF controls, rate limits, and caching,
  • makes a later swap to a commercial API or an in-house ruleset a configuration change rather than a refactor.

Alternative paths ranked: (1) isolate the GPL package in a service; (2) replace the bundled ruleset with a self-maintained or commercially licensed fingerprint corpus and keep only the parsing engine; (3) buy — Wappalyzer's commercial API or BuiltWith — if accuracy and coverage matter more than cost. Given the low opportunity signal (0.38) and the GPL constraint, the buy/isolate options are the realistic ones.

Compatibility. Verify composer.json constraints against the target Laravel version, and verify the ruleset's vintage — a 2024-04 release against a fingerprint corpus that upstream restricted in 2023 suggests lag.

Sequencing.

  1. Legal review (blocking gate). Confirm SaaS-use position and distribution risk.
  2. Benchmark POC. Run against ~100 known sites with documented stacks; measure precision/recall versus a commercial baseline. Decide with data, not with the README.
  3. Build-vs-buy decision based on POC accuracy and legal outcome.
  4. Wrap in detection worker: SSRF allow/deny, DNS resolution checks, 5–10s timeout, 2MB response cap, max 3 redirects, per-domain rate limiting.
  5. Caching layer: per-domain TTL of 7–30 days; dedupe identical URLs within a batch.
  6. Persistence + ruleset versioning so historical results are re-scorable.
  7. Feature-flagged rollout, then backfill in batches through the queue.

Operational Impact

Maintenance. Low and declining upstream activity means you inherit ownership. Expect to fork the parsing core or, at minimum, pin and periodically merge the ruleset. Budget a recurring quarterly ruleset refresh and a health metric to catch accuracy regressions before users do. Single-maintainer dependency is a real abandonment scenario — maintain a fork plan from day one.

Support. No commercial support channel; GitHub issues only. Assign an internal owner. Treat the package as vendored code with a maintenance SLA you define.

Scaling. Cost is network-bound, not CPU-bound: throughput is a function of queue worker concurrency and outbound egress, not compute. A modest worker pool handles thousands of scans per hour with caching. Without caching, the same domain will be re-fetched repeatedly — cache is the primary scaling lever. Add per-target concurrency limits so you don't get rate-limited or blocked by the sites you scan.

Failure modes to design for.

  • Target blocks automated clients, returns 403/429, or serves a JS-shell with no stack markers → silent false negatives.
  • Redirect chains to unexpected hosts and DNS rebinding → SSRF and scope creep.
  • Oversized or slow responses → worker exhaustion; needs hard caps.
  • GPL contamination if the service is ever distributed or bundled.
  • Ruleset drift → gradually degrading detection with no alarm.
  • False positives flowing into scoring, routing, or CRM fields without a confidence gate.
  • Legal exposure if the license position was assessed informally rather than by counsel.

Ramp-up. The happy-path integration is roughly a day. The production-grade deliverable — SSRF hardening, timeout/redirect/size controls, caching, confidence thresholds, persistence with ruleset versioning, and a benchmarked accuracy baseline — is realistically 2–4 weeks of engineering including legal review and a validation pass, plus an ongoing low-single-digit percentage of one engineer's time for ruleset upkeep. The accuracy benchmark is the decisive input: if server-side-only detection does not clear your precision/recall bar against a commercial baseline, the correct outcome is to buy rather than build.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource