
Il credit score per i pacchetti npm. Analizza la reputazione del pacchetto, la manutenzione, la sicurezza, l'affidabilità del publisher e la salute dell'ecosistema prima di installare qualsiasi pacchetto.
Il punteggio di credito per i pacchetti npm.
Revera ti aiuta a decidere se vale la pena installare un pacchetto prima di eseguire npm install. Analizza la qualità del pacchetto, la manutenzione, la sicurezza, la salute dell'ecosistema e la fiducia nel publisher — e ora propaga il rischio in modo transitivo sull'intero grafo delle dipendenze — producendo poi un report di reputazione bayesiano e spiegabile.
Guarda revera controllare e spiegare i pacchetti in tempo reale.
Esegui revera all'istante senza installazione:
npx revera check react
Controllare un pacchetto come request (dichiarato deprecato nel 2020) ti avvisa immediatamente con motivazioni specifiche:
$ 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.
Installa globalmente per accedere all'eseguibile da qualsiasi directory:
npm install -g @aaravmaloo/revera
Analizza un pacchetto e ottieni un report di riepilogo generale:
revera check lodash
Esegui in modalità offline usando i file in cache:
revera check express --offline
Ottieni una ripartizione dettagliata del punteggio, dei segnali positivi e delle detrazioni:
revera why node-ipc
Controlla i pacchetti prima dell'installazione e avvisa quando la reputazione scende al di sotto della soglia configurata:
revera add express
Puoi passare i flag direttamente al tuo gestore di pacchetti:
revera add typescript --save-dev
Controlla tutti i pacchetti nel progetto corrente (incluse le dipendenze transitive) e calcola un punteggio complessivo di salute del progetto:
revera audit
Controlla solo le dipendenze di produzione:
revera audit --prod
Controlla solo le dipendenze dirette, saltando quelle transitive:
revera audit --direct
Autenticati con GitHub per aumentare i limiti di frequenza dell'API (60/ora anonimo contro 5.000/ora autenticato). Puoi scegliere tra OAuth2 basato su browser o l'inserimento manuale di un Personal Access Token. Una volta autorizzato, revera crittografa e archivia in modo sicuro il token nel portachiavi del tuo sistema operativo (DPAPI su Windows, Keychain su macOS o Secret Service su Linux):
revera login
Gestisci le impostazioni locali salvate in ~/.revera/config.json:
revera config
revera config set minScoreThreshold 75
revera config get minScoreThreshold
Verifica le impostazioni dell'ambiente, lo stato dell'API e le latenze delle connessioni di rete:
revera doctor
Ispeziona o svuota la cache locale dei metadati:
revera cache
revera cache clear
Verifica se stai eseguendo l'ultima versione del motore di revera:
revera update
Revera v2 ha sostituito il vecchio modello a somma pesata piatta con una pipeline bayesiana a DAG in quattro fasi.
Tutte le dipendenze del progetto vengono risolte in un grafo aciclico diretto. Ogni nodo tiene traccia dell'intero insieme dei suoi dipendenti transitivi, così che le fasi successive possano calcolare blast radius accurati.
lodash ──► your-app
express ──► your-app
axios ──► some-lib ──► your-app ← transitive
Ognuna delle 8 categorie di punteggio parte da un prior specifico per archetipo (framework, cli, types-only, utility) invece che da una base piatta e non informata. I segnali osservati aggiornano una distribuzione Beta a posteriori — il che significa che un timeout o dati mancanti allargano l'intervallo di credibilità invece di impostare silenziosamente "pulito".
Il punteggio finale per pacchetto è un aggregato ponderato per confidenza delle posteriori di categoria (ponderazione per varianza inversa), che produce sia una stima puntuale sia un intervallo di credibilità al 95%.
Tre override rigidi bypassano completamente il punteggio bayesiano e bocciano immediatamente un pacchetto:
Dopo il calcolo dei punteggi per pacchetto, il rischio viene propagato dal basso verso l'alto attraverso il DAG (ordine topologico, partendo dalle foglie):
effectiveRisk di una dipendenza supera una soglia, il rischio del suo genitore viene limitato a un minimo di 0.8 (contrassegnato come contaminato).effectiveRisk × transitive_dependent_count.Il report di audit finale fonde punteggi intrinseci, contaminazione ereditata, intervalli di credibilità e blast radius in un unico output ordinato. Il punteggio complessivo del workspace è una media ponderata per blast radius.
Revera interroga tre database di vulnerabilità indipendenti in parallelo a ogni controllo. I risultati vengono uniti e deduplicati per alias CVE/GHSA prima di essere usati nel punteggio.
Se una fonte va in timeout o genera un errore, le altre continuano in modo indipendente. VulnResult espone quali fonti hanno risposto (sources) e quali hanno fallito (failedSources), così che il motore di punteggio bayesiano possa allargare opportunamente l'intervallo di incertezza invece di presupporre che tutto sia pulito.
.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 include una suite di benchmark su larga scala integrata in benchmarker/ che testa oltre 100.000 pacchetti npm in parallelo e produce un singolo report leggibile su 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
Ogni esecuzione produce una directory di output autonoma con:
Il benchmark v1 è stato eseguito prima che i controlli di veto v2 fossero implementati. I numeri per etichetta relativi a malicious/typosquat riflettono il vecchio algoritmo. Una nuova esecuzione completa con v2 sarà pubblicata nella prossima release.
BENCHMARK.md)Senza un token, le query anonime sono limitate a 60 richieste all'ora. Puoi impostare un Personal Access Token nella tua configurazione:
revera config set githubToken ghp_YOUR_TOKEN
Revera ripiega sull'uso dei file in cache. Puoi eseguire esplicitamente i comandi in modalità offline con il flag --offline. Se una fonte di vulnerabilità non è disponibile, il motore di punteggio bayesiano allarga l'intervallo di credibilità per quel pacchetto invece di presupporre che sia pulito.
Revera agisce come un wrapper di shell. Esegue il vero installer del pacchetto dopo il controllo.
Un pacchetto viene contrassegnato come contaminato quando una delle sue dipendenze transitive ha attivato un veto o ha ottenuto un punteggio criticamente basso. L'output dell'audit mostra il subpath peggiore, così puoi risalire all'esatta catena di dipendenze che ha causato il flag.
Ogni vulnerabilità è identificata dal suo CVE ID, GHSA ID o npm advisory ID. Quando la stessa vulnerabilità compare in più fonti, viene unita in un'unica voce canonica. I dati OSV hanno priorità per i campi testuali (riepilogo, dettagli); vengono conservati la valutazione di gravità più alta e l'intervallo di versioni corrette più completo tra tutte le fonti.
Consulta la Guida ai contributi per iniziare con la configurazione, le regole di stile e le linee guida per le PR.
Revera fornisce un punteggio di reputazione basato su segnali osservabili del progetto e dati storici. È pensato per supportare le decisioni ingegneristiche e non deve essere considerato un audit di sicurezza definitivo.
Revera è distribuito sotto la Licenza MIT.
| Funzionalità | npm audit | osv-scanner | Socket | revera |
|---|
| Vulnerabilità CVE | ✔ | ✔ | ✔ | ✔ |
| Molteplici database di vulnerabilità | ✖ | Parziale | ✔ | ✔ |
| Reputazione dell'ecosistema | ✖ | ✖ | Parziale | ✔ |
| Punteggio spiegabile | ✖ | ✖ | Parziale | ✔ |
| Controllo della fiducia del publisher | ✖ | ✖ | Parziale | ✔ |
| Rilevamento dei typosquat | ✖ | ✖ | Parziale | ✔ |
| Propagazione transitiva del rischio | ✖ | ✖ | ✖ | ✔ |
| Intervalli di confidenza bayesiani | ✖ | ✖ | ✖ | ✔ |
| Categoria | Peso | Aree di attenzione |
|---|
| Sicurezza | 20% | CVE attive (3 database), script di installazione, trasparenza del repository |
| Fiducia del publisher | 15% | Storia di protestware, sabotaggio deliberato, incidenti di dirottamento account |
| Manutenzione | 13% | Cadenza di pubblicazione, commit recenti, rapporto di risposta alle issue aperte |
| Stabilità | 12% | Conformità SemVer, frequenza delle versioni major, maturità pre-1.0 |
| Qualità del pacchetto | 13% | Dimensioni dei file sorgente, licenza, configurazione degli export |
| Ecosistema | 13% | Download settimanali (scala logaritmica), stelle GitHub, numero di contributor |
| Documentazione | 9% | Completezza del README, esempi di codice, copertura dei riferimenti API |
| Esperienza sviluppatore | 5% | Typings TS nativi, export ESM, supporto al tree-shaking |
| Veto | Trigger |
|---|
| Incidente critico di fiducia | Il publisher ha un attacco confermato alla supply chain o un rilascio protestware |
| Typosquat | Distanza di edit ≤ 1 da un pacchetto top-N (es. lodahs, expres) |
| CVE critica non corretta | Una vulnerabilità con gravità CRITICAL senza una versione corretta disponibile |
| Database | Fonte | Autenticazione richiesta | Note |
|---|
| OSV (osv.dev) | Google Open Source Security | ✖ | Aggrega NVD, GitHub Advisory, RUSTSEC e altri |
| GitHub Advisory DB | GitHub Security | ✖ | Punteggi CVSS completi + intervalli di versioni corrette |
| npm Advisory | registry.npmjs.org | ✖ | Stessi dati di npm audit; a volte pubblica prima di OSV |
| File | Descrizione |
|---|
BENCHMARK.md | Singolo report leggibile su GitHub (accuratezza, rilevamento per etichetta, distribuzione dei punteggi, latenza) |
report.html | Report interattivo nel browser con grafici |
summary.json | Statistiche aggregate leggibili da macchina |
results.jsonl | Risultati per pacchetto per tutti i pacchetti testati |
comparison.json | Delta rispetto all'esecuzione precedente (regressioni + miglioramenti) |
| Etichetta | Pacchetti | Accuratezza |
|---|
trusted | 7,051 | 96.6% |
malicious | 9 | 22.2% (baseline v1 — i controlli di veto v2 risolvono questo problema) |
typosquat | 20 | 35.0% (baseline v1 — il veto per distanza di edit v2 risolve questo problema) |
| Totale (con etichetta) | 7,085 | 96.5% |