Compare commits

..

11 Commits
v0.7.6 ... main

Author SHA1 Message Date
Alaa Ali
37052d1377 Clarify -b and -p option interaction (#277) 2026-04-05 09:18:27 +02:00
Robin Ivehult
2c04644b09 Bugfix and tag support in Apprise template + extras. (#276)
* added tag-support to Apprise API-call

* tried to clarify case on notification settings
2026-03-30 08:26:16 +02:00
christian-haider
ca787d7754 Add additional URLs to urls.list (#272) 2026-03-12 14:03:45 +01:00
mag37
3eb8bb21db versionbump 2026-03-12 12:17:15 +01:00
Philip Baylas
32f3dfbb2c When -s flag is used, start stopped containers so they are updated and then stop them again (#269)
* Start stopped containers (when -s is used) so that updates apply
* Automatically re-stop stopped containers after updating
2026-03-11 16:50:38 +01:00
jHund
d46b38ddad Support for notifications via XMPP (#268)
* Add files via upload

Added support for XMPP using go-sendxmpp.

* Add files via upload

Added support for XMPP using go-sendxmpp.
2026-03-05 19:27:54 +01:00
mag37
9245718eda Added application name to 'dependency missing' message 2026-03-01 18:46:58 +01:00
mag37
4505cbac63 Add auto-prune to be possible without any other interactions. 2026-03-01 18:45:25 +01:00
mnijman
5bf81ce26e ProposedFix down+up instead of stop+up (#266)
Co-authored-by: Marc Nijman <git@marcnijman.nl>
2026-03-01 17:42:49 +01:00
Max
5cef6c20ff Allow ranges to be used for selection (#267)
* Allow ranges to be used for selection.

* String consistency

* Yet another change of the selection dialog, as suggested.

---------

Co-authored-by: Max <>
2026-03-01 17:33:54 +01:00
singularity0821
7785e869d3 Add additional URLs to urls.list (#263)
* Sanitize message for Matrix notifications

* Use variable for jq and increment version of Matrix script

* Add additional URLs to urls.list

---------

Co-authored-by: martin <martin@meissnitzer.dev>
2026-02-06 18:07:58 +01:00
6 changed files with 203 additions and 39 deletions

View File

@@ -23,6 +23,14 @@ ___
## Changelog
- **v0.7.7**:
- New:
- More URLs to urls.list.
- Allowing ranges to be used when selecting containers to update.
- Added XMPP notification template.
- Fixes:
- Changed "restart-stack" behavior to down+up instead of stop+up.
- `-s` option now recreates stopped containers and then stops them again.
- **v0.7.6**:
- New:
- Added Bark notify-template.
@@ -59,7 +67,7 @@ Example: dockcheck.sh -y -x 10 -d 10 -e nextcloud,heimdall
Options:
-a|y Automatic updates, without interaction.
-b N Enable image backups and sets number of days to keep from pruning.
-b N Enable image backups and sets number of days to keep from pruning. Ignores -p auto-prune.
-B List currently backed up images, then exit.
-c D Exports metrics as prom file for the prometheus node_exporter. Provide the collector textfile directory.
-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower.
@@ -73,10 +81,10 @@ Options:
-m Monochrome mode, no printf colour codes and hides progress bar.
-M Prints custom releasenote urls as markdown (requires template support).
-n No updates, only checking availability.
-p Auto-Prune dangling images after update.
-p Auto-Prune dangling images after update. Ignored when -b is used.
-r Allow checking/updating images created by `docker run`, containers need to be recreated manually.
-R Skip container recreation after pulling images.
-s Include stopped containers in the check. (Logic: docker ps -a).
-s Include stopped containers, returns to stopped state after recreation.
-t N Set a timeout (in seconds) per container for registry checkups, 10 is default.
-u Allow automatic self updates - caution as this will pull new code and autorun it.
-v Prints current version.
@@ -99,7 +107,7 @@ Containers with updates available:
03) whoogle-search
Choose what containers to update:
Enter number(s) separated by comma, [a] for all - [q] to quit: 1,2
Enter number(s) or range(s) separated by comma (e.g. 1-2,4-5,09), [a] for all - [q] to quit: 1-2
```
Then it proceeds to run `pull` and `up -d` on every container with updates.
@@ -175,7 +183,8 @@ you wish to enable, but there is no harm in having all of them present.
│ ├── notify_slack.sh
│ ├── notify_smtp.sh
│ ├── notify_telegram.sh
── notify_v2.sh
── notify_v2.sh
│ └── notify_xmpp.sh
├── dockcheck.config
├── dockcheck.sh
└── urls.list # optional
@@ -219,6 +228,7 @@ The actual snooze duration will be 60 seconds less than `SNOOZE_SECONDS` to acco
- [Slack](https://api.slack.com/tutorials/tracks/posting-messages-with-curl) - Slack curl api
- SMTP Email with [mSMTP](https://wiki.debian.org/msmtp) (or deprecated alternative [sSMTP](https://wiki.debian.org/sSMTP))
- [Telegram](https://telegram.org/) - Telegram chat API.
- [XMPP](https://xmpp.org/getting-started/) - XMPP chat notifications.
Further additions are welcome - suggestions or PRs!
<sub><sup>Initiated and first contributed by [yoyoma2](https://github.com/yoyoma2).</sup></sub>
@@ -228,19 +238,19 @@ Further additions are welcome - suggestions or PRs!
All required environment variables for each notification channel are provided in the default.config file as comments and must be uncommented and modified for your requirements.
For advanced users, additional functionality is available via custom configurations and environment variables.
Use cases - all configured in `dockcheck.config`:
(replace `<channel>` with the upper case name of the of the channel as listed in
(replace `<CHANNEL>` with the upper case name of the of the channel as listed in
`NOTIFY_CHANNELS` variable, eg `TELEGRAM_SKIPSNOOZE`)
- To bypass the snooze feature, even when enabled, add the variable `<channel>_SKIPSNOOZE` and set it to `true`.
- To configure the channel to only send container update notifications, add the variable `<channel>_CONTAINERSONLY` and set it to `true`.
- To send notifications even when there are no updates available, add the variable `<channel>_ALLOWEMPTY` and set it to `true`.
- To use another notification output format, add the variable `<channel>_OUTPUT` and set it to `csv`, `json`, or `text`. If unset or set to an invalid value, defaults to `text`.
- To bypass the snooze feature, even when enabled, add the variable `<CHANNEL>_SKIPSNOOZE` and set it to `true`.
- To configure the channel to only send container update notifications, add the variable `<CHANNEL>_CONTAINERSONLY` and set it to `true`.
- To send notifications even when there are no updates available, add the variable `<CHANNEL>_ALLOWEMPTY` and set it to `true`.
- To use another notification output format, add the variable `<CHANNEL>_OUTPUT` and set it to `csv`, `json`, or `text`. If unset or set to an invalid value, defaults to `text`.
- To send multiple notifications using the same notification template:
- Strings in the `NOTIFY_CHANNELS` list are now treated as unique names and do not necessarily refer to the notification template that will be called, though they do by default.
- Add another notification channel to `NOTIFY_CHANNELS` in `dockcheck.config`. The name can contain upper and lower case letters, numbers and underscores, but can't start with a number.
- Add the variable `<channel>_TEMPLATE` to `dockcheck.config` where `<channel>` is the name of the channel added above and set the value to an available notification template script (`slack`, `apprise`, `gotify`, etc.)
- Add all other environment variables required for the chosen template to function with `<channel>` in upper case as the prefix rather than the template name.
- For example, if `<channel>` is `mynotification` and the template configured is `slack`, you would need to set `MYNOTIFICATION_CHANNEL_ID` and `MYNOTIFICATION_ACCESS_TOKEN`.
- Add the variable `<CHANNEL>_TEMPLATE` to `dockcheck.config` where `<CHANNEL>` is the name of the channel added above and set the value to an available notification template script (`slack`, `apprise`, `gotify`, etc.)
- Add all other environment variables required for the chosen template to function with `<CHANNEL>` in upper case as the prefix rather than the template name.
- For example, if `<CHANNEL>` is `mynotification` and the template configured is `slack`, you would need to set `MYNOTIFICATION_CHANNEL_ID` and `MYNOTIFICATION_ACCESS_TOKEN`.
#### Release notes addon
@@ -285,6 +295,8 @@ The backed up images will be removed if they're older than *BackupForDays* value
If configured for eg. 7 days, force earlier cleaning by just passing a lower number of days, eg. `-b 2` to clean everything older than 2 days.
Backed up images will not be removed if neither `-b` flag nor `BackupForDays` config variable is set.
When backups are enabled, the `-p` auto-prune option is ignored to preserve backed up images.
Use the capital option `-B` to list currently backed up images. Or list all images with `docker images`.
To manually remove any backed up images, do `docker rmi dockcheck/homer:2025-10-26_1132_latest`.

View File

@@ -51,6 +51,7 @@
# pbul://o.gn5kj6nfhv736I7jC3cj3QLRiyhgl98b
# tgram://{bot_token}/{chat_id}/'
# APPRISE_URL="http://apprise.mydomain.tld:1234/notify/apprise"
# APPRISE_TAG="one_tag,othertag" # Only works with the URL API and need to setup tags within Apprise
#
# BARK_KEY="key-value"
#
@@ -95,3 +96,7 @@
# TELEGRAM_CHAT_ID="mychatid"
# TELEGRAM_TOKEN="token-value"
# TELEGRAM_TOPIC_ID="0"
#
# XMPP_SOURCE_JID="mybotaccount@mydomain.tld"
# XMPP_SOURCE_PWD="password"
# XMPP_DEST_JID="myusername@mydomain.tld"

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
VERSION="v0.7.6"
# ChangeNotes: Bugfixes and sanitation. Cleanup of default.config - migrate settings manually (optional).
VERSION="v0.7.7"
# ChangeNotes: xmpp template added, ranges for selection possible, restart-stack and -s reworked.
Github="https://github.com/mag37/dockcheck"
RawUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh"
@@ -34,7 +34,7 @@ Help() {
echo
echo "Options:"
echo "-a|y Automatic updates, without interaction."
echo "-b N Enable image backups and sets number of days to keep from pruning."
echo "-b N Enable image backups and sets number of days to keep from pruning. Ignores -p auto-prune."
echo "-B List currently backed up images, then exit."
echo "-c D Exports metrics as prom file for the prometheus node_exporter. Provide the collector textfile directory."
echo "-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower."
@@ -48,10 +48,10 @@ Help() {
echo "-m Monochrome mode, no printf colour codes and hides progress bar."
echo "-M Prints custom releasenote urls as markdown (requires template support)."
echo "-n No updates; only checking availability without interaction."
echo "-p Auto-prune dangling images after update."
echo "-p Auto-prune dangling images after update. Ignored when -b is used."
echo "-r Allow checking/updating images created by 'docker run', containers need to be recreated manually."
echo "-R Skip container recreation after pulling images."
echo "-s Include stopped containers in the check. (Logic: docker ps -a)."
echo "-s Include stopped containers, returns to stopped state after recreation."
echo "-t N Set a timeout (in seconds) per container for registry checkups, 10 is default."
echo "-u Allow automatic self updates - caution as this will pull new code and autorun it."
echo "-v Prints current version."
@@ -229,7 +229,7 @@ self_update() {
choosecontainers() {
while [[ -z "${ChoiceClean:-}" ]]; do
read -r -p "Enter number(s) separated by comma, [a] for all - [q] to quit: " Choice
read -r -p "Enter number(s) or range(s) separated by comma (e.g. 1-2,4-5,09), [a] for all - [q] to quit: " Choice
if [[ "$Choice" =~ [qQnN] ]]; then
[[ -n "${BackupForDays:-}" ]] && remove_backups
exit 0
@@ -238,12 +238,28 @@ choosecontainers() {
ChoiceClean=${Choice//[,.:;]/ }
else
ChoiceClean=${Choice//[,.:;]/ }
SelectedUpdates=()
for CC in $ChoiceClean; do
CC=$((10#$CC)) # Base 10 interpretation to strip leading zeroes
if [[ "$CC" -lt 1 || "$CC" -gt $UpdCount ]]; then # Reset choice if out of bounds
echo "Number not in list: $CC"; unset ChoiceClean; break 1
if [[ "$CC" == *-* ]]; then
if [[ "$CC" =~ ^([0-9]+)-([0-9]+)$ ]]; then
# Enforce base 10 to avoid octal parsing of leading zeroes
RangeStart=$((10#${BASH_REMATCH[1]}))
RangeEnd=$((10#${BASH_REMATCH[2]}))
if [[ "$RangeStart" -lt 1 || "$RangeEnd" -gt $UpdCount || "$RangeStart" -gt "$RangeEnd" ]]; then
echo "Entered list is out of bounds: $CC"; unset ChoiceClean; break 1
else
for ((idx=RangeStart; idx<=RangeEnd; idx++)); do SelectedUpdates+=( "${GotUpdates[$idx-1]}" ); done
fi
else
echo "Invalid range: $CC"; unset ChoiceClean; break 1
fi
else
SelectedUpdates+=( "${GotUpdates[$CC-1]}" )
CC=$((10#$CC)) # Base 10 interpretation to strip leading zeroes
if [[ "$CC" -lt 1 || "$CC" -gt $UpdCount ]]; then # Reset choice if out of bounds
echo "Number not in list: $CC"; unset ChoiceClean; break 1
else
SelectedUpdates+=( "${GotUpdates[$CC-1]}" )
fi
fi
done
fi
@@ -380,7 +396,7 @@ dependency_check() {
binary_downloader "$AppName" "$AppUrl"
[[ -f "$ScriptWorkDir/$AppName" ]] && { export "$AppVar"="$ScriptWorkDir/$1" && printf "\n%b%s downloaded.%b\n" "$c_green" "$AppName" "$c_reset"; }
fi
else printf "\n%bDependency missing, exiting.%b\n" "$c_red" "$c_reset"; exit 1;
else printf "\n%bDependency '%s' missing, exiting.%b\n" "$c_red" "$AppName" "$c_reset"; exit 1;
fi
fi
# Final check if binary is correct
@@ -634,6 +650,7 @@ if [[ -n "${GotUpdates:-}" ]]; then
for i in "${SelectedUpdates[@]}"; do
((CurrentQue+=1))
unset CompleteConfs
ContStopAfter=false
# Extract labels and metadata
ContConfig=$(docker inspect "$i" --format '{{json .}}')
ContLabels=$($jqbin -r '."Config"."Labels"' <<< "$ContConfig")
@@ -648,15 +665,15 @@ if [[ -n "${GotUpdates:-}" ]]; then
ContRestartStack=$($jqbin -r '."mag37.dockcheck.restart-stack"' <<< "$ContLabels")
[[ "$ContRestartStack" == "null" ]] && ContRestartStack=""
ContOnlySpecific=$($jqbin -r '."mag37.dockcheck.only-specific-container"' <<< "$ContLabels")
[[ "$ContOnlySpecific" == "null" ]] && ContRestartStack=""
[[ "$ContOnlySpecific" == "null" ]] && ContOnlySpecific=""
ContStateRunning=$($jqbin -r '."State"."Running"' <<< "$ContConfig")
[[ "$ContStateRunning" == "null" ]] && ContStateRunning=""
if [[ "$ContStateRunning" == "true" ]]; then
printf "\n%bNow recreating (%s/%s): %b%s%b\n" "$c_teal" "$CurrentQue" "$NumberofUpdates" "$c_blue" "$i" "$c_reset"
else
printf "\n%bSkipping recreation of %b%s%b as it's not running.%b\n" "$c_yellow" "$c_blue" "$i" "$c_yellow" "$c_reset"
continue
ContStopAfter=true
printf "\n%bRecreating %b%s%b to apply update - then stopping to return to current state.%b\n" "$c_yellow" "$c_blue" "$i" "$c_yellow" "$c_reset"
fi
# Checking if compose-values are empty - hence started with docker run
@@ -678,10 +695,15 @@ if [[ -n "${GotUpdates:-}" ]]; then
# Check if the whole stack should be restarted
if [[ "$ContRestartStack" == true ]] || [[ "$ForceRestartStacks" == true ]]; then
${DockerBin} ${CompleteConfs} stop; ${DockerBin} ${CompleteConfs} ${ContEnvs} up -d || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
${DockerBin} ${CompleteConfs} down; ${DockerBin} ${CompleteConfs} ${ContEnvs} up -d || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
else
${DockerBin} ${CompleteConfs} ${ContEnvs} up -d ${SpecificContainer} || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
fi
# Restore the stopped state of updated cotainers
if [[ "$ContStopAfter" == true ]]; then
${DockerBin} ${CompleteConfs} stop ${SpecificContainer} || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
fi
done
fi
printf "\n%bAll updates done!%b\n" "$c_green" "$c_reset"
@@ -689,7 +711,7 @@ if [[ -n "${GotUpdates:-}" ]]; then
# Trigger pruning only when backup-function is not used
if [[ -z "${BackupForDays:-}" ]]; then
if [[ "$AutoPrune" == false ]] && [[ "$AutoMode" == false ]]; then printf "\n"; read -rep "Would you like to prune all dangling images? y/[n]: " AutoPrune; fi
if [[ "$AutoPrune" == true ]] || [[ "$AutoPrune" =~ [yY] ]]; then printf "\nAuto pruning.."; docker image prune -f; fi
if [[ "$AutoPrune" == true ]] || [[ "$AutoPrune" =~ [yY] ]]; then printf "\nAuto pruning.."; docker image prune -f && AlreadyPruned="true" ; fi
fi
else
@@ -699,7 +721,11 @@ else
printf "\nNo updates available.\n"
fi
# Clean up old backup image tags if -b is used
[[ -n "${BackupForDays:-}" ]] && remove_backups
# Clean up old backup image tags if -b is used otherwise prune if auto-prune is set
if [[ -n "${BackupForDays:-}" ]]; then
remove_backups
else
if [[ "$AutoPrune" == true ]] && [[ "${AlreadyPruned:=false}" != true ]]; then printf "\nAuto pruning.."; docker image prune -f; fi
fi
exit 0

View File

@@ -1,5 +1,5 @@
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
NOTIFY_APPRISE_VERSION="v0.4"
NOTIFY_APPRISE_VERSION="v0.5"
#
# Required receiving services must already be set up.
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
@@ -35,14 +35,9 @@ trigger_apprise_notification() {
fi
fi
# e.g. APPRISE_PAYLOAD='mailto://myemail:mypass@gmail.com
# mastodons://{token}@{host}
# pbul://o.gn5kj6nfhv736I7jC3cj3QLRiyhgl98b
# tgram://{bot_token}/{chat_id}/'
if [[ -n "${!AppriseUrlVar:-}" ]]; then
AppriseURL="${!AppriseUrlVar}"
curl -S -o /dev/null ${CurlArgs} -X POST -F "title=$MessageTitle" -F "body=$MessageBody" -F "tags=all" $AppriseURL # e.g. APPRISE_URL=http://apprise.mydomain.tld:1234/notify/apprise
curl -S -o /dev/null ${CurlArgs} -X POST -F "title=$MessageTitle" -F "body=$MessageBody" -F "tags=${APPRISE_TAG:-all}" "$AppriseURL"
if [[ $? -gt 0 ]]; then
NotifyError=true

View File

@@ -0,0 +1,47 @@
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
NOTIFY_XMPP_VERSION="v0.1"
#
# Requires the package "go-sendxmpp" to be installed and in $PATH.
#
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
# Do not modify this file directly within the "notify_templates" subdirectory.
# Set XMPP_SOURCE_ID, XMPP_SOURCE_PWD and XMPP_DEST_JID in your dockcheck.config file.
trigger_xmpp_notification() {
if [[ -n "$1" ]]; then
xmpp_channel="$1"
else
xmpp_channel="xmpp"
fi
if ! command -v go-sendxmpp &>/dev/null; then
printf "\nRequired binary go-sendxmpp missing. XMPP notification will not be sent.\n"
remove_channel xmpp
return 0
fi
UpperChannel="${xmpp_channel^^}"
SourceJidVar="${UpperChannel}_SOURCE_JID"
SourcePwdVar="${UpperChannel}_SOURCE_PWD"
DestJidVar="${UpperChannel}_DEST_JID"
if [[ -z "${!SourceJidVar:-}" ]] || [[ -z "${!DestJidVar:-}" ]] || [[ -z "${!SourcePwdVar:-}" ]]; then
printf "\nRequired configuration variables are missing. XMPP notifications will not be sent.\n"
remove_channel xmpp
return 0
fi
SourceJid="${!SourceJidVar}" # E.g `mybotaccount@mydomain.tld`
SourcePwd="${!SourcePwdVar}" # The password for the account `mybotaccount@mydomain.tld`
DestJid="${!DestJidVar}" # E.g `myusername@mydomain.tld`
echo "$MessageBody" | go-sendxmpp --suppress-root-warning -u "$SourceJid" -p "$SourcePwd" "$DestJid"
if [[ $? -gt 0 ]]; then
NotifyError=true
fi
}

View File

@@ -2,79 +2,158 @@
# Modify, add and (if necessary) remove to fit your needs.
# This is a list of container names and releasenote urls, separated by space.
13ft https://github.com/wasi-master/13ft/releases
actual_server https://actualbudget.org/blog
adguardhome https://github.com/AdguardTeam/AdGuardHome/releases
adminer https://github.com/TimWolla/docker-adminer/releases
aiostreams https://github.com/Viren070/AIOStreams/releases
altmount https://github.com/javi11/altmount/releases
apprise-api https://github.com/linuxserver/docker-apprise-api/releases
audiobookshelf https://github.com/advplyr/audiobookshelf/releases
authentik_server https://github.com/goauthentik/authentik/releases
authentik_worker https://github.com/goauthentik/authentik/releases
autobrr https://github.com/autobrr/autobrr/releases
barassistant https://github.com/karlomikus/bar-assistant//releases
barassistant_api https://github.com/karlomikus/bar-assistant/releases
bazarr https://github.com/morpheus65535/bazarr/releases
bazarr-ls https://github.com/linuxserver/docker-bazarr/releases
bentopdf https://github.com/alam00000/bentopdf/releases
beszel https://github.com/henrygd/beszel/releases
booklore https://github.com/booklore-app/BookLore/releases
bookstack https://github.com/BookStackApp/BookStack/releases
boxarr https://github.com/iongpt/boxarr/releases
bruceforce-vaultwarden-backup https://github.com/Bruceforce/vaultwarden-backup/blob/main/CHANGELOG.md
byparr https://github.com/ThePhaseless/Byparr/releases
caddy https://github.com/caddyserver/caddy/releases
cadvisor https://github.com/google/cadvisor/releases
calibre https://github.com/linuxserver/docker-calibre/releases
calibre-web https://github.com/linuxserver/docker-calibre-web/releases
calibre-web-automated https://github.com/crocodilestick/Calibre-Web-Automated/releases
chadburn https://github.com/PremoWeb/chadburn/releases
checkrr https://github.com/aetaric/checkrr/releases
cinesync https://github.com/sureshfizzy/CineSync/releases
cleanuperr https://github.com/flmorg/cleanuperr/releases
cloudflare-bypass https://github.com/sarperavci/CloudflareBypassForScraping/releases
collabora https://github.com/CollaboraOnline/online/releases
comet https://github.com/g0ldyy/comet/releases
configarr https://github.com/raydak-labs/configarr/releases
cronmaster https://github.com/fccview/cronmaster/releases
cross-seed https://github.com/cross-seed/cross-seed/releases
crowdsec https://github.com/crowdsecurity/crowdsec/releases
cup https://github.com/sergi0g/cup/releases
daps https://github.com/drazzilb08/daps/releases
dashbrr https://github.com/autobrr/dashbrr/releases
databasus https://github.com/databasus/databasus/releases
decypharr https://github.com/sirrobot01/decypharr/releases
dispatcharr https://github.com/Dispatcharr/Dispatcharr/releases
diun https://github.com/crazy-max/diun/releases
dlproxy https://github.com/Pukabyte/dlproxy/releases
docker-db-auto-backup https://github.com/RealOrangeOne/docker-db-auto-backup/releases
dockerproxy https://github.com/Tecnativa/docker-socket-proxy/releases
dockge https://github.com/louislam/dockge/releases
dozzle https://github.com/amir20/dozzle/releases
dumb https://github.com/I-am-PUID-0/DUMB/releases
esphome https://github.com/esphome/esphome/releases
feishin https://github.com/jeffvli/feishin/releases
flarebypasser https://github.com/yoori/flare-bypasser/releases
flaresolverr https://github.com/FlareSolverr/FlareSolverr/releases
flatnotes https://github.com/dullage/flatnotes/releases
forgejo https://codeberg.org/forgejo/forgejo/releases
fressrss https://github.com/FreshRSS/FreshRSS/releases
frigate https://github.com/blakeblackshear/frigate/releases
gerbil https://github.com/fosrl/gerbil/releases
glances https://github.com/nicolargo/glances/releases
gluetun https://github.com/qdm12/gluetun/releases
go2rtc https://github.com/AlexxIT/go2rtc/releases
godoxy https://github.com/yusing/godoxy/releases
gotify https://github.com/gotify/server/releases
hbbr https://github.com/rustdesk/rustdesk-server/releases
hbbs https://github.com/rustdesk/rustdesk-server/releases
homarr https://github.com/homarr-labs/homarr/releases
home-assistant https://github.com/home-assistant/core/releases/
homepage https://github.com/gethomepage/homepage/releases
homer https://github.com/bastienwirtz/homer/releases
immich_machine_learning https://github.com/immich-app/immich/releases
immich_postgres https://github.com/tensorchord/VectorChord/releases
immich_redis https://github.com/valkey-io/valkey/releases
immich_server https://github.com/immich-app/immich/releases
jellyfin https://github.com/jellyfin/jellyfin/releases
jellyfin-auto-collections https://github.com/ghomasHudson/Jellyfin-Auto-Collections/releases
jellyseerr https://github.com/Fallenbagel/jellyseerr/releases
jellystat https://github.com/CyferShepard/Jellystat/releases
karakeep https://github.com/karakeep-app/karakeep/releases
librespeed https://github.com/librespeed/speedtest/releases
lidarr https://github.com/Lidarr/Lidarr/releases/
lidarr-ls https://github.com/linuxserver/docker-lidarr/releases
lubelogger https://github.com/hargata/lubelog/releases
mattermost https://github.com/mattermost/mattermost/releases
mealie https://github.com/mealie-recipes/mealie/releases
mediathekarr https://github.com/PCJones/MediathekArr/releases
meilisearch https://github.com/meilisearch/meilisearch/releases
monica https://github.com/monicahq/monica/releases
mqtt https://github.com/eclipse/mosquitto/tags
n8n https://github.com/n8n-io/n8n/releases
navidrome https://github.com/navidrome/navidrome/releases
newt https://github.com/fosrl/newt/releases
nextcloud-aio-mastercontainer https://github.com/nextcloud/all-in-one/releases
nginx https://github.com/docker-library/official-images/blob/master/library/nginx
notifiarr https://github.com/Notifiarr/notifiarr/releases
nzbdav https://github.com/nzbdav-dev/nzbdav/releases
ofelia https://github.com/mcuadros/ofelia/releases
onthespot https://github.com/justin025/onthespot/releases
opencloud https://github.com/opencloud-eu/opencloud/releases
outline https://github.com/outline/outline/releases
owncast https://github.com/owncast/owncast/releases
pangolin https://github.com/fosrl/pangolin/releases
placeholdarr https://github.com/TheIndieArmy/placeholdarr/releases
postgresus https://github.com/RostislavDugin/postgresus/releases
profilarr https://github.com/Dictionarry-Hub/profilarr/releases
prowlarr https://github.com/Prowlarr/Prowlarr/releases
prowlarr-ls https://github.com/linuxserver/docker-prowlarr/releases
qbittorrent https://www.qbittorrent.org/news
qbittorrent-nox https://www.qbittorrent.org/news
radarr https://github.com/Radarr/Radarr/releases/
radarr-ls https://github.com/linuxserver/docker-radarr/releases
rclone-manager https://github.com/iPromKnight/rclone-manager/releases
rdtclient https://github.com/rogerfar/rdt-client/releases
readarr https://github.com/Readarr/Readarr/releases
readeck https://codeberg.org/readeck/readeck/releases
recyclarr https://github.com/recyclarr/recyclarr/releases
redis https://github.com/redis/redis/releases
roundcubemail https://github.com/roundcube/roundcubemail/releases
sabnzbd https://github.com/linuxserver/docker-sabnzbd/releases
scannarr https://github.com/Pukabyte/scannarr/releases
scanopy https://github.com/scanopy/scanopy/releases
scoutarr https://github.com/SuFxGIT/scoutarr/releases
scrutiny https://github.com/AnalogJ/scrutiny/releases
seerr https://github.com/seerr-team/seerr/releases
sftpgo https://github.com/drakkan/sftpgo/releases
shelfmark https://github.com/calibrain/shelfmark/releases
slskd https://github.com/slskd/slskd/releases
snappymail https://github.com/the-djmaze/snappymail/releases
sonarr https://github.com/Sonarr/Sonarr/releases/
sonarr-ls https://github.com/linuxserver/docker-sonarr/releases
sortarr https://github.com/Jaredharper1/Sortarr/releases
stacks https://github.com/zelestcarlyone/stacks/releases
stash https://github.com/stashapp/stash/releases
stirling-pdf https://github.com/Stirling-Tools/Stirling-PDF/releases
stremio-iptv-addon https://github.com/Inside4ndroid/M3U-XCAPI-EPG-IPTV-Stremio/releases
stremioserver https://github.com/Stremio/server-docker/releases
synapse https://github.com/element-hq/synapse/releases
syncthing https://github.com/syncthing/syncthing/releases
tailscale https://github.com/tailscale/tailscale/releases
tautulli https://github.com/Tautulli/Tautulli/releases
thelounge https://github.com/thelounge/thelounge/releases
traefik https://github.com/traefik/traefik/releases
umlautadaptarr https://github.com/PCJones/UmlautAdaptarr/releases
uptime-kuma https://github.com/louislam/uptime-kuma/releases
vaultwarden-server https://github.com/dani-garcia/vaultwarden/releases
vikunja https://github.com/go-vikunja/vikunja/releases
wallos https://github.com/ellite/Wallos/releases
watchstate https://github.com/arabcoders/watchstate/releases
watchtower https://github.com/beatkind/watchtower/releases
wopiserver https://github.com/cs3org/wopiserver/releases
wud https://github.com/getwud/wud/releases
yamtrack https://github.com/FuzzyGrim/Yamtrack/releases
zigbee2mqtt https://github.com/Koenkk/zigbee2mqtt/releases
zilean https://github.com/iPromKnight/zilean/releases