dep-radius

The JSON brief

The --json output, field by field. A stable contract: version 1 only ever gains fields.

radius --json prints one JSON object on stdout. It's the same brief as the terminal report and the pull request comment, just shaped for programs.

The stability promise

  • The object carries "schemaVersion": 1.
  • Version 1 only gains fields. Removing or renaming one would mean schemaVersion: 2.
  • A JSON Schema ships with the engine: @dep-radius/core/schema/brief-v1.schema.json. You can validate against it, or just read it.

So: read the fields you need, ignore the ones you don't know, and your integration keeps working.

The top level

FieldTypeWhat
schemaVersion1The contract version
toolobjectname, version, and the typescript version that read the types
rootstringThe folder that was analysed
generatedAtstringISO 8601
sinceobject?With --since only: the ref you gave and the commit it resolved to
exitCode0, 1, 2The worst verdict: quiet, review, blocked
summaryobjectCounts: manifests, withUpdate, upToDate, quiet, review, blocked, notAnalyzed
packagesarrayOne entry per analysed update, see below
notAnalyzedarray{ name, reason } for dependencies radius skipped, and why
wholeProjectarrayThings that hide usage for the whole project, like require(someVariable)
limitsstring[]The limits that applied to this run, in plain words

With --since, summary.withUpdate counts the dependencies that changed version and summary.upToDate counts the ones that didn't.

A package

FieldWhat
nameThe package name
from, toThe installed version and the analysed target
bumpmajor, minor or patch (a 0.x minor counts as a major)
publishedAtWhen to was published
verdictquiet, review or blocked
reasons{ code, detail }[]: every rule that fired, see codes
versionSourceWhere from came from: node_modules, lockfile:npm, lockfile:pnpm, lockfile:yarn, lockfile:bun, or manifest-range (a guess)
manifestsThe package.json files that declare it
typesNet 1, the type surface, see below
notesNet 2, the release notes, see below
usageHow your code uses it
heldBackNewer versions skipped, with a reason (too-new, deprecated, above-dist-tag)
alsoAvailableA newer version beyond the safe line, not analysed (use --latest for it)

types

FieldWhat
statuscomputed, no-types, types-from-@types, types-elsewhere, failed, disabled, offline-uncached
changesHow many exports changed between the two versions
addedHow many exports are new
touchedThe changes that land on your code

Each entry of touched:

FieldWhat
pathThe export, like schemakit:email, schemakit:coerce.number or schemakit:Schema#parse (. for namespace members, # for members of a type)
changeremoved, changed or deprecated
certaintyexact when resolved precisely, by-name when matched by member name only
before, afterThe normalised signatures, when the export still exists
sitesWhere your code uses it
alsoAtThe same change seen from other entry points of the package

notes

FieldWhat
coveragecomplete, partial, none-published, unavailable or disabled
entriesHow many note entries were read in total
versionsPer version: status, the source (kind and url), or a reason
matchedEntries that name something you use: version, title, breaking, direct, refs, and names (name, certainty, where)
breakingWithoutApiBreaking entries that name no API, so they could apply to anyone

usage

FieldWhat
filesHow many files use the package
sitesHow many places
namesexact (resolved) and byName (matched by name) names your code uses
sitesByNameEvery site, keyed by the name used there
cannotSee{ kind, count, examples }[], see what radius cannot see

A site

FieldWhat
fileRelative to root
line, column1-based
typeOnlytrue when used only as a type
codeThe source line, trimmed
viaLocal files that re-export the package on the way, if any

Reason codes

CodePushes toMeans
removed-touchedblockedAn export you use was removed
changed-touchedreviewA signature you use changed
deprecated-touchedreviewSomething you use is newly deprecated
possibly-touchedreviewA member you may reach by name changed
notes-matchreviewA release note names something you use
unattributed-breakingreviewA breaking note names no API, so it could be about you
blind-spotsreviewPart of your usage isn't visible
opaque-usagereviewUsed from scripts, config, CSS or side effects
not-referencedreviewNo scanned file uses it: a tool, loaded by name, or unused
flagged-installreviewPatched, not on the registry, or the version was guessed
surface-incompletereviewThe types couldn't be fully compared
no-evidencereviewNeither the notes nor the types are complete
major-unprovenreviewA major is only quiet when both nets are complete and clean
notes-complete-no-match(quiet)Every note read, none mentions what you use
surface-clean(quiet)No changed or removed export you use
caveat-no-types(quiet)Quiet, judged without types
caveat-no-notes(quiet)Quiet, judged without release notes

The last four only appear on quiet packages, to say what the verdict stood on.

On this page