
Le score de crédit des paquets npm. Analysez la réputation du paquet, la maintenance, la sécurité, la confiance envers l'éditeur et la santé de l'écosystème avant d'installer un paquet.
Le score de crédit pour les paquets npm.
Revera vous aide à décider si un paquet vaut la peine d'être installé avant d'exécuter npm install. Il analyse la qualité du paquet, la maintenance, la sécurité, la santé de l'écosystème et la confiance envers l'éditeur — et propage désormais le risque de manière transitive à travers l'intégralité de votre graphe de dépendances — puis produit un rapport de réputation bayésien et explicable.
Regardez revera vérifier et expliquer des paquets en temps réel.
Exécutez revera instantanément, sans installation :
npx revera check react
Vérifier un paquet comme request (qui a été déprécié en 2020) vous avertit immédiatement avec des raisons précises :
$ revera why request
▲ revera EXPLAIN
──────────────────────────────────────────────────
Package: [email protected]
Overall: 38/100 Not Recommended
Score Breakdown
Maintenance 15/100 ███░░░░░░░░░░░░░░░░░
Release cadence, commit activity, issue responsiveness, maintainer count
Stability 90/100 ██████████████████░░
SemVer compliance, major version history, API volatility over time
Security 100/100 ████████████████████
Known CVEs, install scripts, repository transparency
Package Quality 40/100 ████████░░░░░░░░░░░░
README completeness, license, test coverage indicators, exports
Ecosystem 100/100 ████████████████████
Weekly download volume, GitHub stars, community forks
Documentation 90/100 ██████████████████░░
README length, code examples, API references, external docs presence
Developer Experience 40/100 ████████░░░░░░░░░░░░
TypeScript support, ESM compatibility, CLI tooling
Publisher Trust 100/100 ████████████████████
Known malicious releases, protestware history, supply-chain incidents
Why it scores well
+ Stable API (v1.0.0+)
+ Low API volatility
+ Zero known vulnerabilities
+ Permissive open-source license
+ Code examples in README
+ Structured API documentation
+ No known publisher trust incidents
Minor deductions
- Last release was 59 months ago
- Single maintainer (bus factor of 1)
- Missing native type definitions
- Legacy CommonJS only
- No native typings (bad TypeScript DX)
Warnings
! Last release: 59 months ago. No recent updates detected. This may be normal for mature, stable libraries.
! Package has been officially marked as deprecated by the maintainer.
Verdict
Request has low confidence. revera recommends looking for alternatives due to security, activity, or stability concerns.
Installez-le globalement pour accéder à l'exécutable depuis n'importe quel répertoire :
npm install -g @aaravmaloo/revera
Analysez un paquet et obtenez un rapport de synthèse de haut niveau :
revera check lodash
Exécutez en mode hors ligne en utilisant les fichiers en cache :
revera check express --offline
Obtenez une analyse détaillée du score, des signaux positifs et des déductions :
revera why node-ipc
Filtre les paquets avant l'installation et avertit lorsque la réputation tombe sous votre seuil configuré :
revera add express
Vous pouvez passer des options directement à votre gestionnaire de paquets :
revera add typescript --save-dev
Auditez tous les paquets du projet courant (y compris les dépendances transitives) et calculez un score de santé global pour le projet :
revera audit
Auditez uniquement les dépendances de production :
revera audit --prod
Auditez uniquement les dépendances directes, en ignorant les dépendances transitives :
revera audit --direct
Authentifiez-vous auprès de GitHub pour augmenter les limites de débit de l'API (60/heure anonyme contre 5 000/heure authentifié). Vous pouvez choisir entre OAuth2 basé sur navigateur ou la saisie manuelle d'un Personal Access Token. Une fois autorisé, revera chiffre et stocke le jeton en toute sécurité dans le trousseau de votre système d'exploitation (DPAPI Windows, Keychain macOS ou Secret Service Linux) :
revera login
Gérez les paramètres locaux enregistrés dans ~/.revera/config.json :
revera config
revera config set minScoreThreshold 75
revera config get minScoreThreshold
Vérifiez les paramètres d'environnement, l'état de l'API et les latences de connexion réseau :
revera doctor
Inspectez ou videz le cache local des métadonnées :
revera cache
revera cache clear
Vérifiez si vous exécutez la dernière version du moteur revera :
revera update
Revera v2 a remplacé l'ancien modèle à somme pondérée plate par un pipeline bayésien en quatre étages basé sur un DAG.
Toutes les dépendances du projet sont résolues en un graphe orienté acyclique. Chaque nœud suit l'ensemble complet de ses dépendants transitifs afin que les étapes suivantes puissent calculer des rayons d'impact précis.
lodash ──► your-app
express ──► your-app
axios ──► some-lib ──► your-app ← transitive
Chacune des 8 catégories de notation part d'un a priori spécifique à un archétype (framework, cli, types-only, utility) plutôt que d'une base plate non informée. Les signaux observés mettent à jour une distribution a posteriori Beta — ce qui signifie qu'un délai d'attente ou des données manquantes élargissent l'intervalle de crédibilité au lieu de supposer silencieusement « propre ».
Le score final de chaque paquet est un agrégat pondéré par la confiance des distributions a posteriori des catégories (pondération par variance inverse), produisant à la fois une estimation ponctuelle et un intervalle de crédibilité de 95 %.
Trois dérogations strictes contournent entièrement la notation bayésienne et font immédiatement échouer un paquet :
Une fois les scores de chaque paquet calculés, le risque est propagé de bas en haut à travers le DAG (ordre topologique, feuilles d'abord) :
effectiveRisk d'une dépendance dépasse un seuil, le risque de son parent est porté à un minimum de 0.8 (marqué comme contaminé).effectiveRisk × transitive_dependent_count.Le rapport d'audit final fusionne les scores intrinsèques, la contamination héritée, les intervalles de crédibilité et les rayons d'impact dans une seule sortie classée. Le score global de l'espace de travail est une moyenne pondérée par le rayon d'impact.
Revera interroge trois bases de données de vulnérabilités indépendantes en parallèle à chaque vérification. Les résultats sont fusionnés et dédupliqués par alias CVE/GHSA avant d'être utilisés dans la notation.
Si une source expire ou génère une erreur, les autres continuent indépendamment. VulnResult expose les sources ayant répondu (sources) et celles ayant échoué (failedSources) afin que le scoreur bayésien puisse élargir l'intervalle d'incertitude de manière appropriée plutôt que de supposer un état propre.
.github/ # CI configurations
docs/ # Architecture specs and algorithm diagrams
src/
├── commands/ # CLI command handlers (check, why, add, audit, config, cache, update)
├── engine/
│ ├── dag.ts # DAG construction + topological sort + blast-radius computation
│ ├── propagation.ts # Bottom-up transitive risk propagation
│ ├── scoring.ts # Bayesian Beta posteriors, archetype priors, veto checks
│ ├── vuln.ts # Multi-source vuln aggregator (OSV + GitHub + npm)
│ ├── trust.ts # Publisher trust incident database
│ ├── typosquat.ts # Edit-distance typosquat detection
│ ├── npm.ts # npm registry + download stats fetcher
│ └── github.ts # GitHub repo stats + README fetcher
├── ui/ # Console view templates (reporter formatters, theme styles)
└── utils/ # Filesystem helpers (caching, configuration, package managers)
tests/ # Unit test suites
benchmarker/ # Large-scale benchmark suite (100k+ packages)
Revera est fourni avec une suite de benchmarks à grande échelle intégrée dans benchmarker/ qui teste plus de 100 000 paquets npm en parallèle et produit un rapport unique lisible sur GitHub.
cd benchmarker
npm install
npm run fetch-dataset # one-time: pulls ~100k packages into datasets/npm.jsonl
./benchmark.sh --workers 16 # runs the full suite
Chaque exécution produit un répertoire de sortie autonome contenant :
Le benchmark v1 a été exécuté avant le déploiement des vérifications de veto v2. Les chiffres par étiquette malicious/typosquat reflètent l'ancien algorithme. Une ré-exécution complète en v2 sera publiée dans la prochaine version.
BENCHMARK.md)Sans jeton, les requêtes anonymes sont limitées à 60 demandes par heure. Vous pouvez définir un Personal Access Token dans votre configuration :
revera config set githubToken ghp_YOUR_TOKEN
Revera revient à l'utilisation des fichiers en cache. Vous pouvez explicitement exécuter des commandes en mode hors ligne avec l'option --offline. Si une source de vulnérabilités est indisponible, le scoreur bayésien élargit l'intervalle de crédibilité pour ce paquet plutôt que de supposer un état propre.
Revera agit comme un wrapper shell. Il exécute le véritable installateur de paquets après le filtrage.
Un paquet est marqué comme « contaminé » lorsque l'une de ses dépendances transitives a déclenché un veto ou a obtenu un score critique. La sortie d'audit montre le pire sous-chemin afin que vous puissiez retracer la chaîne exacte de dépendances ayant provoqué le signalement.
Chaque vulnérabilité est identifiée par son ID CVE, son ID GHSA ou son ID d'avis npm. Lorsque la même vulnérabilité apparaît dans plusieurs sources, elle est fusionnée en une entrée canonique unique. Les données OSV ont priorité pour les champs descriptifs (résumé, détails) ; la note de sévérité la plus élevée et la plage de versions corrigées la plus complète parmi toutes les sources sont conservées.
Veuillez consulter le Guide de contribution pour commencer avec la configuration, les règles de style et les directives relatives aux PR.
Revera fournit un score de réputation basé sur des signaux observables du projet et des données historiques. Il est destiné à aider les décisions d'ingénierie et ne doit pas être considéré comme un audit de sécurité définitif.
Revera est distribué sous la licence MIT.
| Fonctionnalité | npm audit | osv-scanner | Socket | revera |
|---|
| Vulnérabilités CVE | ✔ | ✔ | ✔ | ✔ |
| Plusieurs bases de données de vulnérabilités | ✖ | Partiel | ✔ | ✔ |
| Réputation de l'écosystème | ✖ | ✖ | Partiel | ✔ |
| Score explicable | ✖ | ✖ | Partiel | ✔ |
| Vérification de la confiance de l'éditeur | ✖ | ✖ | Partiel | ✔ |
| Détection de typosquat | ✖ | ✖ | Partiel | ✔ |
| Propagation transitive du risque | ✖ | ✖ | ✖ | ✔ |
| Intervalles de confiance bayésiens | ✖ | ✖ | ✖ | ✔ |
| Catégorie | Poids | Domaines d'attention |
|---|
| Sécurité | 20% | CVE actives (3 bases de données), scripts d'installation, transparence du dépôt |
| Confiance de l'éditeur | 15% | Historique de protestware, sabotage délibéré, incidents de détournement de compte |
| Maintenance | 13% | Cadence de publication, commits récents, ratio de réponse aux issues ouvertes |
| Stabilité | 12% | Conformité SemVer, fréquence des versions majeures, maturité pré-1.0 |
| Qualité du paquet | 13% | Tailles des fichiers sources, licence, configuration des exports |
| Écosystème | 13% | Téléchargements hebdomadaires (échelle logarithmique), étoiles GitHub, nombre de contributeurs |
| Documentation | 9% | Complétude du README, exemples de code, couverture des références API |
| Expérience développeur | 5% | Typages TS natifs, exports ESM, prise en charge du tree-shaking |
| Veto | Déclencheur |
|---|
| Incident critique de confiance | L'éditeur a une attaque confirmée sur la chaîne d'approvisionnement ou une version protestware |
| Typosquat | Distance d'édition ≤ 1 par rapport à un paquet du top N (par ex. lodahs, expres) |
| CVE critique non corrigée | Une vulnérabilité de sévérité CRITICAL sans version corrigée disponible |
| Base de données | Source | Authentification requise | Notes |
|---|
| OSV (osv.dev) | Google Open Source Security | ✖ | Agrège NVD, GitHub Advisory, RUSTSEC, etc. |
| GitHub Advisory DB | GitHub Security | ✖ | Scores CVSS riches + plages de versions corrigées |
| npm Advisory | registry.npmjs.org | ✖ | Mêmes données que npm audit ; publie parfois avant OSV |
| Fichier | Description |
|---|
BENCHMARK.md | Rapport unique lisible sur GitHub (précision, détection par étiquette, distribution des scores, latence) |
report.html | Rapport interactif dans le navigateur avec graphiques |
summary.json | Statistiques agrégées lisibles par machine |
results.jsonl | Résultats par paquet pour tous les paquets testés |
comparison.json | Écart par rapport à la précédente exécution (régressions + améliorations) |
| Étiquette | Paquets | Précision |
|---|
trusted | 7,051 | 96.6% |
malicious | 9 | 22.2% (base v1 — les vérifications de veto v2 corrigent cela) |
typosquat | 20 | 35.0% (base v1 — le veto de distance d'édition v2 corrige cela) |
| Global (étiqueté) | 7,085 | 96.5% |