norwegianblue
Python interface to endoflife.date to show end-of-life dates for a number of products.
Installation
From PyPI
python3 -m pip install --upgrade norwegianblue
With pipx
pipx install norwegianblue
From conda-forge
With Pixi
pixi add norwegianblue
With conda
conda install --channel conda-forge norwegianblue
With pixi global
pixi global install norwegianblue
From source
git clone https://github.com/hugovk/norwegianblue
cd norwegianblue
python3 -m pip install .
To install tab completion on supported Linux and macOS shells, see https://kislyuk.github.io/argcomplete/
Example command-line use
Run norwegianblue or eol, they do the same thing.
Top-level help:
$ eol --help
usage: eol [-h] [-c {yes,no,auto}] [--clear-cache] [--show-title {yes,no,auto}] [-v] [-V] [-w]
[--pretty | --md | --rst | --json | --csv | --tsv | --html | --yaml]
[product ...]
CLI to show end-of-life dates for a number of products, from https://endoflife.date
For example:
* `eol python` to see Python EOLs
* `eol ubuntu` to see Ubuntu EOLs
* `eol centos fedora` to see CentOS and Fedora EOLs
* `eol all` or `eol` to list all available products
Something missing? Please contribute! https://endoflife.date/contribute
positional arguments:
product product to check, or 'all' to list all available (default: 'all')
options:
-h, --help show this help message and exit
-c, --color {yes,no,auto}
colour the output (default: auto)
--clear-cache clear cache before running
--show-title {yes,no,auto}
show or hide product title, 'auto' to show title only for multiple products (default: auto)
-v, --verbose print extra messages to stderr
-V, --version show program's version number and exit
-w, --web open product page in web browser
formatters:
--pretty output in pretty (default)
--md output in Markdown
--rst output in reStructuredText
--json output in JSON
--csv output in CSV
--tsv output in TSV
--html output in HTML
--yaml output in YAML
List all available products with end-of-life dates:
$ # eol all
$ # or:
$ eol
adonisjs
akeneo-pim
alibaba-ack
alibaba-dragonwell
almalinux
...
Show end-of-life dates:
$ norwegianblue python
┌───────┬────────────┬─────────┬────────────────┬────────────┬────────────┬──────────┐
│ cycle │ release │ latest │ latest release │ support │ eol │ pep │
├───────┼────────────┼─────────┼────────────────┼────────────┼────────────┼──────────┤
│ 3.14 │ 2025-10-07 │ 3.14.6 │ 2026-06-10 │ 2027-10-01 │ 2030-10-31 │ PEP-0745 │
│ 3.13 │ 2024-10-07 │ 3.13.14 │ 2026-06-10 │ 2026-10-01 │ 2029-10-31 │ PEP-0719 │
│ 3.12 │ 2023-10-02 │ 3.12.13 │ 2026-03-03 │ 2025-04-02 │ 2028-10-31 │ PEP-0693 │
│ 3.11 │ 2022-10-24 │ 3.11.15 │ 2026-03-03 │ 2024-04-01 │ 2027-10-31 │ PEP-0664 │
│ 3.10 │ 2021-10-04 │ 3.10.20 │ 2026-03-03 │ 2023-04-05 │ 2026-10-31 │ PEP-0619 │
│ 3.9 │ 2020-10-05 │ 3.9.25 │ 2025-10-31 │ 2022-05-17 │ 2025-10-31 │ PEP-0596 │
│ 3.8 │ 2019-10-14 │ 3.8.20 │ 2024-09-06 │ 2021-05-03 │ 2024-10-07 │ PEP-0569 │
│ 3.7 │ 2018-06-27 │ 3.7.17 │ 2023-06-05 │ 2020-06-27 │ 2023-06-27 │ PEP-0537 │
│ 3.6 │ 2016-12-23 │ 3.6.15 │ 2021-09-03 │ 2018-12-24 │ 2021-12-23 │ PEP-0494 │
│ 3.5 │ 2015-09-13 │ 3.5.10 │ 2020-09-05 │ False │ 2020-09-30 │ PEP-0478 │
│ 3.4 │ 2014-03-16 │ 3.4.10 │ 2019-03-18 │ False │ 2019-03-18 │ PEP-0429 │
│ 3.3 │ 2012-09-29 │ 3.3.7 │ 2017-09-19 │ False │ 2017-09-29 │ PEP-0398 │
│ 3.2 │ 2011-02-20 │ 3.2.6 │ 2014-10-12 │ False │ 2016-02-20 │ PEP-0392 │
│ 2.7 │ 2010-07-03 │ 2.7.18 │ 2020-04-19 │ False │ 2020-01-01 │ PEP-0373 │
│ 3.1 │ 2009-06-27 │ 3.1.5 │ 2012-04-06 │ False │ 2012-04-09 │ PEP-0375 │
│ 3.0 │ 2008-12-03 │ 3.0.1 │ 2009-02-12 │ False │ 2009-06-27 │ PEP-0361 │
│ 2.6 │ 2008-10-01 │ 2.6.9 │ 2013-10-29 │ False │ 2013-10-29 │ PEP-0361 │
└───────┴────────────┴─────────┴────────────────┴────────────┴────────────┴──────────┘
You can format in Markdown, ready for pasting in GitHub issues and PRs:
| cycle | release | latest | latest release | support | eol | pep |
|---|---|---|---|---|---|---|
| 3.14 | 2025-10-07 | 3.14.6 | 2026-06-10 | 2027-10-01 | 2030-10-31 | PEP-0745 |
| 3.13 | 2024-10-07 | 3.13.14 | 2026-06-10 | 2026-10-01 | 2029-10-31 | PEP-0719 |
| 3.12 | 2023-10-02 | 3.12.13 | 2026-03-03 | 2025-04-02 | 2028-10-31 | PEP-0693 |
| 3.11 | 2022-10-24 | 3.11.15 | 2026-03-03 | 2024-04-01 | 2027-10-31 | PEP-0664 |
| 3.10 | 2021-10-04 | 3.10.20 | 2026-03-03 | 2023-04-05 | 2026-10-31 | PEP-0619 |
| 3.9 | 2020-10-05 | 3.9.25 | 2025-10-31 | 2022-05-17 | 2025-10-31 | PEP-0596 |
| 3.8 | 2019-10-14 | 3.8.20 | 2024-09-06 | 2021-05-03 | 2024-10-07 | PEP-0569 |
| 3.7 | 2018-06-27 | 3.7.17 | 2023-06-05 | 2020-06-27 | 2023-06-27 | PEP-0537 |
| 3.6 | 2016-12-23 | 3.6.15 | 2021-09-03 | 2018-12-24 | 2021-12-23 | PEP-0494 |
| 3.5 | 2015-09-13 | 3.5.10 | 2020-09-05 | False | 2020-09-30 | PEP-0478 |
| 3.4 | 2014-03-16 | 3.4.10 | 2019-03-18 | False | 2019-03-18 | PEP-0429 |
| 3.3 | 2012-09-29 | 3.3.7 | 2017-09-19 | False | 2017-09-29 | PEP-0398 |
| 3.2 | 2011-02-20 | 3.2.6 | 2014-10-12 | False | 2016-02-20 | PEP-0392 |
| 2.7 | 2010-07-03 | 2.7.18 | 2020-04-19 | False | 2020-01-01 | PEP-0373 |
| 3.1 | 2009-06-27 | 3.1.5 | 2012-04-06 | False | 2012-04-09 | PEP-0375 |
| 3.0 | 2008-12-03 | 3.0.1 | 2009-02-12 | False | 2009-06-27 | PEP-0361 |
| 2.6 | 2008-10-01 | 2.6.9 | 2013-10-29 | False | 2013-10-29 | PEP-0361 |
Or in other formats such as reStructuredText:
$ eol python --rst
+-------+------------+---------+----------------+------------+------------+----------+
| cycle | release | latest | latest release | support | eol | pep |
+=======+============+=========+================+============+============+==========+
| 3.14 | 2025-10-07 | 3.14.6 | 2026-06-10 | 2027-10-01 | 2030-10-31 | PEP-0745 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.13 | 2024-10-07 | 3.13.14 | 2026-06-10 | 2026-10-01 | 2029-10-31 | PEP-0719 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.12 | 2023-10-02 | 3.12.13 | 2026-03-03 | 2025-04-02 | 2028-10-31 | PEP-0693 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.11 | 2022-10-24 | 3.11.15 | 2026-03-03 | 2024-04-01 | 2027-10-31 | PEP-0664 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.10 | 2021-10-04 | 3.10.20 | 2026-03-03 | 2023-04-05 | 2026-10-31 | PEP-0619 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.9 | 2020-10-05 | 3.9.25 | 2025-10-31 | 2022-05-17 | 2025-10-31 | PEP-0596 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.8 | 2019-10-14 | 3.8.20 | 2024-09-06 | 2021-05-03 | 2024-10-07 | PEP-0569 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.7 | 2018-06-27 | 3.7.17 | 2023-06-05 | 2020-06-27 | 2023-06-27 | PEP-0537 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.6 | 2016-12-23 | 3.6.15 | 2021-09-03 | 2018-12-24 | 2021-12-23 | PEP-0494 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.5 | 2015-09-13 | 3.5.10 | 2020-09-05 | False | 2020-09-30 | PEP-0478 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.4 | 2014-03-16 | 3.4.10 | 2019-03-18 | False | 2019-03-18 | PEP-0429 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.3 | 2012-09-29 | 3.3.7 | 2017-09-19 | False | 2017-09-29 | PEP-0398 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.2 | 2011-02-20 | 3.2.6 | 2014-10-12 | False | 2016-02-20 | PEP-0392 |
+-------+------------+---------+----------------+------------+------------+----------+
| 2.7 | 2010-07-03 | 2.7.18 | 2020-04-19 | False | 2020-01-01 | PEP-0373 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.1 | 2009-06-27 | 3.1.5 | 2012-04-06 | False | 2012-04-09 | PEP-0375 |
+-------+------------+---------+----------------+------------+------------+----------+
| 3.0 | 2008-12-03 | 3.0.1 | 2009-02-12 | False | 2009-06-27 | PEP-0361 |
+-------+------------+---------+----------------+------------+------------+----------+
| 2.6 | 2008-10-01 | 2.6.9 | 2013-10-29 | False | 2013-10-29 | PEP-0361 |
+-------+------------+---------+----------------+------------+------------+----------+
Example programmatic use
Return values are from the JSON responses documented in the API: https://endoflife.date/docs/api/
import norwegianblue
# Call the API
print(norwegianblue.norwegianblue())
print(norwegianblue.norwegianblue(product="ubuntu"))
print(norwegianblue.norwegianblue(format="json"))
Why "Norwegian Blue"?
Release files for norwegianblue 0.25.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| norwegianblue-0.25.0.tar.gz | 38.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| norwegianblue-0.25.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.2 kB
Release files / norwegianblue-0.25.0.tar.gz
| Download URL | norwegianblue-0.25.0.tar.gz |
|---|---|
| Size | 38.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c75a15d19da573f23294a91de7c22517cd70d9ae3f9bb2a20c19884b110e87e
|
|
BLAKE2b-256 checksum How to use checksums |
fda56ade9f250d183fb5304952bf04d2b0947b0505f6ebf3db0d9437c61a536d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.
Transparency logRelease files / norwegianblue-0.25.0-py3-none-any.whl
| Download URL | norwegianblue-0.25.0-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7eac1a325b115dc3132698e80ee033c5e776a3a7141269104ce4b85f3cb1b4ec
|
|
BLAKE2b-256 checksum How to use checksums |
95615ec54c9c59cdff6eac2829aeb289735b59ecf49921c91ad47bd40eadb5e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.
Transparency log