Compare commits

..

1 Commits

Author SHA1 Message Date
53d505ce89 docs(contribution): update templates with modern patterns
Based on analysis of latest 30 scripts (koel, wallabag, invoiceninja, etc.)

Templates updated to reflect current best practices:

ct/AppName.sh:
- Use check_for_gh_release + fetch_and_deploy_gh_release pattern
- CLEAN_INSTALL=1 for updates
- Proper backup/restore workflow
- Simplified configuration comments

install/AppName-install.sh:
- fetch_and_deploy_gh_release as primary download method (no separate RELEASE variable)
- Real-world examples from Node.js, Python, PHP apps
- import_local_ip called early
- Setup runtimes/databases before app installation
- cleanup_lxc at the end

HELPER_FUNCTIONS.md:
- fetch_and_deploy_gh_release as preferred method (documented first)
- CLEAN_INSTALL=1 environment variable documented
- prebuild type with asset_pattern documented
- Clarified when to use get_latest_github_release vs fetch_and_deploy

Closes #10194
2025-12-22 20:58:06 +01:00
176 changed files with 967 additions and 21337 deletions

View File

@ -10,128 +10,17 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-12-26
### ❔ Uncategorized
- fix: zoraxy: category [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10344](https://github.com/community-scripts/ProxmoxVE/pull/10344))
- categorize valkey as database [@pshankinclarke](https://github.com/pshankinclarke) ([#10331](https://github.com/community-scripts/ProxmoxVE/pull/10331))
## 2025-12-25
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- InfluxDB: Fixes [@tremor021](https://github.com/tremor021) ([#10308](https://github.com/community-scripts/ProxmoxVE/pull/10308))
- Increase Zot Default Memory, Recategorize [@chrismuzyn](https://github.com/chrismuzyn) ([#10311](https://github.com/community-scripts/ProxmoxVE/pull/10311))
- #### 🔧 Refactor
- Refactor: OpenObserve [@tremor021](https://github.com/tremor021) ([#10279](https://github.com/community-scripts/ProxmoxVE/pull/10279))
- Refactor: NZBGet [@tremor021](https://github.com/tremor021) ([#10302](https://github.com/community-scripts/ProxmoxVE/pull/10302))
- Refactor: ntfy [@tremor021](https://github.com/tremor021) ([#10303](https://github.com/community-scripts/ProxmoxVE/pull/10303))
- Refactor: Notifiarr [@tremor021](https://github.com/tremor021) ([#10304](https://github.com/community-scripts/ProxmoxVE/pull/10304))
### 🌐 Website
- Fix horizontal scroll on website [@mateossh](https://github.com/mateossh) ([#10317](https://github.com/community-scripts/ProxmoxVE/pull/10317))
## 2025-12-24
### 🚀 Updated Scripts
- recyclarr: increase cron path [@Uncloak2](https://github.com/Uncloak2) ([#10272](https://github.com/community-scripts/ProxmoxVE/pull/10272))
- #### 🐞 Bug Fixes
- fix: technitium: service migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10300](https://github.com/community-scripts/ProxmoxVE/pull/10300))
- #### 🔧 Refactor
- Overseerr: Update dependencies [@tremor021](https://github.com/tremor021) ([#10275](https://github.com/community-scripts/ProxmoxVE/pull/10275))
- Refactor: Paperless-GPT [@tremor021](https://github.com/tremor021) ([#10274](https://github.com/community-scripts/ProxmoxVE/pull/10274))
- Refactor: Outline [@tremor021](https://github.com/tremor021) ([#10276](https://github.com/community-scripts/ProxmoxVE/pull/10276))
- Refactor: OTS [@tremor021](https://github.com/tremor021) ([#10277](https://github.com/community-scripts/ProxmoxVE/pull/10277))
- Refactor: OpenProject [@tremor021](https://github.com/tremor021) ([#10278](https://github.com/community-scripts/ProxmoxVE/pull/10278))
- Refactor: Open Archiver [@tremor021](https://github.com/tremor021) ([#10280](https://github.com/community-scripts/ProxmoxVE/pull/10280))
- Refactor: Tautulli [@tremor021](https://github.com/tremor021) ([#10241](https://github.com/community-scripts/ProxmoxVE/pull/10241))
- Refactor: PrivateBin [@tremor021](https://github.com/tremor021) ([#10256](https://github.com/community-scripts/ProxmoxVE/pull/10256))
- Refactor: Podman-Home Assistant [@tremor021](https://github.com/tremor021) ([#10258](https://github.com/community-scripts/ProxmoxVE/pull/10258))
- Refactor: Plant-it [@tremor021](https://github.com/tremor021) ([#10259](https://github.com/community-scripts/ProxmoxVE/pull/10259))
- Refactor: PatchMon [@tremor021](https://github.com/tremor021) ([#10260](https://github.com/community-scripts/ProxmoxVE/pull/10260))
- Refactor: Part-DB [@tremor021](https://github.com/tremor021) ([#10262](https://github.com/community-scripts/ProxmoxVE/pull/10262))
### 💾 Core
- #### 🐞 Bug Fixes
- core: correct local template discovery regex pattern [@MickLesk](https://github.com/MickLesk) ([#10282](https://github.com/community-scripts/ProxmoxVE/pull/10282))
### 🧰 Tools
- #### 🐞 Bug Fixes
- pihole-exporter fix: unbound var [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10307](https://github.com/community-scripts/ProxmoxVE/pull/10307))
### ❔ Uncategorized
- Pocketbase: Add note for superuser account creation [@tremor021](https://github.com/tremor021) ([#10245](https://github.com/community-scripts/ProxmoxVE/pull/10245))
## 2025-12-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Technitium DNS: Migrate service [@tremor021](https://github.com/tremor021) ([#10240](https://github.com/community-scripts/ProxmoxVE/pull/10240))
- Update forgejo to debian13 and fix env var [@burgerga](https://github.com/burgerga) ([#10242](https://github.com/community-scripts/ProxmoxVE/pull/10242))
- #### 🔧 Refactor
- Passbolt: Small fixes [@tremor021](https://github.com/tremor021) ([#10261](https://github.com/community-scripts/ProxmoxVE/pull/10261))
- Refactor: ProjectSend [@tremor021](https://github.com/tremor021) ([#10255](https://github.com/community-scripts/ProxmoxVE/pull/10255))
- Prometheus Paperless NGX Exporter: Small fix [@tremor021](https://github.com/tremor021) ([#10254](https://github.com/community-scripts/ProxmoxVE/pull/10254))
- Podman: Fixes [@tremor021](https://github.com/tremor021) ([#10257](https://github.com/community-scripts/ProxmoxVE/pull/10257))
- Refactor: Beszel [@tremor021](https://github.com/tremor021) ([#10195](https://github.com/community-scripts/ProxmoxVE/pull/10195))
### 🧰 Tools
- #### 🐞 Bug Fixes
- fix: pihole-exporter: unknown function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10249](https://github.com/community-scripts/ProxmoxVE/pull/10249))
### ❔ Uncategorized
- Fix Recyclarr page TypeError: schema mismatch in notes field [@Copilot](https://github.com/Copilot) ([#10253](https://github.com/community-scripts/ProxmoxVE/pull/10253))
## 2025-12-22
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- InvoiceNinja: add chromium dependencies for PDF generation [@MickLesk](https://github.com/MickLesk) ([#10230](https://github.com/community-scripts/ProxmoxVE/pull/10230))
- MediaManager) use npm install [@MickLesk](https://github.com/MickLesk) ([#10228](https://github.com/community-scripts/ProxmoxVE/pull/10228))
- Kometa: Fix update procedure [@tremor021](https://github.com/tremor021) ([#10217](https://github.com/community-scripts/ProxmoxVE/pull/10217))
- #### 💥 Breaking Changes
- refactor: reitti: v3.0.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10196](https://github.com/community-scripts/ProxmoxVE/pull/10196))
### 💾 Core
- #### ✨ New Features
- tools.func - hwaccel: skip setup without GPU passthrough and fix Ubuntu AMD firmware [@MickLesk](https://github.com/MickLesk) ([#10225](https://github.com/community-scripts/ProxmoxVE/pull/10225))
### 📚 Documentation
- contribution docs: update templates with modern patterns [@MickLesk](https://github.com/MickLesk) ([#10227](https://github.com/community-scripts/ProxmoxVE/pull/10227))
### ❔ Uncategorized
- InvoiceNinja: switch category [@DragoQC](https://github.com/DragoQC) ([#10223](https://github.com/community-scripts/ProxmoxVE/pull/10223))
- Invoice ninja [@DragoQC](https://github.com/DragoQC) ([#10223](https://github.com/community-scripts/ProxmoxVE/pull/10223))
## 2025-12-21

View File

@ -27,22 +27,19 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
if check_for_gh_release "beszel" "henrygd/beszel"; then
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated $APP"
msg_info "Updating Beszel"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated Beszel"
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Updated successfully!"
exit
}

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@ -44,14 +44,6 @@ function update_script() {
rm -rf forgejo-$RELEASE-linux-amd64
msg_ok "Cleaned"
# Fix env var from older version of community script
if grep -q "GITEA_WORK_DIR" /etc/systemd/system/forgejo.service; then
msg_info "Updating Service File"
sed -i "s/GITEA_WORK_DIR/FORGEJO_WORK_DIR/g" /etc/systemd/system/forgejo.service
systemctl daemon-reload
msg_ok "Updated Service File"
fi
msg_info "Starting Service"
systemctl start forgejo
msg_ok "Started Service"

View File

@ -27,11 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating InfluxDB"
msg_info "Updating ${APP}"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated InfluxDB"
$STD apt -y upgrade
msg_ok "Updated successfully!"
exit
}

View File

@ -44,7 +44,7 @@ function update_script() {
export PUBLIC_API_URL=""
export BASE_PATH="/web"
cd /opt/mediamanager/web
$STD npm install --no-fund --no-audit
$STD npm ci --no-fund --no-audit
$STD npm run build
rm -rf "$FRONTEND_FILES_DIR"/build
cp -r build "$FRONTEND_FILES_DIR"

View File

@ -27,10 +27,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating Notifiarr"
msg_info "Updating $APP"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated Notifiarr"
$STD apt -y upgrade
msg_ok "Updated $APP"
msg_ok "Updated successfully!"
exit
}

View File

@ -34,18 +34,21 @@ function update_script() {
rm -f /etc/apt/sources.list.d/archive.heckel.io.list
rm -f /etc/apt/sources.list.d/archive.heckel.io.list.bak
rm -f /etc/apt/sources.list.d/archive.heckel.io.sources
setup_deb822_repo \
"ntfy" \
"https://archive.ntfy.sh/apt/keyring.gpg" \
"https://archive.ntfy.sh/apt/" \
"stable"
curl -fsSL -o /etc/apt/keyrings/ntfy.gpg https://archive.ntfy.sh/apt/keyring.gpg
cat <<'EOF' >/etc/apt/sources.list.d/ntfy.sources
Types: deb
URIs: https://archive.ntfy.sh/apt/
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/ntfy.gpg
EOF
msg_ok "Corrected old Ntfy Repository"
fi
msg_info "Updating ntfy"
msg_info "Updating $APP LXC"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated ntfy"
$STD apt -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@ -27,10 +27,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating NZBGet"
msg_info "Updating $APP LXC"
$STD apt update
$STD apt upgrade -y
msg_ok "Updated NZBGet"
$STD apt -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
}

View File

@ -34,7 +34,7 @@ function update_script() {
msg_ok "Stopped Services"
cp /opt/openarchiver/.env /opt/openarchiver.env
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "openarchiver" "LogicLabs-OU/OpenArchiver" "tarball" "latest" "/opt/openarchiver"
mv /opt/openarchiver.env /opt/openarchiver/.env
msg_info "Updating Open Archiver"

View File

@ -27,16 +27,13 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "openobserve" "openobserve/openobserve"; then
msg_info "Updating OpenObserve"
systemctl stop openobserve
RELEASE=$(get_latest_github_release "openobserve/openobserve")
tar zxf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/v$RELEASE/openobserve-v$RELEASE-linux-amd64.tar.gz) -C /opt/openobserve
systemctl start openobserve
msg_ok "Updated OpenObserve"
msg_ok "Updated successfully!"
fi
msg_info "Updating $APP"
systemctl stop openobserve
LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
$STD tar zxvf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/$LATEST/openobserve-$LATEST-linux-amd64.tar.gz) -C /opt/openobserve
systemctl start openobserve
msg_ok "Updated $APP"
msg_ok "Updated successfully!"
exit
}

View File

@ -27,19 +27,18 @@ function update_script() {
msg_error "No Paperless-GPT installation found!"
exit
fi
if check_for_gh_release "paperless-gpt" "icereed/paperless-gpt"; then
RELEASE=$(curl -fsSL https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop paperless-gpt
msg_ok "Service Stopped"
if should_update_tool "node" "24"; then
NODE_VERSION="24" setup_nodejs
fi
fetch_and_deploy_gh_release "paperless-gpt" "icereed/paperless-gpt" "tarball"
msg_info "Updating Paperless-GPT"
msg_info "Updating Paperless-GPT to ${RELEASE}"
temp_file=$(mktemp)
curl -fsSL "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
tar zxf $temp_file
rm -rf /opt/paperless-gpt
mv paperless-gpt-${RELEASE} /opt/paperless-gpt
cd /opt/paperless-gpt/web-app
$STD npm install
$STD npm run build
@ -48,12 +47,16 @@ function update_script() {
export CC=musl-gcc
CGO_ENABLED=1 go build -tags musl -o /dev/null github.com/mattn/go-sqlite3
CGO_ENABLED=1 go build -tags musl -o paperless-gpt .
msg_ok "Updated Paperless-GPT"
rm -f $temp_file
echo "${RELEASE}" >"/opt/paperless-gpt_version.txt"
msg_ok "Updated Paperless-GPT to ${RELEASE}"
msg_info "Starting Service"
systemctl start paperless-gpt
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

View File

@ -27,9 +27,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(get_latest_github_release "Part-DB/Part-DB-server")
if check_for_gh_release "partdb" "Part-DB/Part-DB-server"; then
RELEASE=$(curl -fsSL https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop apache2
msg_ok "Stopped Service"
@ -37,7 +36,7 @@ function update_script() {
msg_info "Updating $APP to v${RELEASE}"
cd /opt
mv /opt/partdb/ /opt/partdb-backup
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o "/opt/v${RELEASE}.zip"
curl -fsSL "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip")
$STD unzip "v${RELEASE}.zip"
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
@ -55,13 +54,15 @@ function update_script() {
chown -R www-data:www-data /opt/partdb
rm -r "/opt/v${RELEASE}.zip"
rm -r /opt/partdb-backup
echo "${RELEASE}" >~/.partdb
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
systemctl start apache2
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}

View File

@ -37,7 +37,7 @@ function update_script() {
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt upgrade -y
$STD apt -y upgrade
msg_ok "Updated successfully!"
msg_info "Updating All Containers\n"
@ -65,7 +65,7 @@ function update_script() {
exit
fi
if [ "$UPD" == "3" ]; then
import_local_ip
IP=$(hostname -I | awk '{print $1}')
msg_info "Installing FileBrowser"
$STD curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
$STD filebrowser config init -a '0.0.0.0'
@ -74,25 +74,23 @@ function update_script() {
msg_ok "Installed FileBrowser"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/filebrowser.service
[Unit]
Description=Filebrowser
After=network-online.target
service_path="/etc/systemd/system/filebrowser.service"
echo "[Unit]
Description=Filebrowser
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target" >$service_path
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target
EOF
systemctl enable -q --now filebrowser
$STD systemctl enable --now filebrowser
msg_ok "Created Service"
msg_ok "Completed Successfully!\n"
echo -e "FileBrowser should be reachable by going to the following URL.
${BL}http://$LOCAL_IP:8080${CL} admin|helper-scripts.com\n"
${BL}http://$IP:8080${CL} admin|helper-scripts.com\n"
exit
fi
if [ "$UPD" == "4" ]; then
@ -101,6 +99,7 @@ EOF
msg_ok "Removed ALL Unused Images"
exit
fi
}
start

View File

@ -29,7 +29,7 @@ function update_script() {
fi
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt upgrade -y
$STD apt -y upgrade
msg_ok "Updated successfully!"
exit
}

View File

@ -48,6 +48,7 @@ function update_script() {
msg_info "Starting Service"
systemctl start apache2
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit

View File

@ -27,37 +27,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [ ! -d /var/cache/nginx/tiles ]; then
msg_info "Installing Nginx Tile Cache"
mkdir -p /var/cache/nginx/tiles
$STD apt install -y nginx
cat <<EOF >/etc/nginx/nginx.conf
events {
worker_connections 1024;
}
http {
proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tiles:10m max_size=1g inactive=30d use_temp_path=off;
server {
listen 80;
location / {
proxy_pass https://tile.openstreetmap.org/;
proxy_set_header Host tile.openstreetmap.org;
proxy_set_header User-Agent "Reitti/1.0";
proxy_cache tiles;
proxy_cache_valid 200 30d;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
}
}
}
EOF
chown -R www-data:www-data /var/cache/nginx/tiles
systemctl restart nginx
echo "reitti.ui.tiles.cache.url=http://127.0.0.1" >> /opt/reitti/application.properties
systemctl restart reitti
msg_info "Installed Nginx Tile Cache"
fi
if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
msg_info "Stopping Service"
systemctl stop reitti
@ -98,4 +67,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"

View File

@ -27,11 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ -f /etc/systemd/system/dns.service ]]; then
mv /etc/systemd/system/dns.service /etc/systemd/system/technitium.service
systemctl daemon-reload
systemctl enable -q --now technitium
fi
if is_package_installed "aspnetcore-runtime-8.0"; then
$STD apt remove -y aspnetcore-runtime-8.0
[ -f /etc/apt/sources.list.d/microsoft-prod.list ] && rm -f /etc/apt/sources.list.d/microsoft-prod.list
@ -46,7 +42,7 @@ function update_script() {
fi
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
if [[ ! -f ~/.technitium || ${RELEASE} != "$(cat ~/.technitium)" ]]; then
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
msg_info "Updating Technitium DNS"
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/

View File

@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="Zot-Registry"
var_tags="${var_tags:-registry;oci}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-4096}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-5}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"

View File

@ -2,7 +2,7 @@
"name": "2FAuth",
"slug": "2fauth",
"categories": [
18
6
],
"date_created": "2024-12-20",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Tailscale",
"slug": "add-tailscale-lxc",
"categories": [
16
1
],
"date_created": "2024-05-02",
"type": "addon",

View File

@ -2,7 +2,7 @@
"name": "AdGuard Home",
"slug": "adguard",
"categories": [
16
5
],
"date_created": "2024-04-28",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Apache Tika",
"slug": "apache-tika",
"categories": [
11
12
],
"date_created": "2025-02-05",
"type": "ct",
@ -13,7 +13,7 @@
"website": "https://tika.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/apache-tika.webp",
"config_path": "/opt/apache-tika/tika-config.xml",
"description": "The Apache Tika\u2122 toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more.",
"description": "The Apache Tika toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more.",
"install_methods": [
{
"type": "default",

View File

@ -2,7 +2,7 @@
"name": "Apache Tomcat",
"slug": "apache-tomcat",
"categories": [
21
10
],
"date_created": "2025-03-04",
"type": "ct",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
"name": "Autobrr",
"slug": "autobrr",
"categories": [
11
14
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Bar-Assistant",
"slug": "bar-assistant",
"categories": [
0
24
],
"date_created": "2025-07-14",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "BookStack",
"slug": "bookstack",
"categories": [
10
12
],
"date_created": "2024-11-05",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "BunkerWeb",
"slug": "bunkerweb",
"categories": [
0
6
],
"date_created": "2024-06-12",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "ByteStash",
"slug": "bytestash",
"categories": [
6
20
],
"date_created": "2025-02-27",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Channels DVR Server",
"slug": "channels",
"categories": [
7
13
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Checkmk",
"slug": "checkmk",
"categories": [
6
9
],
"date_created": "2024-12-19",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Cloudflared",
"slug": "cloudflared",
"categories": [
5
4
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Cockpit",
"slug": "cockpit",
"categories": [
18
10
],
"date_created": "2024-10-20",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Crafty Controller",
"slug": "crafty-controller",
"categories": [
21
24
],
"date_created": "2025-02-01",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "CrowdSec",
"slug": "crowdsec",
"categories": [
4
6
],
"date_created": "2024-05-02",
"type": "addon",

View File

@ -2,7 +2,7 @@
"name": "Debian 13",
"slug": "debian-13-vm",
"categories": [
0
2
],
"date_created": "2025-08-19",
"type": "vm",
@ -37,11 +37,11 @@
"type": "info"
},
{
"text": "After installation, checkout: \u00b4https://github.com/community-scripts/ProxmoxVE/discussions/836\u00b4 for useful Debian commands",
"text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands",
"type": "info"
},
{
"text": "If you use Cloud-init, checkout after installation: \u00b4https://github.com/community-scripts/ProxmoxVE/discussions/272\u00b4",
"text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
"type": "info"
}
]

View File

@ -2,7 +2,7 @@
"name": "deCONZ",
"slug": "deconz",
"categories": [
16
17
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -1,35 +1,35 @@
{
"name": "DiscoPanel",
"slug": "discopanel",
"categories": [
5
],
"date_created": "2025-12-10",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://discopanel.app/docs/",
"config_path": "",
"website": "https://discopanel.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/discopanel.webp",
"description": "The Minecraft Server Manager That *Actually* Works\nBuilt by someone who was done with bloated panels, endless menus, and tools that break the moment you need them most.\nSpin up servers in minutes, configure your proxy without headaches, and link your own DNS name effortlessly.\nFast setup, clean controls, zero nonsense\u2014just a manager that gets out of your way and lets you play.",
"install_methods": [
{
"type": "default",
"script": "ct/discopanel.sh",
"resources": {
"cpu": 4,
"ram": 4096,
"hdd": 15,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "DiscoPanel",
"slug": "discopanel",
"categories": [
24
],
"date_created": "2025-12-10",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://discopanel.app/docs/",
"config_path": "",
"website": "https://discopanel.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/discopanel.webp",
"description": "The Minecraft Server Manager That *Actually* Works\nBuilt by someone who was done with bloated panels, endless menus, and tools that break the moment you need them most.\nSpin up servers in minutes, configure your proxy without headaches, and link your own DNS name effortlessly.\nFast setup, clean controls, zero nonsensejust a manager that gets out of your way and lets you play.",
"install_methods": [
{
"type": "default",
"script": "ct/discopanel.sh",
"resources": {
"cpu": 4,
"ram": 4096,
"hdd": 15,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -2,6 +2,7 @@
"name": "Docker",
"slug": "docker-vm",
"categories": [
2,
3
],
"date_created": "2025-01-20",

View File

@ -2,7 +2,7 @@
"name": "Dotnet ASP Web API",
"slug": "dotnetaspwebapi",
"categories": [
21
20
],
"date_created": "2025-01-15",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Emby Media Server",
"slug": "emby",
"categories": [
14
13
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "EMQX",
"slug": "emqx",
"categories": [
16
18
],
"date_created": "2024-05-02",
"type": "ct",
@ -33,7 +33,7 @@
},
"notes": [
{
"text": "Setup-Steps: Access Control \u27a1 Authentication \u27a1 Create \u27a1 Next \u27a1 Next \u27a1 Create \u27a1 Users \u27a1 Add \u27a1 Username / Password (to authenicate with MQTT) \u27a1 Save. You're now ready to enjoy a high-performance MQTT Broker.",
"text": "Setup-Steps: Access Control Authentication Create ➡ Next ➡ Next ➡ Create Users ➡ Add ➡ Username / Password (to authenicate with MQTT) Save. You're now ready to enjoy a high-performance MQTT Broker.",
"type": "info"
}
]

View File

@ -2,7 +2,7 @@
"name": "PVE LXC Execute Command",
"slug": "lxc-execute",
"categories": [
3
1
],
"date_created": "2025-09-18",
"type": "pve",

View File

@ -2,6 +2,7 @@
"name": "FileBrowser Quantum",
"slug": "filebrowser-quantum",
"categories": [
1,
11
],
"date_created": "2025-06-18",

View File

@ -2,6 +2,7 @@
"name": "File Browser",
"slug": "filebrowser",
"categories": [
1,
11
],
"date_created": "2024-05-02",

View File

@ -2,7 +2,7 @@
"name": "FileFlows",
"slug": "fileflows",
"categories": [
14
13
],
"date_created": "2025-03-24",
"type": "ct",

View File

@ -23,7 +23,7 @@
"ram": 2048,
"hdd": 10,
"os": "debian",
"version": "13"
"version": "12"
}
},
{

View File

@ -2,7 +2,7 @@
"name": "Ghost",
"slug": "ghost",
"categories": [
10
25
],
"date_created": "2025-01-10",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Ghostfolio",
"slug": "ghostfolio",
"categories": [
7
23
],
"date_created": "2025-09-29",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Gitea",
"slug": "gitea",
"categories": [
8
20
],
"date_created": "2024-07-26",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "grocy",
"slug": "grocy",
"categories": [
5
24
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Heimdall Dashboard",
"slug": "heimdall-dashboard",
"categories": [
6
10
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Homer",
"slug": "homer",
"categories": [
5
10
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "PVE Host Backup",
"slug": "host-backup",
"categories": [
7
1
],
"date_created": "2024-04-29",
"type": "pve",

View File

@ -2,7 +2,7 @@
"name": "Immich",
"slug": "immich",
"categories": [
7
13
],
"date_created": "2025-06-01",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "InfluxDB",
"slug": "influxdb",
"categories": [
7
8
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Jeedom",
"slug": "jeedom",
"categories": [
0
16
],
"date_created": "2025-07-29",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Jellyfin Media Server",
"slug": "jellyfin",
"categories": [
14
13
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "jotty",
"slug": "jotty",
"categories": [
7
12
],
"date_created": "2025-10-21",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Kasm",
"slug": "kasm",
"categories": [
0
9
],
"date_created": "2025-05-26",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Kavita",
"slug": "kavita",
"categories": [
5
13
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Komga",
"slug": "komga",
"categories": [
5
13
],
"date_created": "2024-11-15",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Kubo",
"slug": "kubo",
"categories": [
11
4
],
"date_created": "2024-06-27",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Lidarr",
"slug": "lidarr",
"categories": [
11
14
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "PVE LXC Deletion",
"slug": "lxc-delete",
"categories": [
3
1
],
"date_created": "2025-01-21",
"type": "pve",

View File

@ -2,7 +2,7 @@
"name": "Mafl",
"slug": "mafl",
"categories": [
7
10
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Mariadb",
"slug": "mariadb",
"categories": [
0
8
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Matterbridge",
"slug": "matterbridge",
"categories": [
18
17
],
"date_created": "2024-06-12",
"type": "ct",

View File

@ -2,7 +2,8 @@
"name": "MediaManager",
"slug": "mediamanager",
"categories": [
14
14,
13
],
"date_created": "2025-08-28",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Meilisearch",
"slug": "meilisearch",
"categories": [
0
8
],
"date_created": "2025-04-04",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "MeshCentral",
"slug": "meshcentral",
"categories": [
16
4
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Metabase",
"slug": "metabase",
"categories": [
7
9
],
"date_created": "2025-11-16",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "PVE Processor Microcode",
"slug": "microcode",
"categories": [
6
1
],
"date_created": "2024-04-29",
"type": "pve",

View File

@ -2,6 +2,7 @@
"name": "Mikrotik RouterOS CHR",
"slug": "mikrotik-routeros",
"categories": [
2,
4
],
"date_created": "2024-05-02",

View File

@ -2,7 +2,7 @@
"name": "MinIO",
"slug": "minio",
"categories": [
9
8
],
"date_created": "2025-02-13",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "MongoDB",
"slug": "mongodb",
"categories": [
9
8
],
"date_created": "2024-05-18",
"type": "ct",

View File

@ -1,35 +1,35 @@
{
"name": "Monica",
"slug": "monica",
"categories": [
6
],
"date_created": "2025-01-28",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://github.com/monicahq/monica/tree/4.x/docs",
"website": "https://www.monicahq.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/monica.webp",
"config_path": "/opt/monica/.env",
"description": "Monica is an open-source personal CRM designed to help you manage and strengthen your relationships. It allows you to store important details about your contacts, track interactions, set reminders for special dates, and log activities\u2014all in one secure, private place. Perfect for busy individuals, Monica helps you stay organized, remember meaningful moments, and nurture your connections without ads or data mining. Install it on your own server for full control!",
"install_methods": [
{
"type": "default",
"script": "ct/monica.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": "admin@helper-scripts.com",
"password": "helper-scripts.com"
},
"notes": []
"name": "Monica",
"slug": "monica",
"categories": [
24
],
"date_created": "2025-01-28",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://github.com/monicahq/monica/tree/4.x/docs",
"website": "https://www.monicahq.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/monica.webp",
"config_path": "/opt/monica/.env",
"description": "Monica is an open-source personal CRM designed to help you manage and strengthen your relationships. It allows you to store important details about your contacts, track interactions, set reminders for special dates, and log activitiesall in one secure, private place. Perfect for busy individuals, Monica helps you stay organized, remember meaningful moments, and nurture your connections without ads or data mining. Install it on your own server for full control!",
"install_methods": [
{
"type": "default",
"script": "ct/monica.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": "admin@helper-scripts.com",
"password": "helper-scripts.com"
},
"notes": []
}

View File

@ -2,7 +2,7 @@
"name": "PVE Monitor-All",
"slug": "monitor-all",
"categories": [
9
1
],
"date_created": "2024-04-29",
"type": "pve",

View File

@ -2,7 +2,7 @@
"name": "MQTT",
"slug": "mqtt",
"categories": [
16
18
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "n8n",
"slug": "n8n",
"categories": [
19
16
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Navidrome",
"slug": "navidrome",
"categories": [
10
13
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Neo4j",
"slug": "neo4j",
"categories": [
9
8
],
"date_created": "2024-10-20",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "NetBox",
"slug": "netbox",
"categories": [
5
4
],
"date_created": "2024-11-17",
"type": "ct",
@ -13,7 +13,7 @@
"website": "https://netboxlabs.com/products/netbox/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/netbox.webp",
"config_path": "/opt/netbox/netbox/netbox/configuration.py",
"description": "NetBox is the source of truth for everything on your network, from physical components like power systems and cabling to virtual assets like IP addresses and VLANs. Network automation and observability tools depend on NetBox\u2019s authoritative data to roll out configurations, monitor changes, and accelerate operations across the enterprise",
"description": "NetBox is the source of truth for everything on your network, from physical components like power systems and cabling to virtual assets like IP addresses and VLANs. Network automation and observability tools depend on NetBoxs authoritative data to roll out configurations, monitor changes, and accelerate operations across the enterprise",
"install_methods": [
{
"type": "default",

View File

@ -2,7 +2,7 @@
"name": "PVE Netdata",
"slug": "netdata",
"categories": [
9
1
],
"date_created": "2024-04-29",
"type": "addon",

View File

@ -2,7 +2,7 @@
"name": "NextcloudPi",
"slug": "nextcloudpi",
"categories": [
7
2
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "NocoDB",
"slug": "nocodb",
"categories": [
7
25
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "NPMplus",
"slug": "npmplus",
"categories": [
3
21
],
"date_created": "2025-03-13",
"type": "ct",

View File

@ -2,7 +2,8 @@
"name": "OAuth2-Proxy",
"slug": "oauth2-proxy",
"categories": [
21
4,
6
],
"date_created": "2025-05-28",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "OpenMediaVault",
"slug": "omv",
"categories": [
7
2
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "openziti-controller",
"slug": "openziti-controller",
"categories": [
6
4
],
"date_created": "2025-04-14",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "openziti-tunnel",
"slug": "openziti-tunnel",
"categories": [
6
4
],
"date_created": "2025-04-02",
"type": "ct",

View File

@ -1,44 +1,44 @@
{
"name": "Outline",
"slug": "outline",
"categories": [
6
],
"date_created": "2025-02-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.getoutline.com/s/hosting/",
"website": "https://www.getoutline.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/outline.webp",
"config_path": "/opt/outline/.env",
"description": "The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible. It\u2019s time to get your team\u2019s knowledge organized.",
"install_methods": [
{
"type": "default",
"script": "ct/outline.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 8,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "After installation finishes, application will do a database migration so web UI might be unavailable for a minute or two. Also you need to manually add authentication and/or enable HTTPS.",
"type": "info"
"name": "Outline",
"slug": "outline",
"categories": [
12
],
"date_created": "2025-02-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.getoutline.com/s/hosting/",
"website": "https://www.getoutline.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/outline.webp",
"config_path": "/opt/outline/.env",
"description": "The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible. Its time to get your teams knowledge organized.",
"install_methods": [
{
"type": "default",
"script": "ct/outline.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 8,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
{
"text": "Configuration file is at: `/opt/outline/.env`. Modify to suit your environment.",
"type": "info"
}
]
"notes": [
{
"text": "After installation finishes, application will do a database migration so web UI might be unavailable for a minute or two. Also you need to manually add authentication and/or enable HTTPS.",
"type": "info"
},
{
"text": "Configuration file is at: `/opt/outline/.env`. Modify to suit your environment.",
"type": "info"
}
]
}

View File

@ -2,7 +2,7 @@
"name": "Palmr",
"slug": "palmr",
"categories": [
6
11
],
"date_created": "2025-08-08",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Pangolin",
"slug": "pangolin",
"categories": [
5
21
],
"date_created": "2025-11-01",
"type": "ct",
@ -13,7 +13,7 @@
"config_path": "/opt/pangolin/config/config.yml",
"website": "https://pangolin.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pangolin.webp",
"description": "Pangolin securely routes traffic over WireGuard tunnels to any private network. It works like a reverse proxy that spans multiple networks \u2014 no public IPs, DNS setup, or certificates required.",
"description": "Pangolin securely routes traffic over WireGuard tunnels to any private network. It works like a reverse proxy that spans multiple networks no public IPs, DNS setup, or certificates required.",
"install_methods": [
{
"type": "default",

View File

@ -2,7 +2,7 @@
"name": "PBS Processor Microcode",
"slug": "pbs-microcode",
"categories": [
6
1
],
"date_created": "2025-02-07",
"type": "pve",

View File

@ -2,7 +2,7 @@
"name": "Pelican Panel",
"slug": "pelican-panel",
"categories": [
21
24
],
"date_created": "2025-02-27",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Pi.Alert",
"slug": "pialert",
"categories": [
16
4
],
"date_created": "2024-05-02",
"type": "ct",

View File

@ -2,7 +2,7 @@
"name": "Plex Media Server",
"slug": "plex",
"categories": [
14
13
],
"date_created": "2024-05-02",
"type": "ct",

Some files were not shown because too many files have changed in this diff Show More