Releases: stingray82/UUPD
2.0-Beta
No updates from Alpha. 1, and I have now added a migration guide for filters and other items for 2.0
2.0-Alpha.1
2.0.0-alpha.1
Improved
Filter system now supports layered resolution:
Global: uupd/
Vendor-wide: uupd//
Scoped: uupd///
Enables bulk overrides (e.g. all vendor plugins to staging server)
Maintains full backward compatibility with V2 scoped filters
Changed
apply_filters_scoped() now executes filters in sequence instead of a single scoped call
Filter callbacks consistently receive:
$value, $vendor, $slug, $instance_key
Documentation
Added “Filter Hierarchy” section to main docblock
Updated examples to demonstrate global and vendor-level overrides
Clarified removal of slug-only filters and replacement patterns
2.0-Alpha
UUPD 2.0.0-alpha - Breaking Change
This is the first alpha release of UUPD 2.0, a significant rewrite of the Universal Updater Drop-In.
Not recommended for production use yet.
Why this release matters
UUPD 2.0 introduces a vendor-aware identity model:
vendor + slug
Instead of relying on slug-only identification (as in V1.x), every updater instance is now uniquely scoped.
This solves a long-standing issue when:
- multiple plugins bundle UUPD
- different vendors use similar slugs
- filters or cache keys collide unexpectedly
👉 Result: more reliable updates, safer bundling, and better multi-plugin compatibility
What’s new in 2.0
Vendor-aware architecture
- Every updater instance is uniquely identified by:
vendorslug
- Prevents collisions across:
- filters
- cache keys
- update injections
Scoped filters (vendor + slug)
All filters are now namespaced:
uupd/<filter>/<vendor>/<slug>
Examples:
uupd/server_url/tdlab/my-plugin
uupd/github_token_override/tdlab/my-plugin
uupd/cache_prefix/tdlab/my-plugin
👉 Much safer when multiple products use UUPD
Vendor-aware caching
-
Transients now use:
uupd_<vendor>__<slug> -
Eliminates cross-plugin cache pollution
Improved GitHub Releases support
- Cleaner GitHub API handling
- Better asset resolution:
- preferred asset name
- fallback to
.zip
- Supports private repos via token
- Automatic header injection for:
- API requests
- release asset downloads
Mode handling retained (and clarified)
Still supports:
- JSON metadata mode
- GitHub Releases mode
- Auto-detection
With stricter detection rules:
- GitHub mode only triggers on repo root URLs
Visual assets system improved
- Icons, banners, screenshots now:
- configurable via config
- overridable via scoped filters
- Works consistently across both JSON and GitHub modes
Better debugging + logging hooks
-
Debug logging still controlled via:
updater_enable_debug -
New structured logging via:
uupd/log
Manual update checks (vendor-aware)
- “Check for updates” links now scoped correctly
- Clears both:
- metadata cache
- GitHub release cache
Breaking Changes
❗ vendor is now REQUIRED
All registrations must include:
'vendor' => 'your-namespace'
Slug-only filters removed
Old filters like:
uupd/server_url/my-plugin
❌ No longer supported
New format:
uupd/server_url/<vendor>/<slug>
Cache keys changed
- Old:
upd_<slug> - New:
uupd_<vendor>__<slug>
No backward compatibility layer
V2 does not include automatic fallback for V1-style usage.
Migration Notes
To upgrade from V1:
-
Add a
vendorto your config:'vendor' => 'mycompany' -
Update all filters to vendor-scoped versions:
uupd/<filter>/<vendor>/<slug> -
Clear transients after upgrading
What’s next
Planned before stable release:
- Performance tuning (reduce repeated hook execution)
- Optional backward compatibility helpers
- Expanded documentation and examples
- Additional safeguards for GitHub edge cases
Feedback
This is an early alpha — feedback is very welcome.
If you test this in real-world scenarios (especially multi-plugin environments), please report:
- unexpected update behavior
- missing hooks or filters
- GitHub edge cases
- performance issues
Changelog
[2.0.0-alpha]
Added
- Vendor-aware identity model (
vendor + slug) - Scoped filters (
uupd/<filter>/<vendor>/<slug>) - Scoped actions for update lifecycle
- GitHub API-based asset download support
- Configurable GitHub asset selection
- Vendor-aware cache key system
- Improved visual asset handling (icons, banners, screenshots)
- Structured logging hook (
uupd/log) - Vendor-aware manual update checks
Changed
- Complete internal rewrite of updater architecture
- Filter system migrated to vendor + slug scoping
- Cache prefix defaults updated to vendor-aware format
- GitHub release handling refactored
- Mode detection logic tightened (repo root only)
Removed
- Slug-only identity model
- Slug-only filters
- Legacy compatibility layer
Fixed
- Potential cache collisions across multiple plugins
- GitHub private asset authentication handling
- Inconsistent asset resolution across providers
1.4.0 — GitHub Releases improvements + private asset support
1.4.0 — GitHub Releases improvements + private asset support
Added
- GitHub Releases “mode” with repo-root auto-detection (
mode: auto|json|github_release) - Private-safe GitHub release asset downloading via the GitHub API asset endpoint
- Optional
github_asset_nameto select the preferred release zip (defaults to<slug>.zip) - Automatic GitHub auth header injection for downloads when a token is present
- Add slug return to debug to allow filtering of plugins to debug
Changed
- GitHub auto-detection now triggers only when
serveris a repo root URL (https://github.com/<owner>/<repo>) - The updater now accepts multiple common package fields:
download_url,package,download_link, anddownload_uri. - Plugin/theme update injection and the “View details” modal both use the resolved package URL.
- Extra debug output (when updater debug is enabled) shows the resolved download link to make troubleshooting easier.
Compatibility / Upgrade Notes
- Standard JSON and repo-root GitHub setups should continue working unchanged.
- If you previously used a non-root GitHub URL in
server, setmodetogithub_release. - When a GitHub token is configured, requests to
github.com/api.github.commay include auth headers (required for private repos/assets and rate limits).
1.4.0 — GitHub Releases improvements + private asset support - Beta
1.4.0 — GitHub Releases improvements + private asset support
Added
- GitHub Releases “mode” with repo-root auto-detection (
mode: auto|json|github_release) - Private-safe GitHub release asset downloading via the GitHub API asset endpoint
- Optional
github_asset_nameto select the preferred release zip (defaults to<slug>.zip) - Automatic GitHub auth header injection for downloads when a token is present
Changed
- GitHub auto-detection now triggers only when
serveris a repo root URL (https://github.com/<owner>/<repo>)
Compatibility / Upgrade Notes
- Standard JSON and repo-root GitHub setups should continue working unchanged.
- If you previously used a non-root GitHub URL in
server, setmodetogithub_release. - When a GitHub token is configured, requests to
github.com/api.github.commay include auth headers (required for private repos/assets and rate limits).
1.3.2
uupd 1.3.2 – add cache_prefix support to updater.php
- Bump internal updater version constant to 1.3.2
- Introduce new optional config key 'cache_prefix' (default 'upd_') for all
metadata transients - Add 'uupd/cache_prefix' per-slug filter so plugins/themes can override the
transient prefix in a central, controlled way - Use {cache_prefix}{slug} consistently for:
- remote metadata fetch error flags
- plugin update checks
- theme update checks
- plugin_info() and theme_info() detail popups
- manual check handling
- Keep previous behaviour by default (cache_prefix still defaults to 'upd_'),
preserving backward compatibility for existing integrations - Update docblocks and inline examples to document 'cache_prefix' usage
1.3.1
Increased Semantic Versioning and additional edge cases, review and improve PHP < 8.0 support
1.3.0
Added
New config option: 'allow_prerelease' => true enables support for prerelease versions (-alpha, -beta, -rc) during update checks.
Regex-based detection of prerelease versions using SemVer-style matching: 1.2.3-beta, 2.0.0-alpha.1, etc.
Fully backward-compatible: prereleases are skipped by default unless explicitly opted in.
Updated both plugin and theme update flows to honor prerelease rules.
Improved
Minor inline doc updates for better integration guidance.
1.2.6 - Beta
Added
- New config option:
'allow_prerelease' => trueenables support for prerelease versions (-alpha,-beta,-rc) during update checks. - Regex-based detection of prerelease versions using SemVer-style matching:
1.2.3-beta,2.0.0-alpha.1, etc. - Fully backward-compatible: prereleases are skipped by default unless explicitly opted in.
- Updated both plugin and theme update flows to honor prerelease rules.
Improved
- Minor inline doc updates for better integration guidance.
Please Note: I am still testing this but there shouldn't be breaking changes I will test on my plugins first which is fully scoped and will not effect anyone else this will likely become 1.3 when its released
1.2.5
- Improved: Update Handling now UUPD will handle 500/404 errors and pauses looking for updates until the next cycle without these changes it is possible that the server will be hit many times for an update, i.e on every admin init / load if returning 404 / 500 errors
- New: Filters to control error and Update ttl uupd_success_cache_ttl & uupd_fetch_remote_error_ttl
- Fixed Error Message for Key being null in PHP 8.1+