newertag
Check whether pinned container images have a newer stable tag.
newertag looks at the tag you are already using — from a running container
today, or from an image you pass in later — and asks the registry for newer
stable releases in the same version family.
It prefers false negatives over false positives. Pre-release tags (latest,
nightly, rc, …) are ignored. Calendar versions and ordinary semantic
versions are not mixed. Packaging suffixes such as linuxserver -ls43 stay
in-family.
Requirements
There are no Python dependencies at runtime.
Install
Install the published package from PyPI with pipx:
pipx install newertag
Or with pip:
pip install newertag
From this repository, in editable mode while developing:
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Usage
Scan every running container:
newertag
CONTAINER IMAGE STATUS
qbittorrent linuxserver/qbittorrent:5.2.3 up to date
home-assistant homeassistant/home-assistant:2026.8.1 2026.9.0 available (minor)
newertag --verbose
newertag --help
Check one image. Without a tag, list the latest stable tags:
newertag jc21/nginx-proxy-manager
IMAGE jc21/nginx-proxy-manager
Latest stable tags:
2.15.1
2.14.6
2.14.5
2.14.3
2.14.2
With a tag, report whether a newer stable release exists:
newertag jc21/nginx-proxy-manager:2.12.3
IMAGE jc21/nginx-proxy-manager:2.12.3
STATUS 2.15.1 available (minor)
The same entry point also works as a module:
python -m newertag
Exit codes
| Code | Meaning |
|---|---|
| 0 | No updates available |
| 1 | Updates available |
| 2 | Error |
Development
pip install -e ".[dev]"
pytest
GitHub Actions runs the same suite on Python 3.9–3.13 for pushes to main /
master and for pull requests.
Releasing
Publishing is tag-driven. Once the version you want is on main / master,
push a matching version tag (0.2.1 or v0.2.1). That runs
.github/workflows/publish.yml, which checks that the tag matches the package
version, runs the tests, builds an sdist and wheel, and uploads them to
PyPI with
trusted publishing. No API token
is stored in the repository.
The package version is currently 0.2.1. After this commit is on the default
branch, the next release is either of:
git tag 0.2.1
git push origin 0.2.1
git tag v0.2.1
git push origin v0.2.1
For later releases, bump version in pyproject.toml and __version__ in
src/newertag/__init__.py, merge that to the default branch, then tag
X.Y.Z or vX.Y.Z and push the tag. A tag that does not match those versions
fails before upload.
First-time PyPI setup
Do this once before pushing the first tag:
-
Create a GitHub Actions environment named
pypi(Settings → Environments). Requiring a reviewer on that environment is recommended so a tag cannot publish without approval. -
Register a pending trusted publisher at https://pypi.org/manage/account/publishing/:
Field Value PyPI project name newertagOwner johe37Repository newertagWorkflow name publish.ymlEnvironment name pypi
The first successful tag creates the PyPI project. After that, install with
pipx install newertag or pip install newertag.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file newertag-0.2.1.tar.gz.
File metadata
- Download URL: newertag-0.2.1.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb08bbe503e77517b6e817618d6bb5db668ebf54d8f691b7ff2605b742822eb8
|
|
| MD5 |
86ebe5eb43415aa418ddb7a4f2e81658
|
|
| BLAKE2b-256 |
6abc1b7eac13e7656d4b6e8ed9e2a722555b38ace5ee56fd1f4d04a9a9f62f85
|
Provenance
The following attestation bundles were made for newertag-0.2.1.tar.gz:
Publisher:
publish.yml on johe37/newertag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
newertag-0.2.1.tar.gz -
Subject digest:
bb08bbe503e77517b6e817618d6bb5db668ebf54d8f691b7ff2605b742822eb8 - Sigstore transparency entry: 2469313536
- Sigstore integration time:
-
Permalink:
johe37/newertag@27ac851f83788cee4783a68f81cd006714f65dbb -
Branch / Tag:
refs/tags/0.2.1 - Owner: https://github.com/johe37
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27ac851f83788cee4783a68f81cd006714f65dbb -
Trigger Event:
push
-
Statement type:
File details
Details for the file newertag-0.2.1-py3-none-any.whl.
File metadata
- Download URL: newertag-0.2.1-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
970011e0816f5ee1f232af14424d25ec8dc42896e07f54aa3e9f5d45151c42c3
|
|
| MD5 |
4bcbd6965136c09c7298df78667f556a
|
|
| BLAKE2b-256 |
fd4117feffc1ccacd56f1ad885a7e57540d9ab5b9d619be4941900df92f91df7
|
Provenance
The following attestation bundles were made for newertag-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on johe37/newertag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
newertag-0.2.1-py3-none-any.whl -
Subject digest:
970011e0816f5ee1f232af14424d25ec8dc42896e07f54aa3e9f5d45151c42c3 - Sigstore transparency entry: 2469313561
- Sigstore integration time:
-
Permalink:
johe37/newertag@27ac851f83788cee4783a68f81cd006714f65dbb -
Branch / Tag:
refs/tags/0.2.1 - Owner: https://github.com/johe37
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27ac851f83788cee4783a68f81cd006714f65dbb -
Trigger Event:
push
-
Statement type: