nvchecker(1)
β¨ Name β¨
okay so welcome to nvchecker(1) from the General Commands Manual β this is the manual page for nvchecker, aka New version checker for software releases. periodt π
nvchecker (short for new version checker) is for checking if a new version of some software has been released. main character energy for release-watching π
This is the version 2.0 branch. For the old version 1.x, please switch to the v1.x branch. Also chillinβ in the header are these URLs: https://github.com/lilydjwg/nvchecker/actions?query=workflow%3A%22run+tests%22 and https://badge.fury.io/py/nvchecker.
πΈ Dependency πΈ
okay bestie, hereβs the dependency checklist β no cap, check every line:
- Python 3.9+
- Python library:
structlog,platformdirs,tomli(on Python < 3.11) - One of these Python library combinations (ordered by preference):
tornado+pycurlaiohttphttpxwith http2 support (experimental; only latest version is supported)tornado
- All commands used in your software version configuration files
π Install and Run π
To install, run this and let it cook:
pip3 install nvchecker
To use the latest code, you can also clone this repository and run:
python3 setup.py install
To see available options:
nvchecker --help
Run with one or more software version files:
nvchecker -c config_file.toml
A simple config file may look like:
[nvchecker]
source = "github"
github = "lilydjwg/nvchecker"
[python-toml]
source = "pypi"
pypi = "toml"
You normally will like to specify some "version record files"; see below. iykyk π«Ά
π JSON logging π
With --logger=json or --logger=both, you can get a structured logging setup for programmatically consuming. You can use --json-log-fd=FD to specify the file descriptor to send logs to (take care to do line buffering). The logging level option (-l or --logging) doesn't take effect with this.
The JSON log is one JSON string per line. The following documented events and fields are stable, undocumented ones may change without notice.
event=updatedβ An update is detected. Fieldsname,revision,old_versionandversionare available.old_versionmay benullandrevisionmay be absent.event=up-to-dateβ There is no update. Fieldsnameandversionare available.event=no-resultβ No version is detected. There may be an error. Fieldnameis available.level=errorβ There is an error. Fieldsnameandexc_infomay be available to give further information.
π₯ Upgrade from 1.x version π₯
There are several backward-incompatible changes from the previous 1.x version. bestie, read these before you rawdog an upgrade π
- Version 2.x requires Python 3.7+ to run.
- The command syntax changes a bit. You need to use a
-cswitch to specify your software version configuration file (or use the default). - The configuration file format has been changed from ini to toml
https://toml.io/. You can use thenvchecker-ini2tomlscript to convert your old configuration files. However, comments and formatting will be lost, and some options may not be converted correctly. - Several options have been renamed.
max_concurrenttomax_concurrency, and all option names have their-be replaced with_. - All software configuration tables need a
sourceoption to specify which source is to be used rather than being figured out from option names in use. This enables additional source plugins to be discovered. - The version record files have been changed to use JSON format (the old format will be converted on writing).
- The
vcssource is removed. (It's available insidelilachttps://github.com/archlinuxcn/lilacat the moment.) Agitsource is provided. include_tags_patternandignored_tagsare removed. Use List Options instead.
ποΈ Version Record Files ποΈ
Version record files record which version of the software you know or is available. They are a simple JSON object mapping software names to known versions. literally just name-to-version vibes β¨
π«Ά The nvtake Command π«Ά
This command helps to manage version record files. It reads both old and new version record files, and a list of names given on the commandline. It then updates the versions of those names in the old version record file.
This helps when you have known (and processed) some of the updated software, but not all. You can tell nvchecker that via this command instead of editing the file by hand. slay, no manual JSON wrangling π
This command will help most if you specify where your version record files are in your config file. See below for how to use a config file.
π§ The nvcmp Command π§
This command compares the newver file with the oldver one and prints out any differences as updates, e.g.:
$ nvcmp -c sample_source.toml
Sparkle Test App None -> 2.0
test 0.0 -> 0.1
π Configuration Files π
The software version source files are in toml https://toml.io/ format. The key name is the name of the software. Following fields are used to tell nvchecker how to determine the current version of that software.
See sample_source.toml https://github.com/lilydjwg/nvchecker/blob/master/sample_config.toml for an example. yes, literally that file name and that URL, bestie π
βοΈ Configuration Table βοΈ
A special table named __config__ provides some configuration options.
Relative paths are relative to the source files, and ~ and environmental variables are expanded.
Currently supported options are:
oldverβ Specify a version record file containing the old version info.newverβ Specify a version record file to store the new version info.proxyβ The HTTP proxy to use. The format isproto://host:port, e.g.http://localhost:8087. Different backends have different level support for this, e.g. withpycurlyou can usesocks5h://host:portproxies.max_concurrencyβ Max number of concurrent jobs. Default:20.http_timeoutβ Time in seconds to wait for HTTP requests. Default:20.keyfileβ Specify a toml config file containing key (token) information. This file should contain akeystable, mapping key names to key values. See specific source for the key name(s) to use.
Sample keyfile.toml:
[keys]
# https://github.com/settings/tokens
# scope: repo -> public_repo
github = "ghp_<stripped>"
π Global Options π
The following options apply to every check source. You can use them in any item in your configuration file. global tea, apply everywhere π
prefixβ Strip the prefix string if the version string starts with it. Otherwise the version string is returned as-is.
If both prefix and from_pattern/to_pattern are used, prefix is applied first.
from_pattern,to_patternβ Both are Python-compatible regular expressions. Iffrom_patternis found in the version string, it will be replaced withto_pattern.
If from_pattern is not found, the version string remains unchanged and no error is emitted.
missing_okβ Suppress warnings and errors if a version checking module finds nothing. Not all sources support it.proxyβ The HTTP proxy to use. The format isproto://host:port, e.g.http://localhost:8087. Different backends have different level support for this, e.g. withpycurlyou can usesocks5h://host:portproxies.
Set it to "" (empty string) to override the global setting.
This only works when the source implementation uses the builtin HTTP client, and doesn't work with the aur source because it's batched (however the global proxy config still applies).
user_agentβ The user agent string to use for HTTP requests.triesβ Try specified times when a network error occurs. Default is1.
This only works when the source implementation uses the builtin HTTP client.
httptokenβ A personal authorization token used to fetch the url with theAuthorizationheader. The type of token depends on the authorization required.- For Bearer token set :
Bearer <Your_bearer_token> - For Basic token set :
Basic <Your_base64_encoded_token>
- For Bearer token set :
In the keyfile add httptoken_{name} token.
verify_certβ Whether to verify the HTTPS certificate or not. Default istrue.
π List Options π
The following options apply to sources that return a list. See individual source tables to determine whether they are supported. list-source besties, this is your section π
include_regexβ Only consider version strings that match the given regex. The whole string should match the regex. Be sure to use.*when you mean it!exclude_regexβ Don't consider version strings that match the given regex. The whole string should match the regex. Be sure to use.*when you mean it! This option has higher precedence thatinclude_regex; that is, if matched by this one, it's excluded even it's also matched byinclude_regex.sort_version_keyβ Sort the version string using this key function. Choose amongparse_version,vercmp,awesomeversionandportage. Default value isparse_version.parse_versionuses an old version ofpkg_resources.parse_version.vercmpusespyalpm.vercmp.awesomeversionuses awesomeversionhttps://github.com/ludeeus/awesomeversion.portageusesportage.versions.vercmp.ignoredβ Version strings that are explicitly ignored, separated by whitespace. This can be useful to avoid some known mis-named versions, so newer ones won't be "overridden" by the old broken ones.
π Search in a Webpage π
source = "regex"
Search through a specific webpage for the version string. This type of version finding has these fields:
urlβ The URL of the webpage to fetch.encodingβ (Optional) The character encoding of the webpage, iflatin1is not appropriate.regexβ A regular expression used to find the version string.
It can have zero or one capture group. The capture group or the whole match is the version string.
When multiple version strings are found, the maximum of those is chosen.
post_dataβ (Optional) When present, a POST request (instead of a GET) will be used. The value should be a string containing the full body of the request. The encoding of the string can be specified using thepost_data_typeoption.post_data_typeβ (Optional) Specifies theContent-Typeof the request body (post_data). By default, this isapplication/x-www-form-urlencoded.
This source supports List Options.
π¦ Search in an HTTP header π¦
source = "httpheader"
Send an HTTP request and search through a specific header.
urlβ The URL of the HTTP request.headerβ (Optional) The header to look at. Default isLocation. Another useful header isContent-Disposition.
The regex source is literally right here, no cap:
regexβ the regular expression used to find the version string. It can have zero or one capture group. The capture group or the whole match is the version string. When multiple version strings are found, the maximum of those is chosen. πmethod(Optional) β the HTTP method to use. Default isHEAD.follow_redirects(Optional) β whether to follow3xxHTTP redirects. Default isfalse. If you are looking at aLocationheader, you shouldn't change this.
π Search with an HTML Parser
source = "htmlparser"
Send an HTTP request and search through the body a specific xpath. It's giving "find the version in the HTML" energy β¨
urlβ the URL of the HTTP request.xpathβ an xpath expression used to find the version string.is_xmlβ set totrueto use an XML parser instead of an HTML one.post_data(Optional) β when present, aPOSTrequest (instead of aGET) will be used. The value should be a string containing the full body of the request. The encoding of the string can be specified using thepost_data_typeoption.post_data_type(Optional) β specifies theContent-Typeof the request body (post_data). By default, this isapplication/x-www-form-urlencoded.
This source can parse an RSS feed like this:
[ProxmoxVE]
source = "htmlparser"
url = "https://my.proxmox.com/en/announcements/tag/proxmox-ve/rss"
xpath = "//item/title"
is_xml = true
from_pattern = 'Proxmox VE ([\d.]+) released!'
to_pattern = '\1'
Note: an additional dependency"lxml"is required. You can usepip install 'nvchecker[htmlparser]'.
π§ Search with an JSON Parser (jq)
source = "jq"
Send an HTTP request and search through the body with a specific jq filter. JSON girlies stay winning π«Ά
urlβ the URL of the HTTP request.filterβ an jq filter used to find the version string.post_data(Optional) β when present, aPOSTrequest (instead of aGET) will be used. The value should be a string containing the full body of the request. The encoding of the string can be specified using thepost_data_typeoption.post_data_type(Optional) β specifies theContent-Typeof the request body (post_data). By default, this isapplication/json.
This source supports List Options.
Note: an additional dependency "jq" is required.
π Find with a Command
source = "cmd"
Use a shell command line to get the version. The output is striped first (yes, that's the word in the manpage π), so trailing newlines do not bother.
cmdβ the command line to use. This will run with the system's standard shell (i.e./bin/sh).
π¦ Check AUR
source = "aur"
Check Arch User Repository (https://aur.archlinux.org/) for updates. Per-item proxy setting doesn't work for this because several items will be batched into one request. Batching is iconic until it ruins your proxy vibe π
aurβ the package name in AUR. If empty, use the name of software (the table name).strip_releaseβ strip the release part.use_last_modifiedβ append last modified time to the version.
π Check GitHub
source = "github"
Check GitHub (https://github.com/) for updates. The version returned is in date format %Y%m%d.%H%M%S, e.g. 20130701.012212, unless use_latest_release, use_max_tag or use_max_release is used. See below. π
githubβ the github repository, with author, e.g.lilydjwg/nvchecker.branchβ which branch to track? Default: the repository's default.pathβ only commits containing this file path will be returned.hostβ hostname for self-hosted GitHub instance.use_latest_releaseβ set this totrueto check for the latest release on GitHub.
GitHub releases are not the same as git tags. You'll see big version names and descriptions in the release page for such releases, e.g. zfsonlinux/zfs's releases (https://github.com/zfsonlinux/zfs/releases), and those small ones like nvchecker's (https://github.com/lilydjwg/nvchecker/releases) are only git tags that should use use_max_tag below.
Will return the release's tag name instead of date. (For historical reasons it doesn't return the release name. See below to change.)
use_max_releaseβ set this totrueto check for the max release on GitHub. This option returns the largest one sorted by thesort_version_keyoption. Will return the tag name instead of date.use_release_nameβ whenuse_latest_releaseoruse_max_releaseistrue, setting this totruewill cause nvchecker to return the release name instead of the tag name.include_prereleasesβ whenuse_latest_releaseoruse_max_releaseistrue, set this totrueto take prereleases into account.
This returns the release names (not the tag names).
This requires a token because it's using the v4 GraphQL API.
use_latest_tagβ set this totrueto check for the latest tag on GitHub.
This requires a token because it's using the v4 GraphQL API.
queryβ whenuse_latest_tagistrue, this sets a query for the tag. The exact matching method is not documented by GitHub.use_max_tagβ set this totrueto check for the max tag on GitHub. Unlikeuse_max_release, this option includes both annotated tags and lightweight ones, and return the largest one sorted by thesort_version_keyoption. Will return the tag name instead of date.tokenβ a personal authorization token used to call the API.
An authorization token may be needed in order to use use_latest_tag, include_prereleases or to request more frequently than anonymously.
To set an authorization token, you can set:
- the
tokenoption - an entry in the
keyfilefor the host (e.g.github.com) - an entry in your
netrcfile for the host
This source supports List Options when use_max_tag or use_max_release is set.
π RichResult metadata
When available from the existing GitHub API responses, this source populates the following optional RichResult fields. No additional API requests are issued solely to retrieve timestamp information.
Here's the field tea, table-style but as a list because we're cute like that:
default commit/pathβcreation_time:β’;revision_creation_time:commit timestampuse_latest_releaseβcreation_time:release publish time;revision_creation_time:β’use_max_releaseβcreation_time:release publish time;revision_creation_time:β’use_latest_release + include_prereleasesβcreation_time:release publish time;revision_creation_time:commit timestampuse_latest_tagβcreation_time:β’;revision_creation_time:tag creation time (annotated tags) or commit timestamp (lightweight tags)use_max_tagβcreation_time:β’;revision_creation_time:β’
π΅ Check Gitea
source = "gitea"
Check Gitea (https://gitea.com/) for updates. The version returned is in date format %Y%m%d, e.g. 20130701, unless use_max_tag is used. See below. πΈ
giteaβ the gitea repository, with author, e.g.gitea/tea.branchβ which branch to track? Default: the repository's default.use_max_tagβ set this totrueto check for the max tag on Gitea. Will return the biggest one sorted by oldpkg_resources.parse_version. Will return the tag name instead of date.use_latest_releaseβ set this totrueto check for the latest release name on gitea.
Gitea releases are not the same as git tags. You'll see big version names and descriptions in the release page for such releases, e.g. ciberandy/qiv's releases (https://codeberg.org/ciberandy/qiv/releases).
hostβ hostname for self-hosted Gitea instance.tokenβ Gitea authorization token used to call the API.
To set an authorization token, you can set:
- the
tokenoption - an entry in the
keyfilefor the host (e.g.gitea.com) - an entry in your
netrcfile for the host
This source supports List Options when use_max_tag is set.
π¦ Check Gogs / Forgejo / Codeberg
Please use the above "gitea" source. Gitea is a fork of Gogs (https://gogs.io/). Forgejo (https://forgejo.org/) is a fork of Gitea. Codeberg is a code hosting provider that uses Forgejo. They share the same API endpoints nvchecker uses.
Alternatively, you can try the generic "git" source.
πͺ£ Check BitBucket
source = "bitbucket"
π» Check BitBucket
source = "bitbucket"
Peek at BitBucket (bitbucket.org) for updates. The version it hands back is in date format %Y%m%d, like 20130701, unless use_max_tag is on. Details below, bestie π«Ά
bitbucketβ the bitbucket repository, with author, e.g.lilydjwg/dotvim.branchβ which branch are we tracking? Default: the repository's default.use_max_tagβ set this totrueto check for the max tag on BitBucket. Returns the biggest one sorted by the oldpkg_resources.parse_version. Returns the tag name instead of the date.use_sorted_tagsβ iftrue, tags are queried and sorted according to thequeryandsortkeys. Returns the tag name instead of the date.queryβ a query string used to filter tags whenuse_sorted_tagsis set (examples over athttps://developer.atlassian.com/cloud/bitbucket/rest/intro/#querying). Ngl the string does not need to be escaped β¨sortβ a field used to sort the tags whenuse_sorted_tagsis set (examples athttps://developer.atlassian.com/cloud/bitbucket/rest/intro/#filtering). Defaults to-target.date, which sorts tags in descending order by date.max_pageβ how many pages do we search for the max tag? Default is3. This works whenuse_max_tagis set.
This source supports List Options when use_max_tag or use_sorted_tags is set π₯
π¦ Check GitLab
source = "gitlab"
Peek at GitLab (gitlab.com) for updates. The version returned is in date format %Y%m%d, e.g. 20130701, unless use_max_tag is used. See below π
gitlabβ the gitlab repository, with author, e.g.Deepin/deepin-music.branchβ which branch to track?use_max_tagβ set this totrueto check for the max tag on GitLab. Returns the biggest one sorted by the oldpkg_resources.parse_version. Returns the tag name instead of the date.hostβ hostname for a self-hosted GitLab instance.tokenβ GitLab authorization token used to call the API.
To set an authorization token, you can set:
- the
tokenoption - an entry in the keyfile for the host (e.g.
gitlab.com) - an entry in your
netrcfile for the host
This source supports List Options when use_max_tag is set β¨
π RichResult metadata
When it's available from the existing GitLab API responses, this source populates the following optional RichResult fields. No additional API requests are issued solely to retrieve timestamp information π
- Mode
default commitβcreation_time: (not set) Β·revision_creation_time: commit timestamp - Mode
use_max_tagβcreation_time: tag creation time Β·revision_creation_time: commit timestamp
π Check PyPI
source = "pypi"
Peek at PyPI (pypi.python.org) for updates. Yanked releases are ignored, periodt π
pypiβ the name used on PyPI, e.g.PySide.use_pre_releaseβ whether to accept pre release. Default isfalse.
This source supports List Options πΈ
RichResult metadata:
- Mode
all versionsβcreation_time: earliest available file upload time Β·revision_creation_time: (not set)
π Note: an additional dependencypackagingis required. You can usepip install 'nvchecker[pypi]'.
π Check RubyGems
source = "gems"
Peek at RubyGems (rubygems.org) for updates.
gemsβ the name used on RubyGems, e.g.sass.
This source supports List Options β
π¦ Check NPM Registry
source = "npm"
Peek at the NPM Registry (registry.npmjs.org) for updates.
npmβ the name used on NPM Registry, e.g.coffee-script.
To configure which registry to query, a source plugin option is available. You can specify it like this:
[__config__.source.npm]
registry = "https://registry.npm.taobao.org"
π Check Hackage
source = "hackage"
Peek at Hackage (hackage.haskell.org) for updates.
hackageβ the name used on Hackage, e.g.pandoc.
β Check Maven
source = "maven"
Peek at a Maven repository (maven.apache.org) for updates.
repoβ URL of the repository to check (defaults tohttps://repo1.maven.org/maven2).groupβ group identifier for the coordinates.artifactβ artifact identifier for the coordinates.
πͺ Check CPAN
source = "cpan"
Peek at MetaCPAN (metacpan.org) for updates.
cpanβ the name used on CPAN, e.g.YAML.
π Check CRAN
source = "cran"
Peek at CRAN (cran.r-project.org/web/packages/) for updates.
cranβ the name used on CRAN, e.g.xml2.
πΌ Check Packagist
source = "packagist"
Peek at Packagist (packagist.org) for updates.
packagistβ the name used on Packagist, e.g.monolog/monolog.
π¦ Check crates.io
source = "cratesio"
Peek at crates.io (crates.io) for updates. Yanked releases are ignored, no cap π
cratesioβ the crate name on crates.io, e.g.tokio.use_pre_releaseβ whether to accept pre release. Default isfalse.
This source supports List Options π¦
πΉ Check Local Pacman Database
source = "pacman"
This one's for when you run nvchecker on an Arch Linux system and the program always keeps up with a package in your configured repositories for Pacman (wiki.archlinux.org/title/Pacman).
pacmanβ the package name to reference to.strip_releaseβ strip the release part.
ποΈ Check Arch Linux official packages
source = "archpkg"
This lets you track the update of Arch Linux official packages (www.archlinux.org/packages/), without needing pacman and an updated local Pacman databases. Iconic honestly π
archpkgβ name of the Arch Linux package.strip_releaseβ strip the release part, only return the part before-.providedβ instead of the package version, return the version this package provides. Its value is what the package provides, andstrip_releasetakes effect too. This is best used with libraries.
π Check Debian Linux official packages
source = "debianpkg"
This lets you track the update of Debian Linux official packages (packages.debian.org), without needing apt and an updated local APT database. Slay π«Ά
debianpkgβ name of the Debian Linux source package.suiteβ name of the Debian release (jessie,wheezy, etc, defaults tosid)strip_releaseβ strip the release part.
π§‘ Check Ubuntu Linux official packages
source = "ubuntupkg"
This lets you track the update of Ubuntu Linux official packages (packages.ubuntu.com), without needing apt and an updated local APT database.
ubuntupkgβ name of the Ubuntu Linux source package.suiteβ name of the Ubuntu release (xenial,zesty, etc, defaults toNone, which means no limit on suite)strip_releaseβ strip the release part.
π Check Repology
source = "repology"
This lets you track updates from Repology (repology.org).
repologyβ name of the project to check.repoβ check the version in this repo. This field is required.subrepoβ check the version in this subrepo. This field is optional. When omitted, all subrepos are queried.
This source supports List Options β¨
π§ Check Anitya
source = "anitya"
This lets you track updates from Anitya (release-monitoring.org).
anityaβdistro/package, where distro can be a lot of things like"fedora","arch linux","gentoo", etc. package is the package name of the chosen distribution.anitya_idβ the identifier of the project/package in anitya.
π‘ Note that eitheranityaoranitya_idneeds to be specified, andanitya_idis preferred when both are specified.
π€ Check Android SDK
source = "android_sdk"
This lets you track updates of Android SDK packages listed in sdkmanager --list.
android_sdkβ the package path prefix. This value is matched against thepathattribute in all<remotePackage>nodes in an SDK manifest XML. The first match is used for version comparisons.repoβ should be one ofaddonorpackage. Packages inaddon2-1.xmluseaddonand packages inrepository2-1.xmlusepackage.channelβ choose the target channel from one ofstable,beta,devorcanary. This option also accepts a comma-separated list to pick from multiple channels. For example, the latest unstable version is picked withbeta,dev,canary. The default isstable.host_osβ choose the target OS for the tracked package from one oflinux,macosx,windows. The default islinux. For OS-independent packages (e.g., Java JARs), this field is ignored.
This source supports List Options π
β¨ Check Sparkle framework
source = "sparkle"
This lets you track updates of macOS applications which use the Sparkle framework (sparkle-project.org). Obsessed π
sparkleβ the url of the sparkle appcast.release_notes_languageβ the language of release notes to return when localized release notes are available (defaults toenfor English; the unlocalized release notes are used as a fallback)
π Check Pagure
source = "pagure"
This lets you check updates from Pagure (pagure.io).
pagureβ the project name, optionally with a namespace.hostβ the hostname of the alternative instance, likesrc.fedoraproject.org. π«Ά
This source returns tags and supports List Options, bestie. β¨
π Check APT repository
source = "apt"
This one lets you track updates from literally any APT repository out there β no apt needed, no fresh local APT database needed. It's giving self-sufficient queen. π
pkgβ name of the APT binary package.srcpkgβ name of the APT source package.mirrorβ URL of the repository.suiteβ name of the APT repository release (jessie,wheezy, etc.)repoβ name of the APT repository (main,contrib, etc, defaults tomain)archβ architecture of the repository (i386,amd64, etc, defaults toamd64)strip_releaseβ strip the release part.
Heads up bestie: eitherpkgorsrcpkgneeds to be specified (but not both), otherwise the item name gets used aspkg. No cap. π
π Check RPM repository
source = "rpmrepo"
This one checks the latest package versions in an arbitrary RPM repository in repomd format β the kind used by package managers like dnf (Fedora, RHEL, AlmaLinux etc.) or zypper (openSUSE) β and you don't need any native RPM tools for it. Iconic behaviour honestly. π
pkgβ name of the RPM package (you can also userpmrepolike with other sources, butpkgis preferred for clarity π)repoβ URL of the repository (required,repodata/repomd.xmlshould be there)archβ architecture of the RPM package (binary,src,any,x86_64,aarch64, etc, defaults tobinary)
This source supports List Options. β¨
Note: the additional dependencylxmlis required. On Python versions earlier than3.14,zstandardis required as well. You can install them withpip install 'nvchecker[rpmrepo]'. π
π¦ Check Git repository
source = "git"
This lets you check tags or branch commits of an arbitrary git repository β also super useful for situations like a github project having way too many tags. π
gitβ URL of the Git repository.use_commitβ return a commit hash instead of tags.branchβ whenuse_commitis true, return the commit on the specified branch instead of the default one.
When this source returns tags (i.e. use_commit is not true) it supports List Options. πΈ
π§ Check Git repository without git CLI using pygit2
source = "git_pygit2"
Basically the git source's cousin β same vibe, but it uses pygit2/libgit2 instead of invoking the git executable. Perfect for environments where Python packages can be installed but external binaries cannot be executed. Main character energy for sandboxed setups. π₯
gitβ URL of the Git repository.usernameβ username to use for HTTP authentication.password_keyβ key name used to retrieve the password or access token from the configured keyfile.use_commitβ return a commit hash instead of tags.branchβ whenuse_commitis true, return the commit on the specified branch instead of the default one.
Example for a private GitHub repository:
source = "git_pygit2"
git = "https://github.com/example/private-repo.git"
username = "x-access-token"
password_key = "github"
When this source returns tags (use_commit is not true) it supports List Options. β
Note: an additional dependency pygit2 is required. π«Ά
π Check Git repository without git CLI using Dulwich
π okay so real talk β the original page literally has a formatting oopsie here. The heading underline is too short, and the build coughs up this warning right in the middle of the text. I'm keeping it verbatim because I refuse to lie to you: System Message: WARNING/2 (usage.rst:, line 1040) Title underline too short. Check Git repository without git CLI using Dulwich ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
source = "git_dulwich"
This is similar to the git source, but it uses Dulwich instead of invoking the git executable. Again: useful in environments where Python packages can be installed but external binaries cannot be executed. π
This source does not support proxy environment variables currently. Slight L, but we move. π
gitβ URL of the Git repository.usernameβ username to use for HTTP authentication.password_keyβ key name used to retrieve the password or access token from the configured keyfile.use_commitβ return a commit hash instead of tags.branchβ whenuse_commitis true, return the commit on the specified branch instead of the default one.
Example for a private GitHub repository:
source = "git_dulwich"
git = "https://github.com/example/private-repo.git"
username = "x-access-token"
password_key = "github"
When this source returns tags (use_commit is not true) it supports List Options. π
Note: an additional dependency dulwich is required. π¦
π Check Mercurial repository
source = "mercurial"
This enables you to check tags of an arbitrary mercurial (hg) repository. Old school but still slaying. π
mercurialβ URL of the Mercurial repository.
This source returns tags and supports List Options. β¨
π³ Check container registry
source = "container"
This lets you check tags of images on a container registry like Docker. Obsessed honestly. π
containerβ the path (and tag) for the container image. For official Docker images, use namespacelibrary/(e.g.library/python).
If no tag is given, it checks the latest available tag (sort by tag name), otherwise, it checks the tag's update time. β°
registryβ the container registry host. Default:docker.io
registry and container are the host and the path used in the pull command. Note that the docker command allows omitting some parts of the container name while this plugin requires the full name. If the host part is omitted, use docker.io, and if there is no slash in the path, prepend library/ to the path. Here are some examples, bestie β I turned the big table into a list so it doesn't explode in your terminal: π
docker pull quay.io/prometheus/node-exporterβregistry=quay.io,container=prometheus/node-exporterdocker pull quay.io/prometheus/node-exporter:masterβregistry=quay.io,container=prometheus/node-exporter:masterdocker pull openeuler/openeulerβregistry=docker.io,container=openeuler/openeulerdocker pull openeuler/openeuler:20.03-ltsβregistry=docker.io,container=openeuler/openeuler:20.03-ltsdocker pull pythonβregistry=docker.io,container=library/pythondocker pull python:3.11βregistry=docker.io,container=library/python:3.11
βββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββ΄ββββββββββββββββββββββββββββββββββ
If no tag is given, this source returns tags and supports List Options. π
β¨ Check ALPM database β¨
source = "alpm"
Okay bestie, this one checks for package updates in a local ALPM database. Very Arch of you. π«Ά
alpmβ the name of the package.repoβ the name of the package repository the package lives in. If you don't give it, nvchecker will use thereposvalue instead, see right below.reposβ an array of possible repositories the package might be chillin' in, and nvchecker will use the first repository that actually contains the package. If you don't provide it,core,extraandmultilibget used, in that order. default behavior, iconic.dbpathβ path to the ALPM database directory. Default is/var/lib/pacman. Heads up though: you need to update the database yourself. nvchecker is not your personal pacman, bestie.strip_releaseβ strips the release part, so it only returns the part before-.providedβ instead of the package version, returns the version this package provides. Its value is what the package provides, andstrip_releasetakes effect here too. Best used with libraries. π§
Note: an additional dependency pyalpm is required. No cap, you gotta install it. π
β¨ Check ALPM files database β¨
source = "alpmfiles"
This searches package files in a local ALPM files database, and the package does not need to be installed. Lowkey so useful for checking shared library versions when a package doesn't list them in its provides. πΈ
pkgnameβ name of the package.filenameβ regular expression for the file path. If it contains one matching group, that group is returned. Otherwise the whole file path gets returned. Paths do not have an initial slash, jsyk. For example,usr/lib/libuv\.so\.([^.]+)matches the major shared library version of libuv. π₯repoβ name of the package repository the package resides in. If you don't provide it, it searches all repositories.strip_dirβ strips the directory from the path before matching. Defaults tofalse.dbpathβ path to the ALPM database directory. Default:/var/lib/pacman. And again: you need to update the database yourself, withpacman -Fy.
This source runs the pacman -Flq ... command. Wanna configure how many pacman instances run concurrently? Say less:
[__config__.source.alpmfiles]
concurrency = 2
By default it's 2. And listen β pacman -Flq ... uses a lot of memory, so be careful. Like, genuinely careful. π
β¨ Check Open Vsx β¨
source = "openvsx"
Checks https://open-vsx.org/ for updates. π
openvsxβ the extension's Unique Identifier onopen-vsx.org, e.g.ritwickdey.LiveServer.
β¨ Check Visual Studio Code Marketplace β¨
source = "vsmarketplace"
Checks https://marketplace.visualstudio.com/vscode/ for updates. π¦
vsmarketplaceβ the extension's Unique Identifier onmarketplace.visualstudio.com/vscode, e.g.ritwickdey.LiveServer.
β¨ Check Go packages and modules β¨
source = "go"
Checks https://pkg.go.dev/ for updates. Go off. πββοΈπ¨
goβ the name of the Go package or module, e.g.github.com/caddyserver/caddy/v2/cmd.
β¨ Check opam repository β¨
source = "opam"
This one lets you check the latest package versions in an arbitrary opam repository (https://opam.ocaml.org/doc/Manual.html#Repositories) without needing the opam command line tool. Obsessed with the convenience honestly. π
pkgβ name of the opam package.repoβ URL of the repository (optional, the defaulthttps://opam.ocaml.orgrepository is used if you don't specify one).
This source supports List Options. β¨
β¨ Check Snapcraft β¨
source = "snapcraft"
This source lets you check the latest package versions in the Snapcraft (https://snapcraft.io). π
snapβ name of the snap package.channelβ name of the channel.
β¨ Combine others' results β¨
source = "combiner"
This source can combine results from other entries. Main character energy: it doesn't fetch anything itself, it just vibes off everyone else. π
fromβ a list of entry names to wait results for.formatβ a format string to combine the results into the final string.
Example, because examples ate:
[entry-1]
source = "cmd"
cmd = "echo 1"
[entry-2]
source = "cmd"
cmd = "echo 2"
[entry-3]
source = "combiner"
from = ["entry-1", "entry-2"]
format = "$1-$2"
β¨ Manually updating β¨
source = "manual"
This lets you manually specify the version β maybe because you wanna approve each release before it gets to the script. Very "I'm the boss here" of you. π
manualβ the version string.
β¨ Extending β¨
It's possible to extend the supported sources by writing plugins. See plugin for documentation. Go build something, bestie, I believe in you. π
okay that's the whole page, you made it to the end, I'm so proud π«Ά this was nvchecker(1), version 2.22, dated 2026-08-15 β now go check some versions, slay, periodt. πβ¨
π¦ where this page comes from
- arch rolling: nvchecker 2.22-1 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms