Usage

Show help

It is a command lne tool. With -h or --help you get a list of supported options.

$ ./eol_check.sh -h

_______________________________________________________________________________

  EOL CHECK v0.8
_______________________________________________________________________________

Get end of life information to a product.
Data source is https://endoflife.date/ API.

This tool needs 'curl' and 'jq' to run.

👤 Author: Axel Hahn; Institute for Medical Education; University of Bern
📄 Source: <https://git-repo.iml.unibe.ch/iml-open-source/eol-check>
📜 License: GNU GPL 3.0
📗 Docs: <https://os-docs.iml.unibe.ch/eol-check/>
_______________________________________________________________________________

SYNTAX:

    eol_check.sh [OPTIONS] [PRODUCT]

OPTIONS:

    -h|--help            show this help and exit

    -a|--api             force api request and ignore cache
    -c|--category NAME   list products of given category name
    -d|--details         show details
    -f|--full            show all details (same like '-d -r')
    -l|--list MODE       list items (products|categories|identifiers|tags) 
                         from endoflife.date
                         default is 'products'
    -n|--newest          show newest version data as json for given product
                         without check of local installation
    -r|--raw             show raw output for versions (JSON)
    -s|--show            show end of life data as JSON and exit without check
                         of local installation
    -t|--tag NAME        list products of given tag name
    -v|--verbose         show more output (written to STDERR)
    -w|--wipe            Wipe created cache files

PARAMETER:

    PRODUCT              product name to check; use --list for a list of
                         known products

EXITCODES:

    0: OK - up to date
    1: minor update available
    2: major update available
    3: no support for your version
    4: no support for the product

    >10: execution erors - version check was not performed

EXAMPLES

    eol_check.sh ansible    Eol infos in 2..3 lines output
    eol_check.sh -d -r php  full output with details and JSON
    eol_check.sh -v java    verbode mode with details during execution
    eol_check.sh -n ruby    Show newest version data for ruby

    eol_check.sh -l         List all products as <product> <tab> <description>
    eol_check.sh -l tags    List all products as <product> <tab> <description>

    eol_check.sh -w         Wipe cache data

Show eol data of an installed product

You can just add a product name.

Simple output:

$ ./eol_check.sh php
✅ PHP v8.4.8: You have the current major version '8.4'.
⚠️ A minor update is available: '8.4.10'.
   OK, your version is maintained. Known eol date: 2028-12-31 (1269 days left)

or

$ ./eol_check.sh node
⚠️ Node.js v20.19.2: Update with new major version is available: '24.4.0'.
   OK, your version is maintained. Known eol date: 2026-04-30 (293 days left)

Full output:

./eol_check.sh -f node
⚠️ Node.js v20.19.2: Update with new major version is available: '24.4.0'.
   OK, your version is maintained. Known eol date: 2026-04-30 (292 days left)
----------------------------------------------------------------------

Produkt             Node.js

Latest version      24
Category            framework

Link                https://endoflife.date/nodejs
EOL                 Security Support
Discontinued        null

----------------------------------------------------------------------
Version             20.19.2
LTS                 true
Maintaned           true
EOL                 false
EOL since           2026-04-30
----------------------------------------------------------------------
Data for latest version:
{
  "name": "24",
  "codename": null,
  "label": "24 (Upcoming LTS)",
  "releaseDate": "2025-05-06",
  "isLts": false,
  "ltsFrom": "2025-10-28",
  "isEoas": false,
  "eoasFrom": "2026-10-20",
  "isEol": false,
  "eolFrom": "2028-04-30",
  "isEoes": null,
  "eoesFrom": null,
  "isMaintained": true,
  "latest": {
    "name": "24.4.0",
    "date": "2025-07-09",
    "link": "https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V24.md#24.4.0"
  },
  "custom": null
}
----------------------------------------------------------------------
Data for your version:
{
  "name": "20",
  "codename": null,
  "label": "20 (LTS)",
  "releaseDate": "2023-04-18",
  "isLts": true,
  "ltsFrom": "2023-10-24",
  "isEoas": true,
  "eoasFrom": "2024-10-22",
  "isEol": false,
  "eolFrom": "2026-04-30",
  "isEoes": null,
  "eoesFrom": null,
  "isMaintained": true,
  "latest": {
    "name": "20.19.3",
    "date": "2025-06-23",
    "link": "https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md#20.19.3"
  },
  "custom": null
}

Get a list of known products

Use -lor --list to get a list from the api what products are supported:

$ ./eol_check.sh -l
akeneo-pim      Akeneo PIM
alibaba-ack     Alibaba ACK
alibaba-dragonwell      Alibaba Dragonwell
almalinux       AlmaLinux OS
alpine-linux    Alpine Linux
...
yocto   Yocto Project
zabbix  Zabbix
zentyal Zentyal
zerto   Zerto
zookeeper       Apache ZooKeeper

Get raw data for a product

If you want to see all data from the endoflife.data api us -s or --show. Use the ist keyword from the list of --list output.

With this option no local version will be checked.

The response is json.

$ ./eol_check.sh -s ruby
{
  "schema_version": "1.2.0",
  "generated_at": "2025-07-02T05:32:23+00:00",
  "last_modified": "2025-06-01T10:30:23+00:00",
  "result": {
    "name": "ruby",
    "aliases": [],
    "label": "Ruby",
    "category": "lang",
    "tags": [
      "lang"
    ],
    "versionCommand": "ruby --version",
    ...
  }
}

Show newest version of product

Next to the raw data is --newest a flag that shows data only without checking a local version.

./eol_check.sh --newest node
----------------------------------------------------------------------

  Node.js

Latest version      24
Category            framework

Link                https://endoflife.date/nodejs
EOL                 Security Support
Discontinued        null

----------------------------------------------------------------------
{
  "name": "24",
  "codename": null,
  "label": "24 (Upcoming LTS)",
  "releaseDate": "2025-05-06",
  "isLts": false,
  "ltsFrom": "2025-10-28",
  "isEoas": false,
  "eoasFrom": "2026-10-20",
  "isEol": false,
  "eolFrom": "2028-04-30",
  "isEoes": null,
  "eoesFrom": null,
  "isMaintained": true,
  "latest": {
    "name": "24.4.0",
    "date": "2025-07-09",
    "link": "https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V24.md#24.4.0"
  },
  "custom": null
}

Use it in scripts

You can use the exitcodes to get the logical result and show your own message or initialize an action. Redirect the output to make it invisible eol_check.sh <program> >/dev/null.

Exitcode Description
0 OK - up to date
1 minor update available
2 major update available
3 no support for your version
4 no support for the product

More lists

You can get a filtered list by tag or category.

set one of the modes behind –list

  • products (default)
  • categories
  • identifiers
  • tags
 ./eol_check.sh -l categories
server-app  
service     
lang        
os          
framework   
app         
database    
device      
standard    

To get a list of products matching a category or filter use ./eol_check.sh --category <category> or ./eol_check.sh --tag <tagname>

Check operating systems

The endoflife.date website lists not only software products - among the list are operating systems too.

Show all tags:

 ./eol_check.sh --tag 
php-runtime         
server-app          
alibaba             
...
linux-distribution  
os                    <<<
amazon              
...
veeam               
windows             
zerto  

To see supported operating systems we filter by tag “os”

./eol_check.sh --tag os
almalinux            AlmaLinux OS
alpine-linux         Alpine Linux
amazon-linux         Amazon Linux
android              Android OS
antix                antiX Linux
tvos                 Apple tvOS
big-ip               BIG-IP
centos-stream        CentOS Stream
centos               CentOS
cos                  Google Container-Optimized OS (COS)
debian               Debian
devuan               Devuan
eurolinux            EuroLinux
fedora               Fedora Linux
fortios              FortiOS
freebsd              FreeBSD
ibm-aix              IBM AIX
ibm-i                IBM iSeries
ios                  Apple iOS
ipados               Apple iPadOS
kde-plasma           KDE Plasma
lineageos            LineageOS
linux                Linux Kernel
linuxmint            Linux Mint
macos                Apple macOS
mageia               Mageia
mxlinux              MX Linux
netapp-ontap         NetApp ONTAP
netbsd               NetBSD
nixos                NixOS
nutanix-aos          Nutanix AOS
openbsd              OpenBSD
opensuse             openSUSE
openwrt              OpenWrt
oracle-linux         Oracle Linux
oracle-solaris       Oracle Solaris
panos                Palo Alto Networks PAN-OS
pop-os               Pop!_OS
postmarketos         postmarketOS
proxmox-ve           Proxmox VE
rhel                 Red Hat Enterprise Linux
rocky-linux          Rocky Linux
slackware            Slackware Linux
sles                 SUSE Linux Enterprise Server
steamos              SteamOS
tails                Tails
ubuntu               Ubuntu
visionos             Apple visionOS
esxi                 VMware ESXi
photon               VMware Photon
watchos              Apple watchOS
windows-embedded     Microsoft Windows Embedded
windows-nano-server  Microsoft Nano Server
windows-server-core  Microsoft Windows Server Core
windows-server       Microsoft Windows Server
windows              Microsoft Windows
xcp-ng               XCP-ng
yocto                Yocto Project
zentyal              Zentyal

You can see the raw endoflife api data with –show … and to extract the latest version filter it with jq. Here is an example for debian as opearting system:

 ./eol_check.sh -s debian | jq ".result .releases.[0]"
{
  "name": "12",
  "codename": "Bookworm",
  "label": "12 (Bookworm)",
  "releaseDate": "2023-06-10",
  "isLts": false,
  "ltsFrom": null,
  "isEol": false,
  "eolFrom": "2026-06-10",
  "isEoes": false,
  "eoesFrom": "2028-06-10",
  "isMaintained": true,
  "latest": {
    "name": "12.11",
    "date": "2025-05-17",
    "link": "https://www.debian.org/News/2025/20250111"
  },
  "custom": null
}

Handle caching

By default a first request to the api of endoflife.data is needed. The response will be stored in /tmp/eol-cache__<name>.json. For 1 day the cache file is used für the same api request.

You can override the local cache by using --api.

With --wipe all generated cache files can be deleted.