Avoid needing to update your CI config files for every Node.js release or EOL event.
This action retrieves a list of Node.js release versions and exports the versions for consumption by automated processes.
The output of the yaml function is designed to populate a GitHub Actions matrix declaration so that your CI is testing with the version(s) of Node.js you choose, typically the LTS version(s).
This action has the following outputs:
-
active
are Active LTS versions -
maintenance
are Maintenance LTS versions -
lts
is all LTS versions (active + maintenance) -
current
is the Current node version -
min
is the lowest LTS version
The currently active Node.js version. This is like a baton that is handed from one version of Node.js to the next.
Every version of Node.js that is actively maintained by the Node.js project.
Similar to maintenance, except it excludes odd number releases that are never considered Long Term Stable. This is the target most modules should use in their CI tests.
The current
version would usually be used in your CI tests to always tests your code against the latest Node.js version, but perhaps without failing the CI tests.
The min
version is the lowest supported version of Node.js. It couple be used for modules with scarce updates, whose SLA is a best effort to support any version of Node.js.
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [20, 22]
fail-fast: false
steps:
test:
needs: get-lts
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: ${{ fromJson(needs.get-lts.outputs.lts) }}
fail-fast: false
steps:
get-lts:
runs-on: ubuntu-latest
steps:
- id: get
uses: msimerson/node-lts-versions@v1
outputs:
active: ${{ steps.get.outputs.active }}
maintenance: ${{ steps.get.outputs.maintenance }}
lts: ${{ steps.get.outputs.lts }}
current: ${{ steps.get.outputs.current }}
min: ${{ steps.get.outputs.min }}
✗ node main.js
::set-output name=active::["22"]
::set-output name=maintenance::["18","20"]
::set-output name=lts::["18","20","22"]
::set-output name=current::["23"]
::set-output name=min::"18"
const ltsv = require('node-lts-versions')
ltsv.fetchLTS().then(() => {
console.log(ltsv.json())
console.log(ltsv.yaml())
ltsv.print()
})
Retrieves Node.js version information.
Display Node.js version information in JSON format.
> ltsv.json('active')
'["22"]'
> ltsv.json('lts')
'["18","20","22"]'
> ltsv.json()
'["23"]'
Display Node.js version information in YAML format.
> ltsv.yaml('lts')
[ '18', '20', '22' ]
> ltsv.yaml('active')
[ '22' ]
> ltsv.yaml('maintenance')
[ '18', '20' ]
> ltsv.yaml('current')
[ '23' ]
Display Node.js version information in tabular format.
Ver Codename Latest Release LTS Period
18 Hydrogen v18.20.8 on 2025-03-27 2022-10-17 to 2025-04-30
20 Iron v20.19.1 on 2025-04-22 2023-10-16 to 2026-04-30
22 Jod v22.15.0 on 2025-04-22 2024-10-23 to 2027-04-30
- GitHub Actions: New workflow features
- Using tags for Release management
Got ideas? Contributions are welcome. Submit a PR with tests and it will likely be accepted.