Enable automatic updates for WordPress plugins sold as Woocommerce downloadable products
Find a file
David Stone 21e011921d fix: feature-detect GLOB_BRACE for musl-libc PHP builds
The vendored yahnis-elsts/wp-update-server library calls glob() with
GLOB_BRACE | GLOB_NOESCAPE. GLOB_BRACE is not defined on PHP builds
linked against musl libc (Alpine, the official static FrankenPHP
releases). In PHP 8 this triggers a fatal 'Uncaught Error: Undefined
constant GLOB_BRACE' in Wpup_UpdateServer::findFirstAsset() every time
the update API tries to resolve a plugin banner or icon asset.

Add a Composer patch (via cweagans/composer-patches) that switches to
runtime feature detection: when GLOB_BRACE is available, behaviour is
identical; when it is missing, fall back to one glob() call per
extension and merge the results. The patched UpdateServer.php is also
committed so existing deployments (which ship vendor/ as-is) pick up
the fix without re-running composer install.

An equivalent upstream PR is being submitted to YahnisElsts/wp-update-server.
2026-05-13 02:11:55 -06:00
.agents chore: initialize aidevops planning infrastructure (#30) 2026-04-16 18:58:47 -06:00
assets feat: dashboard overhaul with Chart.js charts, KPI cards, and unified analytics view (#15) 2026-03-27 20:00:33 -06:00
inc feat(paypal): add comprehensive logging to PayPal Connect proxy (#29) 2026-04-08 14:50:54 -06:00
patches fix: feature-detect GLOB_BRACE for musl-libc PHP builds 2026-05-13 02:11:55 -06:00
templates fix: add unsubscribe link to release notification email templates 2026-05-05 19:36:53 -06:00
todo chore: initialize aidevops planning infrastructure (#30) 2026-04-16 18:58:47 -06:00
vendor fix: feature-detect GLOB_BRACE for musl-libc PHP builds 2026-05-13 02:11:55 -06:00
.gitignore chore: initialize aidevops planning infrastructure (#30) 2026-04-16 18:58:47 -06:00
AGENTS.md feat(paypal): add comprehensive logging to PayPal Connect proxy (#29) 2026-04-08 14:50:54 -06:00
composer.json fix: feature-detect GLOB_BRACE for musl-libc PHP builds 2026-05-13 02:11:55 -06:00
composer.lock chore: composer update phpstan-wordpress 2026-04-30 17:44:30 -06:00
LICENSE Initial Commit 2025-05-25 16:31:44 -06:00
phpstan.neon.dist chore: add szepeviktor/phpstan-wordpress and phpstan/extension-installer 2026-04-30 17:35:35 -06:00
README.md docs: add download badge and install hint to README 2026-04-26 23:59:34 -06:00
TODO.md chore: initialize aidevops planning infrastructure (#30) 2026-04-16 18:58:47 -06:00
wp-cli.yml feat(paypal): add comprehensive logging to PayPal Connect proxy (#29) 2026-04-08 14:50:54 -06:00
wp-update-server-plugin.php fix: assign Release_Notifier to global to prevent premature garbage collection (#28) 2026-04-02 23:49:24 -06:00

WP Update Server Plugin

Download Plugin Now   Upload the zip to WordPress like any other plugin

This project creates an update server to enable automatic updates for WordPress plugins which are Woocommerce downloadable products.

Requires

Features

Telemetry Dashboard

Opt-in telemetry from Ultimate Multisite installations. Tracks PHP/WP/plugin versions, network types, active addons, and error reports.

Site Discovery (Network Health)

Background scraper that discovers network health signals from domains found via passive install tracking. Runs daily via WP-Cron and processes up to 20 domains per batch.

What it detects:

  • Whether the site is live (HTTP 2xx)
  • Whether it is a production domain (not staging/dev/local)
  • SSL/HTTPS availability
  • Presence of a checkout or registration page (UM shortcodes/blocks)
  • Estimated subsite count (subdirectory path probing + HTML signals)
  • Network type: subdomain vs subdirectory
  • Ultimate Multisite version (from asset URLs or meta tags)

Health score (0100):

Signal Points
Site is live +20
Production domain +15
Has SSL +10
Has checkout page +15
Detected subsites > 5 +20
Detected subsites > 50 +10
UM version fingerprinted +10

Privacy and ethics:

  • Only scrapes publicly accessible pages (homepage, /register/)
  • Respects robots.txt — skips sites that disallow UltimateMultisiteBot
  • User-Agent: UltimateMultisiteBot/1.0 (+https://ultimatemultisite.com/bot)
  • 10-second timeout per request; unresponsive sites are marked failed and retried next run
  • Stores only aggregate signals, not page content

Dashboard answers:

  • How many production networks have 10+ subsites?
  • How many networks have a checkout page (are selling to customers)?
  • Distribution of health scores across all discovered domains