libyears

See how far behind every project is, before it breaks.

Every application is built on libraries other people maintain, and most projects quietly fall behind them. libyears puts every repository you look after on one screen: how far behind each one is, what is dangerous today, and what to fix first.

  • 5 private repositories free, no card
  • Read-only: never a pull request, never a change to your code
  • The CLI runs offline and sends nothing anywhere
Live: repositories everyone knows10 repositories, rescanned daily
1952libyears behind
Open the full screen

The word

A libyear is one library, one year behind its newest release.

Add up every library in a project and you have the project’s number. Ten libraries each a year behind is ten libyears; so is one library ten years behind. Zero means everything is current, and the direction it moves each month tells you whether anyone is looking after the project.

Proposed by researchers in 2015 and used by Renovate, Sonatype and others, because it answers a plain question: how much of the world moved on without you? More on how it is calculated.

One library, worked out
The version your project installsreact 17.0.2
PublishedMarch 2021
The newest stable releasereact 19.0.0
PublishedDecember 2024
Behind by3.7 libyears

And two major versions, which is the part that makes the upgrade work. The dashboard counts both.

Why falling behind costs more than it looks

  1. 01

    Small updates are cheap

    A minor version rarely changes how anything works. Taken as they come, updates are an hour a month and nobody notices them.

  2. 02

    Skipped updates pile up

    Leave them for two years and the same libraries are several major versions ahead, each one having removed or renamed something your code relies on. The update is now a project, and it usually surfaces when something else forces it.

  3. 03

    Old versions stop getting fixes

    Security holes found next year are fixed only in versions you are not on, and the runtime underneath reaches its end of life. The application still runs. It just stops being safe.

80%

of application dependencies stay un-upgraded for more than a year, even though a newer version exists.

Sonatype, State of the Software Supply Chain

90%

of commercial codebases audited contained components more than four years out of date.

Black Duck OSSRA 2025

95%

of the time a vulnerable component is installed, a fixed version was already published.

Sonatype, State of the Software Supply Chain

libyears behind, portfolio
1952.2
across 10 repositories, 3 groups
Need attention
3
a fixed critical, or an end-of-life runtime
Quick wins
0
fixes that need no major upgrade

Ten well-known open-source repositories, scanned this week by the same pipeline. Open the showcase for all of them. Your own looks like this within minutes of installing the App.

The tools you already have tell you a library is outdated. They tell you one repository at a time, by opening pull requests nobody has time to read. The problem was never detection. It is seeing forty repositories at once and knowing which one to deal with first.

How it works

  1. 01

    Install the GitHub App

    Read-only, on as many organisations as you work in. It reads the files that list what each project installs, never your source code, and never clones a repository.

  2. 02

    The first scan lands in minutes

    Every library a project uses is checked against the registry: how far behind it is, how old, whether it has reached end of life, been abandoned, or carries a vulnerability that a newer version fixes.

  3. 03

    Put the number in front of the client

    A shareable health report per client, a weekly digest, a Slack message when something gets worse, and an upgrade plan you can hand to a developer or a coding agent.

What it does

One number per project, and a trend

How many libyears and major versions behind, and whether the gap is opening or closing. A number a delivery lead can put in front of a client, not another alert feed.

What is dangerous today

Vulnerabilities that already have a fix, libraries being actively exploited, end-of-life runtimes and frameworks, and libraries whose maintainers walked away.

Plan the upgrade before it becomes a project

What breaks, in what order, and roughly how long it takes. Export the brief to whichever coding agent you already use, or hand it to a developer.

Across every client, not one repository at a time

Client workspaces group repositories by who pays for them. Set a threshold per client, and hear about it only when a project crosses the line.

Priced per repository, never per developer

Free for 5 private repositories. Pro from $19, Team from $79, Agency from $199 a month, two months free on annual. A monorepo counts once. Nothing is charged until you choose a plan, and cancelling never deletes anything.

See pricing

What it deliberately does not do

  • It never opens a pull request or changes a line of your code.
  • It reads manifests and lockfiles. Not your source, and it never clones a repository.
  • Private package names never leave the system, so nothing of yours reaches a third-party API.
Read the security page
What is a libyear?

A libyear is one library, one year behind its newest release. If your project uses a version of a library published in March 2021 and the newest version came out in March 2025, that library is four libyears behind. Add up every library in a project and you have the project’s number.

Ten libraries each a year behind is ten libyears. So is one library ten years behind. Zero means everything is current. The measure was proposed by researchers in 2015 and is used by Renovate, Sonatype and others because it answers a plain question: how much of the world moved on without you?

What is a good number?

There is no universal line, and anyone who gives you one is guessing. A project under a libyear or two is being looked after. A few is normal for something in steady use. Tens mean an upgrade project is waiting, whether or not anyone has scheduled it.

The more useful question is the direction. A number that creeps up every month is a project nobody is maintaining; one that drops after each sprint is one somebody is. The dashboard shows both the level and the trend, and lets you set a threshold per client so you hear about it when a project crosses the line.

My application works. Why does it matter that its libraries are old?

Because it stops being true quietly. Old versions stop receiving security fixes, so a vulnerability found next year is fixed only in a version you are not on. The language runtime it depends on reaches its end of life. And the longer the gap, the bigger the jump when you finally have to move.

Small updates done often are cheap: a minor version rarely changes how anything works. Skip them for two years and the same libraries are now several major versions ahead, each one having removed or renamed something your code uses. That is the point at which an afternoon’s update becomes a month’s project, usually discovered when something else forces it.

What do Needs attention, Quick wins, Health and the grade mean?

Needs attention counts libraries with a published vulnerability that is critical or high and, for the critical ones, confirmed by more than one source, so a single automated report does not page you. Quick wins are vulnerabilities a small update would close, with no major version to cross: the best rows on the page, because they are real security fixes that cost an afternoon.

Health is 0 to 100, combining how far behind the project is, whether its libraries are still maintained, and what is dangerous today, with hard caps: an end-of-life runtime caps it at 49, an open critical vulnerability at 59. The grade is the same number as a letter: A from 85, B from 70, C from 55, D from 40, F below that. The dashboard shows each part beside the total so the number can be argued with.

What does it read from my repositories?

Two kinds of file. The manifest (package.json) lists what your project asked for. The lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml or bun.lock) records exactly what was installed. It also reads Dockerfiles and CI workflow files, because container images and CI actions are dependencies too. It never reads your source code and never clones a repository.

Private package names, the ones that would tell an outsider what your internal systems are called, never leave the system. The security page lists every file path it can fetch.

How is this different from Dependabot or Renovate?

Those tools open a pull request for each outdated library in each repository. They are good at that, and they work fine alongside this. What they do not give you is one screen across every repository you look after, a number you can put in front of a client, or an order to do the work in.

Most teams with forty repositories also have four hundred open bot pull requests nobody reads. The problem was never knowing that something is outdated. It is knowing which project to deal with first.

See your portfolio before the next client asks.

Start free with GitHubor run npx libyears in any repository