GuardDog vs KeyDrift
Package-security identifiers via heuristics for npm/PyPI.
OSS identifying malicious packages through identifier heuristics.
This page compares the two honestly: strengths credited specifically, differences traced to structure rather than quality, and a decision rule at the end. Verified August 2026.
What GuardDog does well
Heuristic package screening.,CI-integrable simplicity.,Dual-ecosystem focus.
- Package metadata/source.
- Heuristic analyzers.
- As-invoked.
The gap KeyDrift fills: the deployed bundle
Nothing above describes a defect — it describes a boundary. GuardDog answers questions about source and infrastructure with real competence. The question KeyDrift answers is different and narrower: what credentials can a stranger retrieve from this deployment right now? Because bundlers substitute literals and agents write client-side calls after review, that question sometimes has an answer the repository never saw.
- Fetched-and-diffed scanning of live URLs, including chunks reachable only through route manifests.
- Streamed server data (
self.__next_f.push,window.__NUXT__) read as carefully as chunk files. - Calibrated dispositions: Supabase anon keys, publishable keys and Firebase web keys recognised as public-by-design instead of reported as leaks.
- Drift transitions — created, regressed, resolved — so a reintroduced key alerts as a regression, not as news.
Feature-by-feature
- Surfaces scanned. pip install guarddog. versus KeyDrift: deployed web artifacts fetched live, or pasted bundle source for anything behind a login.
- Detection approach. supply-chain-cautious maintainers. versus KeyDrift: 21 secret detectors across 13 providers with placeholder rejection, alphabet-normalised entropy, payload decoding and a confidence floor below which matches are dropped rather than caveated.
- Change over time. Screens packages entering; verifies artifacts leaving. Healthy pipelines watch both doors. versus KeyDrift: scheduled scans diffed into created/regressed/resolved with alert routing to email, Slack, Discord and webhooks.
- Getting started. undefined versus KeyDrift: paste a URL at /scan — free, no account — or paste source for private surfaces.
Side-by-side
Every cell below states a specific capability. Where GuardDog documents more detail than fits here, follow their docs; where KeyDrift claims something, it is verifiable in a two-minute free scan.
| Capability | GuardDog | KeyDrift |
| --- | --- | --- |
| Primary surfaces | pip install guarddog. | Deployed web artifacts fetched live: HTML, all chunks (incl. route-manifest-only), streamed payloads |
| Build-time substitution (NEXT_PUBLIC_/VITE_) | Not a documented capability | Detected in served output — exactly where it lands |
| Hydration payloads (self.__next_f.push, window.__NUXT__) | Outside source-scan scope | Read as carefully as chunk files |
| Public-vs-secret calibration | Not applicable to scope | Dispositions built-in: anon/publishable/Firebase-web reported informational, sample keys rejected by name |
| Change over time | Screens packages entering; verifies artifacts leaving. Healthy pipelines watch both doors. | Scheduled scans diffed into created/regressed/resolved; regression alerts name comebacks |
| Alert routing | Screens packages entering; verifies artifacts leaving. Healthy pipelines watch both doors. | Email · Slack · Discord · raw webhooks with per-destination severity thresholds |
| Getting started | undefined | Paste any URL at keydrift.dev/scan — free, no account; paste-source mode for behind-login surfaces |
| Privacy of findings | Varies by vendor | Masks + salted fingerprints only; no column anywhere can hold a live secret |
_Cells describing GuardDog summarize their public documentation as of the verified date above._
Where each one wins
- GuardDog wins when undefined
- KeyDrift wins when the question is “what credentials can strangers retrieve from this deployment right now?” — live fetching, calibrated dispositions, and regression alerting without agents installed.
Switching from GuardDog
Teams arriving from GuardDog usually keep their existing setup and add one job: point KeyDrift at production, staging, and preview URLs. First week looks like this — day one, run the free scan on every deployment and triage findings by severity; day two, fix or schedule fixes using the linked guides; day three onward, monitoring watches for regressions while GuardDog continues doing what it does best.
undefined
Decision rule
- Keeping GuardDog for its documented strengths makes sense — it earns them.
- Add KeyDrift when deployment truth matters: post-build artifacts, preview URLs, and reintroduction watch on a schedule.
_Compared against GuardDog documentation and pricing as verified August 2026. Capabilities change; check their site._ Datadog (OSS) and associated marks are trademarks of Datadog (OSS), referenced for identification and descriptive comparison.
Bottom line: the tools are complements wearing rivals' clothes. GuardDog watches inputs; KeyDrift watches outputs. Teams that verify both stop being surprised by either.
How teams actually run GuardDog and KeyDrift together
In practice the pairing is boring in the best way: GuardDog stays authoritative for whatever it was built to do, KeyDrift runs on a schedule against every public deployment, and alerts route into the same channels your team already reads. Nothing is migrated; nothing is turned off. The only new habit is reading one more alert type — and that one arrives masked, classified, and linked to a fix guide.
What to verify on their site before deciding
- Their current scanned-surface list (pip install guarddog.) — confirm against your stack.
- Whether drift/change-detection over time is part of their product or a roadmap item.
- Free-tier shape: what you can prove about YOUR deployment before any purchase conversation.
Common questions
Is GuardDog bad at security?
No — the page credits specific strengths above. The difference is which artifact gets inspected, not effort or care.
Pricing comparison?
Their list pricing lives on their site and changes; ours sits on the plans page with findings visible free at every tier. Numbers go stale; philosophy does not.
Run a free scan at keydrift.dev/scan — paste a URL or the bundle source itself, no account. Findings arrive masked, with the exact chunk they live in.