Repository avatar
Other Tools
v0.1.1
active

offing

io.github.velella-sh/offing

Evidence-backed deprecation and end-of-life checks for dependencies, runtimes, and Actions.

Documentation

Offing

Offing

See what's in the offing. Fix it before it lands.
Local-first end-of-life and deprecation scanner for your repository.

CI Coverage npm License: Apache-2.0 Offing OpenSSF Scorecard skills.sh

Offing finds end-of-life and deprecated runtimes, packages, and GitHub Actions in your repository, at the exact file and line, each with an authoritative source, a replacement, and migration steps. It is deterministic, offline, and needs no account.

npx @velella/offing scan .

Terminal recording: npx @velella/offing scan . lists the outdated runtime, package and GitHub Action in the demo project with file, line, severity and replacement

Offing: 1 finding
github-actions.checkout.node20:.github/workflows/ci.yml:9 .github/workflows/ci.yml:9 high actions/checkout@v5 or later

That is scan --format compact on the bundled demo project (examples/demo). Ask for the evidence behind one finding with npx @velella/offing explain '<finding-id>' ., or check a dependency before you add it:

npx @velella/offing check pkg:npm/request@2.88.2   # exits 1: deprecated, with the replacement and its source

Requirements: Node.js 22 or newer. Read this in: English · فارسی.

What you get

  • Exact location, real source. Every finding names the file and line, links the authoritative source for the rule, and gives the replacement and migration steps. Nothing is guessed: a package with no rule reports no-data, never "safe".
  • Check before you add. check pkg:npm/request@2.88.2 answers for one dependency without scanning anything, and exits 1 when a rule at or above --fail-on applies.
  • Only new problems. baseline records accepted findings; scan --baseline then reports only regressions, so a legacy repository can adopt Offing on day one.
  • Migration packets. context '<finding-id>' --json hands a person or a coding agent the constraints, the affected files and usages, the sources, and suggested verification commands. Offing never runs them for you.
  • Usage, not just declarations. For npm and Ruby it finds the imports and calls that use a deprecated package, so you see what a migration has to touch.
  • Fresh data, still offline. Scans never touch the network. data update refreshes lifecycle rules from signed bundles when you ask, and refuses anything it cannot verify.
  • Works where you work. CLI, local MCP server, GitHub Action with SARIF for code scanning, and an Agent Skill. Setup for Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot and Kilo Code is one command: setup.
  • Private by design. No account needed, and no repository upload.

See it run

Check a dependency before you add it
Terminal recording: offing check pkg:npm/request@2.88.2 reports it as deprecated with the replacement and source
Evidence behind one finding
Terminal recording: offing explain shows the rule, location, replacement, deadline and sources for one finding
Adopt on day one with a baseline
Terminal recording: offing baseline records accepted findings and scan --baseline then reports zero new ones
Preview a fix as a diff
Terminal recording: offing fix --dry-run prints the proposed diff without writing files
See what is ending next
Terminal recording: offing forecast --timeline shows a twelve-month timeline of lifecycle events
Teach your coding agents
Terminal recording: offing setup --dry-run previews the instructions added for Claude Code

What it covers

Runtimes, package manifests and lockfiles, CI and infrastructure files across:

Node.js, npm, Deno and Bun · Python · Go · Rust · Java and Kotlin · .NET · Ruby · PHP · Swift · Android · Dart and Flutter · Elixir · Scala · C and C++ · GitHub Actions · CI runner images · Container base images · Kubernetes APIs · Terraform · Serverless runtimes · Database runtimes · PowerShell.

The full table, with the files read and what is reported for each, is in Ecosystem coverage. Maturity per detector is in the compatibility matrix.

For coding agents

npx skills add velella-sh/offing        # the Agent Skill, listed on skills.sh
npx @velella/offing setup               # tell each coding agent in the repo to check before adding
npx @velella/offing context '<finding-id>' . --json   # migration packet for an agent
npx --yes @velella/offing mcp           # local MCP server over stdio

Every report has a machine-readable form. The docs are also published as llms.txt and llms-full.txt. See Agent Skills and the local MCP guide.

In CI

steps:
  - uses: actions/checkout@v7
  - uses: velella-sh/offing@v0.1.1
    with:
      fail-on-severity: high

Offing pull request comment showing severity counts and the top lifecycle findings with file locations

Offing annotates the pull request at the exact line, posts one summary comment with the evidence, suppresses accepted findings with a baseline, fails on the severity you choose, and uploads the complete JSON report or SARIF. Scans run on the runner, so repository contents never leave it. Pin a full commit SHA instead of a tag when you need an immutable reference. Setup, inputs, permissions and artifacts are in the GitHub Action guide.

Why not just Renovate?

Renovate, Dependabot, and endoflife.date each answer a question Offing does not, and Offing answers one none of them does: what is ending in this repository, and where is it used. Most repositories gain from running one of them with Offing, so the table states what each covers and what it does better, and links the source of every claim. Details and sources per tool are in Offing compared with other tools.

ToolWhat it coversWhat it does betterEvidence
RenovateDependency updates across the package managers it supports, as automated pull requestsOpens the update pull requests Offing never writes, and reports npm deprecation notices for packages this registry has no rule forCompared with Renovate; the differential report measures both directions on pinned repositories and links the evidence for every disagreement
DependabotVersion updates and security updates on GitHub, each as a pull requestVersion updates keep dependencies current even when nothing is vulnerable; security pull requests and alerts draw on the GitHub Advisory DatabaseCompared with Dependabot
endoflife.dateEOL dates and support lifecycles for many products, served through a public APIProduct breadth beyond one reviewed rule set, and a date you can check without installing anythingCompared with endoflife.date
OffingThe lifecycle status of what the repository's files declare and use — end-of-life runtimes, deprecated packages, retired APIs — at file and line, offlineReports that a version is out of support, not only that a newer one exists, and names the usage a migration has to touchWhat it covers, validation, compatibility matrix

Learn more

License and brand

Offing source code is licensed under the Apache License 2.0. The lifecycle data it reads comes from Ebb (@velella/ebb): code under the MIT License, dataset under CC BY 4.0, attribution in ATTRIBUTION.md. The Offing name, logo, and files in brand/ are proprietary brand assets under separate brand asset terms.

NPM
@velella/offing
Install Command
npm install @velella/offing
Runtime: npx