Skip to content

Releases: stingray82/UUPD

2.0-Beta

05 Apr 14:07

Choose a tag to compare

2.0-Beta Pre-release
Pre-release

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

23 Mar 17:44

Choose a tag to compare

2.0-Alpha.1 Pre-release
Pre-release

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

23 Mar 14:54

Choose a tag to compare

2.0-Alpha Pre-release
Pre-release

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.

⚠️ This is a breaking change and is intended for testing and feedback only.
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:
    • vendor
    • slug
  • 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:

  1. Add a vendor to your config:

    'vendor' => 'mycompany'
    
  2. Update all filters to vendor-scoped versions:

    uupd/<filter>/<vendor>/<slug>
    
  3. 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

01 Feb 00:03

Choose a tag to compare

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_name to 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 server is a repo root URL (https://github.com/<owner>/<repo>)
  • The updater now accepts multiple common package fields: download_url, package, download_link, and download_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, set mode to github_release.
  • When a GitHub token is configured, requests to github.com / api.github.com may include auth headers (required for private repos/assets and rate limits).

1.4.0 — GitHub Releases improvements + private asset support - Beta

30 Dec 14:25

Choose a tag to compare

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_name to 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 server is 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, set mode to github_release.
  • When a GitHub token is configured, requests to github.com / api.github.com may include auth headers (required for private repos/assets and rate limits).

1.3.2

01 Dec 07:59

Choose a tag to compare

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

15 Aug 08:56

Choose a tag to compare

Increased Semantic Versioning and additional edge cases, review and improve PHP < 8.0 support

1.3.0

31 Jul 19:04

Choose a tag to compare

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

26 Jul 22:25

Choose a tag to compare

1.2.6 - Beta Pre-release
Pre-release

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.

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

11 Jul 09:31

Choose a tag to compare

  • 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+