Git Updater
Git Updater
Description
This plugin was originally designed to simply update any GitHub hosted WordPress plugin or theme. Currently, plugins or themes hosted on Bitbucket, GitLab, Gitea, or Gist are also supported via additional API plugins. Additionally, self-hosted git servers are supported.
Your plugin or theme must contain a header in the style.css header or in the plugin's header denoting the location on GitHub. The format is as follows.
GitHub Plugin URI: https://github.com/afragen/git-updater
or
GitHub Theme URI: https://github.com/afragen/test-child
...where the above URI leads to the owner/repository of your theme or plugin. The URI format is https://github.com/<owner>/<repo>. You must not include any extensions like .git.
API Plugins
API plugins for Bitbucket, GitLab, Gitea, and Gist are available. API plugins are available for a one-click install from the Add-Ons tab.
Sponsor
Purchase a license at the Git Updater Store. An unlimited yearly license is very reasonable and allows for authenticated API requests. There is an initial free trial period. After the trial period Git Updater will not be able to make authenticated API requests.
You can sponsor me on GitHub to help with continued development and support.
Headers
The following headers are available for use depending upon your hosting source.
GitHub
- GitHub Plugin URI
- GitHub Theme URI
- GitHub Languages
Installation
Go to git-updater.com to download and install the latest version.
Faq
Knowledge Base
Comprehensive information regarding Git Updater is available in the Knowledge Base.
Slack
We now have a Slack team for Git Updater. Please click here for an invite. You will be automatically added to the #general and #support channels. Please take a look at other channels too.
Translations
If you are a polyglot I would greatly appreciate translation contributions to GlotPress for Git Updater.
Changelog
[unreleased]
14.4.0 / 2026-08-27
- don't use
newest_tagas a proxy inuse_release_asset()— release assets are always resolved forrelease_assetrepos on the primary branch (or a switch to it); a missing release asset now fails the update with an empty download link instead of falling back to unbuilt branch/tag source (GitHub, Gitea) - fix
construct_download_link()reading stale tag data — it now readstagsandnewest_tagfrom the repo cache (get_repo_cache()) in place of$this->typevalues, so non-fetch callers (rollback, branch switch, REST update, branch listings) resolve the correct zipball endpoint and release-asset gate even when the repo object has not been hydrated by a fetch - compute the download link on the fly in
plugins_api(),themes_api(), andupdate_site_transient()viaconstruct_download_link()instead of reading the repo object'sdownload_link— the object property could be empty or stale (tag-specific/non-release-asset), while the cache-backed computation always serves the canonical package URL without persisting anything - refactor tag-specific release asset logic — tags only get release asset download links when
release_assetis true and the tag matches the newest release asset version (stable or dev based ongu_dev_release_assetfilter); non-matching tags and all branches get zipball download links; release asset lookups use cached data instead of API calls;release_assetcache column is now a boolean andrelease_asset_downloadis set to the newest release asset URL - fix dev release asset
newest_tagmismatch — when the newest dev release asset key does not matchremote_version(e.g., dev asset key is1.3.0-beta1butremote_versionis1.3.0, or dev asset key is28.3-nightlybutremote_versionis28.3.20260824),newest_tagis set toremote_versionto ensure consumers receive accuratedownload_linkdata - fix download-link decision in non-fetch callers —
use_release_asset()now decides from the explicit target branch/tag instead of the stale$this->type->branch, so branch switches, tag rollbacks, and branch listings get the correct release asset or zipball even when the repo object reflects a previously tracked branch - fix tag rollback downloads the latest release asset —
construct_download_link()now fetches the release asset for the specific tag being rolled back to instead of always returning the latest release; tag-specific assets are not cached as the primaryrelease_asset_download - remove
ensure_download_data()— the cache-only hydration bridge is no longer needed:get_remote_repo_meta()sets the correct branch-or-tagdownload_linkon the config, and the consumers (plugins_api(),themes_api(),update_site_transient()) skip waiting repos or only serve repos with a completed fetch, so the fallback's branch/tag logic was dead weight - fix non-dev release asset download link preferring branch over tag —
construct_download_link()keeps the newest-tag URL when the repo is on its primary branch with tags, and the branch URL only when on a non-primary branch; a resolved release asset (stable or dev) still wins over either - fix
gu_dev_release_assetone-sided asset maps —construct_download_link()no longer requires both stable and dev asset maps to be populated; a dev-only repo (emptyassets) now resolves the dev asset instead of falling through to the zipball, and a stable-only repo still resolves the stable asset - fix
gu_dev_release_assetdownload overriding an existing link —construct_download_link()now evaluates the dev release asset even when the repo object already carries a zipball or stabledownload_link, so the dev asset URL wins when newer instead of the consumer listing the stale zipball; a non-dev or older-dev link is left untouched - fix
gu_dev_release_assethandling in cache-only consumers — the dev-release-asset filter is honored inconstruct_download_link()at fetch time (picking the dev asset URL when newer), andnewest_tagis set to the dev version when the filter is active;update_site_transient()/plugins_api()/themes_api()serve the persisted values on cache-only requests; also guard against a non-scalarrelease_asset_download - fix stale
newest_tag/download_linkinupdate_site_transient(),plugins_api(), andthemes_api()for release-asset repos — persistnewest_tagas a named cache entry at fetch time and setdownload_linkon the config viaconstruct_download_link(), so cache-only requests serve the persisted values and no longer see the'0.0.0'sentinel or an empty package;themes_api()now also returnsdownload_link - fix recurring "Cron unschedule event error for hook: gu_get_remote_plugin/gu_get_remote_theme" —
merge_and_reschedule_cron_batch()now skips re-scheduling when a due event for the hook already exists (the wp-cron runner is executing it), so the plugin's wp-cron-init no longer re-adds the event at a future timestamp, which kept repos perpetually pending and raced core's post-run unschedule (the WP corecould_not_setfalse-positive, Trac #57271); the fallback re-checkswp_next_scheduled()before re-scheduling so a concurrent write that succeeded is not duplicated - fix intermittent "Cron unschedule event error for hook: gu_get_remote_plugin/gu_get_remote_theme" —
merge_and_reschedule_cron_batch()now performs the unschedule + reschedule in a singlecronoption write instead ofwp_unschedule_hook()+wp_schedule_single_event(), so a transient DB write failure or a concurrent request can no longer trigger the corecould_not_seterror or leave duplicate cron events - add filter
git_updater_skip_oauth_reminderto skip the OAuth email reminder and change the admin notice on a per-provider basis — when the filter returns true for a provider, the email reminder is skipped and the admin notice shows "OAuth reminder suppressed by filter" instead of the standard "access was revoked, please reconnect" message - fix release-asset download links on first run — run
sort_tags()inget_remote_api_tag()sonewest_tagis set beforeconstruct_download_link(), reorderget_remote_repo_meta()to build the download link beforepopulate_api_data()merges cache data, and drop the now-redundantsort_tags()call frompopulate_api_data(); the first request now resolves the release-asset URL instead of falling back to the zipball - fix stale release-asset cache after a remote version change — when the fetched remote version differs from the cached version,
maybe_extend_repo_cache()now drops the cachedrelease_assets,release_asset, andrelease_asset_downloadentries so the lazy release-asset fetch rebuilds them from the new remote during the same cycle instead of serving the previous version's asset list and download URL - fix repeated
/releasesAPI calls in a fetch cycle —parse_branch_response()now seedstype->branchesbefore resolving per-branch download links souse_release_asset()/is_tag_target()classify branch targets (not tags) during the loop; without the seeding every branch of a release-asset repo was treated as a tag and eachconstruct_download_link()re-fetched/releases(GitHub, Gitea, GitLab, Bitbucket) - fix within-cycle release-asset refetch —
get_api_release_assets()andget_api_release_asset()now read the repo cache without TTL gating (freshness is enforced bymaybe_extend_repo_cache()dropping the entries on version change), so repeatedconstruct_download_link()calls in one cycle reuse the freshly fetched asset data instead of re-fetching per call - extend the version-change release-asset cache invalidation to interrupted prior cycles — the
release_assets/release_asset/release_asset_downloadunset now fires whenever the cached version differs from the freshly fetched one, no longer requiring a completeranbookkeeping, since the non-gated reads make that unset the only invalidation - fix tests for WordPress 7.1's duplicated "Icon collection is already registered" / "Icon is already registered"
_doing_it_wrongnotices — unhook_wp_register_default_icon_collections(priority 0) and_wp_register_default_iconsbefore thedo_action('init')in the Additions settings test, mirroring core's_unhook_font_registration()
14.3.0 / 2026-08-08
- fix
use_release_asset()first-run gating — restore thenewest_tagproxy instead of gating on the cachedrelease_assetslist, which is only populated after the decision; when no release asset is found the update fails with an empty download link rather than falling back to unbuilt tag source (GitHub and Gitea) - update
coverage-exclude.jsonmultisite exclusion forOAuth_Connect.phpfrom stale line 343 to the current multisite-only branch at line 362 - guard all remaining
ReflectionMethod::setAccessible()/ReflectionProperty::setAccessible()calls in tests withPHP_VERSION_ID < 80100to avoid deprecation on PHP 8.5 - email the site admin when a provider's OAuth token refresh fails and the token is deleted, with a 36-hour reminder cron while the token remains empty; a "token is empty" variant of the reminder email is sent only to premium license holders
- show the OAuth revocation notice on the settings page whenever the Connect button is displayed (no token stored), not only when the revoked flag is set
14.2.3 / 2026-08-05
- remove filter
gu_dev_release_asset_version - for dev release assets use actual remote version number if different from release asset version
14.2.1 / 2026-08-04
- add filter
gu_dev_release_asset_versionfor devs who do it differently
14.2.0 / 2026-07-29
- delete a provider's OAuth token automatically when a token refresh returns an empty
access_token— the Connect button reappears and a "access was revoked, please reconnect" notice is shown (via a persistent per-provider option flag) so the user knows to re-authorize on the provider site - switch OAuth revocation notice from a 15-minute transient to a persistent site option flag (
gu_oauth_revoked_{provider}) so the notice survives until the admin reconnects - clear the local stale credential in
add_auth_header()when a proactive refresh fails and deletes the token, avoiding a wasted 401 round-trip with the now-deleted token
14.1.0 / 2026-07-24
- add body-based "Bad Credentials" detection to API error handling — when a response (200 or 4xx) contains this message, Git Updater now automatically attempts a token refresh and retries the request, improving recovery from invalid/expired tokens that aren't signaled by 401/403 status codes
- refactor
API::api()method — extracted token refresh retry logic intomaybe_refresh_token_and_retry(),should_attempt_token_refresh(), andhas_bad_credentials_message()for improved readability and testability - add comprehensive tests for new token refresh scenarios including 200/4xx with "Bad Credentials", ensuring correct behavior with and without refresh tokens
- fix
GitHub_API::construct_download_link()clobbering a valid cachedrelease_asset_downloadwithfalsewhen no release assets are returned — only cache a resolved asset URL - fix
REST_API::build_download_metadata()to build auth headers after the final download link is resolved, so release asset and redirect overrides get correct headers - add
: boolreturn type declaration toGU_Trait::use_release_asset() - fix
Repo_List_Table::column_default()to returnfalsefor emptyrelease_asset/private_package/uses_litecolumns - implement two-step download flow for
git-updater-liteto resolve cache mismatch between signed URL TTL and 6-hour client cache - add REST endpoint for generating fresh 60-second signed URLs for lite updates
- isolate token URL generation strictly to the
update-apiroute; main plugin continues to receive 12-hour signed URLs - add server-centric domain validation for private packages (optional, filterable via
git_updater_lite_authorized_domains) - new
Lite_Domainssettings class and UI for managing authorized domains per slug with automatic subdomain matching - new "Uses Git Updater Lite" checkbox in Additions settings to manually flag packages for domain configuration
- auto-detect private packages with
Update URIheader for domain configuration recommendations - client-side interception in
git-updater-liteto fetch fresh download tokens viaupgrader_pre_downloadhook - add domain header (
X-GU-Site-Domain) to download token requests for server-side validation - add comprehensive documentation in
docs/lite-update-flow.mdexplaining the new download flow and security features - add 100% test coverage for new
Lite_Domainsclass,get_download_tokenendpoint, anduses_liteUI elements
14.0.2 / 2026-07-22
- always show API errors in error log
- flush cache on update to 14.0.2
14.0.0 / 2026-07-21
- fix
Additions/Repo_List_Tablesecurity — remove blanketWordPress.Security.ValidatedSanitizedInputsuppression; add capability check (manage_options/manage_network_options) and proper nonce verification on the delete path; sanitize bulkslugarray so checkbox deletions actually work; fixwp_slash→wp_unslashonpage/tabreads; remove orphaned unverified_wpnonce_listfield - fix test isolation: clear the WordPress theme cache in
GU_Test_Case::tear_down()so each test re-scans installed themes; otherwise a stalewp_get_themes()cache from a prior test hid thetest-gu-themefixture from Git Updater'sget_theme_meta(), causingTest_Theme_Get_Theme_MetaandTest_Rest_Update_Full_Pathfailures in the full suite (they passed in isolation) - add
index.phpto thetest-gu-themefixture so it is a valid standalone WordPress theme - new easter egg: the repo dashicon is now a button that flushes the cache of that specific repository via the
flush-repo-cacheREST endpoint (no page navigation); the broken dashicon is revealed on a successful flush - fix
Rest_Update::update_plugin()inverted activation check —activate_plugin()returnsnullon success andWP_Erroron failure; old codeif ( ! $activate )silently swallowed failures; now reports error message fromWP_Error - fix
API::api()missingWP_Errorcheck after OAuth retry — retry response now validated like the initial request - fix
API::get_release_asset_redirect()AWS cache age calculation to use$this->hoursinstead of hardcoded-12 hours - fix
OAuth_Connect::refresh_token()race condition — use site transient lock and result coordination so concurrent requests reuse a successful refresh instead of re-posting the (potentially rotated) refresh token - fix switch statements in
GU_Upgrade::run(),Rest_Update::get_webhook_source(), andCLI_Integration::process_args()to useswitch ( true )so boolean/isset cases actually match - fix
Base::set_options_filter()to useget_site_option( 'git_updater', [] )preventing TypeError on PHP 8+ when option absent - fix
Messages::get_license()dismissible notice ID mismatch —data-dismissiblenow matchesis_admin_notice_active()check - fix
Additions/Settings::callback_field()missingechoonesc_attr()for inputidattribute - fix
Theme::get_theme_meta()bitwise&changed to logical&&in URI header filter - fix
Plugin::get_plugin_meta()misplaced parenthesis inempty()call for URI header filter - fix
GU_Trait::parse_header_uri()to return early for malformed URLs whereparse_url()returns false - fix
Plugin::get_plugin_meta()andTheme::get_theme_meta()— checkfile_get_contents()return before processing.git/HEAD; computearray_keys( self::$extra_headers )once before loop; callupdate_site_option()once after loop instead of per-iteration - fix
API::api()— storejson_decode()result in variable to avoid double decode; use shorter error cache timeout (5 min) for transient HTTP errors (503, 429) vs 60 min for permanent (404, 410) - fix
GU_Trait::get_class_vars()to cacheReflectionObjectandPropertyobjects (not values) reducing reflection overhead - fix
Basic_Auth_Loader::get_credentials()to cache merged repo configs as static property instead of rebuilding on every API call - fix
GU_Trait::waiting_for_background_update()to batch-load allghu-*cache options in single query instead of N+1 - fix
GU_Trait::delete_all_cached_data()to remove redundant bulkDELETEquery —delete_site_option()already handles both DB and cache invalidation - fix
Base::set_defaults()to useupdate_site_option()instead ofadd_site_option()which silently fails if option exists; remove dead$this->$type->requires = ''assignment - fix
Rest_Update::update_plugin()andupdate_theme()to use direct array key lookup instead of foreach loop - fix
Bootstrap::remove_cron_events()to includegu_delete_access_tokensin cleanup list - fix
GU_Trait::merge_and_reschedule_cron_batch()to return early if hook already scheduled - fix
Remote_Management::reset_api_key()to atomically replace API key instead of delete-then-recreate - fix
Branch::plugin_branch_switcher()to check cache before triggering full API metadata fetch cycle - fix
Add_Ons::get_addon_api_results()to cache partial results with selective retry — only missing addons are fetched on cache hit, full results cached 7 days, partial 8 hours - fix
REST_API::get_remote_repo_data()to return cached update data instead of forcingwp_update_plugins()andwp_update_themes()full update cycle - add fallback cache timeout in
set_repo_cache_timeout()to prevent infinite re-fetching when API sub-calls fail (partialran) - added support for OAuth tokens
- add "Remove Token" button to settings — visible for manual API tokens (PATs) only, not OAuth tokens
- updated for Claude Opus 4.7 security review
- remove release asset redirect from
GitHub_API, no longer used - add tests for
get_release_asset_redirect()AWS expiration and REST key paths, achieving 100% line coverage onAPI.php - fix pre-existing test failure
test_get_api_data_covers_release_asset_download_pathby seedingrelease_assetscache entry - update
Freemius/wordpress-sdk
13.0.1 / 2026-06-04
- remove all Authorization headers from REST endpoints, under specific circumstances this could have leaked access tokens. Thanks to Simon Tiplady, Timo Klemm, and Thomas Johannessen for disclosure.
- Updating private repositories using Git Updater Lite will not work with this version
13.0.0 / 2026-05-31 🎂
- use
afragen/wp-readme-parserdrop-in replacement forafragen/wordpress-plugin-readme-parser - update requirements to PHP 8.0 for new parser due to testing
- add
maybe_extend_repo_cache()to update the timeout if the remote and cached version numbers are same, should avoid API calls for current data - update
(get|set)_repo_cache() - fix wp-cron and multisite
- more efficient use of cache
- decrease data stored with API request response
- fix
Release Assetheader to save as boolean - add
populate_api_data()to populate even when API requests are skipped - set
error_cacheto its own cached state outside the main repo cache - fix Add_Ons cache to use dedicated repo key with proper timeout handling
- fix
GitHub_API::get_remote_readme()missing return statement - fix
GU_Trait::use_release_asset()undefined property PHP 8.x warnings via null coalescing - fix
Basic_Auth_Loader::get_slug_for_credentials()array slug check order —is_array()must precedesanitize_text_field()so TGMPA array slugs are not silently discarded - borrow function from FAIR Connect to sort plugins_api modal tabs in correct order
- add PHPStan level 6 testing and a whole mess of phpunit tests with load of help from Claude
- consolidate cron task to eliminate potential duplication of API requests
- update instructions for CLI installation
12.24.2 / 2026-03-25
- update freemius/wordpress-sdk
- fix delete_all_cached_data() for multisite thanks Eileen Mack
12.24.1 / 2026-03-18
- fix
flush-repo-cacheREST endpoint, was getting caught in$existing_cache - added
should_run_on_current_page()and check pages for loading certain parts of plugin - update
$sluginitialization inBase::upgrader_source_selection()asget_repo_slugs()now with type checking - fix language pack GitHub download URI
- remove type hint for
$sourceinBase::upgrader_source_selection()as it can beWP_Error
12.24.0 / 2026-03-11
- update erusev/parsedown to 1.8
- remove soft match in
get_repo_slugs() - add guard to
set_readme_info() - add function to check timeout validity
- re-use valid cache timeout
- refactor getting cache key to
get_cache_key() - ensure newest tag present in release assets array
- check to see
$existing_cachetimeout is valid - update
Language_APIto correctly get credentials - add missing API values for packages as Additions
12.23.1 / 2026-02-12
- add guard to release asset development download link in REST API
- fix potential race condition when saving cache to multi-server/clustered environments #1133, thanks @Ipstenu
12.23.0 / 2026-02-11
- guard on
ReflectionProptery::setAccessible()deprecated for PHP 8.5 and included in PHP 8.1+ - case-insensitive matching for
alpha|beta|RC - make
Language_Pack::update_site_transient()a static - fix REST API to return correct download link depending upon development channel
12.22.0 / 2026-01-13
- added
gu_dev_release_assetfilter for dev release assets - added
channelquery arg for dev release assets when usingupdate-apiREST endpoint - send a saved access token with
update-apiREST API if one exists - omit non-shared packages from REST API
12.21.0 / 2025-12-31 🎆
- remove
git_updater_plugin_updatesandgit_updater_theme_updatesoptions, see #1119 - add
gu_plugin_name()to return plugin name, slug or slug-didhash - change
can_update()check tomanage_optionsforDISALLOW_FILE_MODSconstant - MIT to GPL-3.0-or-later because of distributed components, etc
- cast
$responseelements to object inparse_contents_response()
12.20.2 / 2025-12-08
- harden REST API data for versions if relesase_assets and tags are empty -- this can happen if too many tags are created that aren't semver format
- limit REST API to return last 20 versions
- update REST API conditional logic for setting release asset download link
- add guard for missing/empty assets in
Readme_Parser - move some
phpcs:disableto package header - update to
erusev/parsedown": "dev-master#0b274ac959624e6c6d647e9c9b6c2d20da242004"for PHP 8.5 compliance, thanks @thefrosty - standardize to
composer lintandcomposer format
12.20.1 / 2025-11-26
- initialize
$created_atvariable, possibly fixes PHP Error - update actions/checkout
- update mu-loader.php
12.20.0 / 2025-11-24
- move tag sort outside of loop
- use auth key for REST endpoint to flush repository cache for possible abuse
- added
Screenshotssection to plugin modal - get
created_atper release asset - update
freemius/wordpress-sdk - Cache Add-Ons for 7 days
12.19.0 / 2025-09-29
- setup for Gitea release assets
- use
mcaskill/composer-exclude-filesto exclude autoload offreemius/wordpress-sdk/start.php - harden
parse_meta_response() - modify dot org check for package added to mirror like AspireCloud
- don't overwrite
requiresandrequires_phpdata from readme.txt if already exists - correctly parse for multiple release assets per release
- update POT GitHub Action
- refactor
add_accept_header() - set
release_assetsandrelease_asset_downloadfor latest release asset
12.18.1 / 2025-08-06
- data check on release assets
12.18.0 / 2025-08-04
- update cache delete and don't use
wp_cache_flush - always show download link in REST endpoint
- improved reverse sort for branch/tag versions
- get all release assets from GitHub API and pick release asset download from release assets array, other APIs get latest release asset only
- update
parse_tag()andsort_tags() - update branch switching tags
12.17.3 / 2025-07-31
- add new
Securityheader with value of email or URI
12.17.2 / 2025-07-26
- update
GU_Freemiusfor FAIR installation
12.17.1 / 2025-07-20
- add remote data for
did,slug_hashif added viaAdditions - use
Bearerfor token with GitHub API
12.17.0 / 2025-07-14
- un-escape stuff, more uses of
use - add
Licenseheader info - add
Update URIheader info - add
get_did_hash()to get hash of DID - add
get_file_without_did_hash() - simplify check for
rename_on_activation() - update
freemius/wordpress-sdk
12.16.1 / 2025-06-12
- add DID
- update rollback sort
- update banner image
12.16.0 / 2025-06-09
- change callback from
new REST_API()to$this - collect
Author URIfrom headers. - add action hook to
Base::get_remote_repo_meta - get all versions of release assets, similar to tags/rollbacks
- add compatibility check for AspireUpdate and FAIR Package Manager
12.15.1 / 2025-05-20
- update stability of composer requirements
12.15.0 / 2025-05-20
- update to correct format of readme tags
- add correctly formated date/time for
update-apiREST endpoint - remove deprecated hooks from v10 and earlier
- add error checking to
parse_contents_response() - update Freemius/wordpress-sdk
- add support for
Plugin IDandTheme IDheaders for FAIR - update
composer.json
12.14.0 / 2025-02-26
- make sure proper release asset headers are added even if access token not set
- ensure short description is 150 characters or less
12.13.0 / 2025-02-21
- update caching
- add
versionsto REST endpoint for{plugins|themes|update}-api - update generate POT workflow
12.12.1 / 2025-02-12
- revert uninstall back to Freemius
12.12.0 / 2025-02-10
- save source with
Additions - update
Additions::deduplicate() - update
Base::upgrader_source_selection()rename to allow for AJAX installation, thanks @costdev - add
git-updater-collectionstoAdd-Ons - make list table show all elements
- add
Private Packageoption forAdditions, these private packages are not to be shared with aggregators - switch to standard
uninstall.phpas issue with callingFreemiusduring theirafter_uninstallhook - add early exit in
get_repo_slugs()during AJAX installation forAdd-Ons - remove soft match in
get_repo_slugs() - removed
Add_Ons::upgrader_source_selectionno longer needed - save/export tags from
readme.txtfor REST endpoint
12.11.0 / 2025-02-02
- update Additions to add additional listings
- more updates for possibly passing
null - update
REST_API::get_api_data - update
Themeto addtheme_urito update transient - update to pass complete data for multiple uses of
gu_additionshook
12.10.1 / 2025-01-30
- fix issue with release asset
- add guard to
Add-Ons - remove
git-updater-federationfromAdd-Ons
12.10.0 / 2025-01-29
- refactor
Add_Onsto useplugins-apiREST endpoint and standard plugin card - added features by @costdev for AJAXifying
- added parsing of
Update URIandRequires Pluginsheaders - increase requirements to PHP 8+
- added REST endpoint to export data from
Additions - added REST endpoint to export Update API data from
Additions - update Freemius/wordpress-sdk
- change 'API Add-Ons' to 'Add-Ons'
12.9.0 / 2025-01-07
- add API get for repo root contents for efficiency
- add feature to virtually add repos via Additions tab to server REST update-api endpoint
- switch to getting most data via API calls and not from locally installed files
- add REST endpoint to individually flush repo cache
- fix
Basic_Auth_Loader::get_slug_for_credentials()to get slug for gist - update
$release_asset_partsinBasic_Auth_Loader::unset_release_asset_auth()for AWS download link - improved release asset handling
12.8.0 / 2024-12-21
- update GitHub release asset parsing
- update
REST_APIfor Bitbucket update link - update
REST_APIforupdate-apiroute
12.7.2 / 2024-12-18
- update
freemius/wordpress-sdk - use
mcaskill/composer-exclude-filesto exclude autoloadingstart.phpfrom Freemius, issues arise - update
REST_API::get_api_data()to always get current release asset redirect as appropriate
12.7.1 / 2024-12-02
- use
get_file_date()to return plugin version - fix
API::get_dot_org_data()to work with WPE mirror
12.7.0 / 2024-11-30
- fix missing/incorrect textdomains
- look for
__()functions loading in hooks beforeinit - remove
load_plugin_textdomain() - add git host icon to single site theme description
- don't save to GitHub.com access token from single repo remote install
- fix PHP 8.1 creation dynamic variable from
class REST_API - update REST API response to return
plugins_api()orthemes_api()style response
12.6.0 / 2024-10-13
- check existence of
FS__RESOLVE_CLONE_ASbefore setting - add filter hook
gu_api_domainto set domain for default API updating - add filter hook
gu_ignore_dot_orgto completely ignore updates from dot org. Works as if every plugin/theme is in thegu_override_dot_orghook
12.5.0 / 2024-08-16
- update
class-parser.php - update
Requires PHPto 7.4 forclass-parser.php - update
Requires WPto 5.9 - update
freemius/wordpress-sdk - update
printf()inclass Branches - fix old
git-updater-proandgit-updater-additionstextdomains - update
Base::upgrader_source_selection()when trying to update$sourceand$new_sourcewhen destination directories are identical - remove unused parameters in certain functions
12.4.0 / 2024-03-04
- update
freemius/wordpress-sdk - update
class-parser.php - use
is_wp_version_compatible()andis_php_version_compatible()inGU_Trait::can_update_repo() - update
gu-loader.phpwith generic loader - update
Readme_Parser::trim_length
12.3.1 / 2023-10-19
- update
freemius/wordpress-sdk - WPCS 3.0.0 linting
- popup on icon for "Updates via Git Updater", thanks @BrianHenryIE
12.3.0 / 2023-08-10
- update Bitbucket Add-on message for consistency
- ensure
Shimavailable duringregister_activation_hook() - add conditional to
get_remote_api_branches()to ensure$responseis not a scalar - use null coalescing operator
- update for PHP 8.2
12.2.3 / 2023-06-27
- composer update
- get
gu_disable_cronhook result once per repository - ensure git class is instantiated when checking
waiting_for_background_update() - add check for
$response->errortoAPI::validate_response() - update
freemius/wordpress-sdkto 2.5.10
12.2.2 /2023-05-22
- add back Network only activate for multisite, may cause issue where post-license activation Freemius doesn't re-direct to network admin
- update anonymous functions as static functions for better performance
- composer update
12.2.1 / 2023-04-21
- ensure
$wp_filesystemset forBootstrap::rename_on_activation() - uninstall tested to function correctly
12.2.0 / 2023-04-20
- update
freemius/wordpress-sdk - update
afragen/wp-dismiss-notice - don't save unused data from
API_Common::parse_release_asset() - don't use Freemius uninstall, use previous
uninstall.php - more PHP 8.2 compatibility
- composer update
- update
REST_API::get_plugins_api_data()to return response without download link using boolean value indownloadquery arg - hide Freemius menus with
gu_hide_settingsfilter - more specific hiding of Git Updater settings
12.1.3 / 2023-03-20
- improved setting/default of
$options['bypass_background_processing'] - improved setting/default of
$options['branch_switch'] - display upgrade notice on
update-core.php - composer update
afragen/singletonfor PHP 8.2 compat
12.1.2 / 2023-02-08
- fix for webhook updating issue if
$branchesnot defined, thanks @awunsch
12.1.1 / 2023-02-07
- remove force of Network activation, messes up Freemius license activation on multisite
- composer update
12.1.0 / 2023-02-06
- further limit log of HTTP errors, trying for only once per plugin
- eliminate Freemius clone resolution popup
- update
Shim:move_dir()for improved error messaging - update comparison in
Base::upgrader_source_selectionof$sourceand$new_source
12.0.4 / 2023-01-27
- update to use
str_contains() - log HTTP errors only hourly
- update
Shim::move_dir()to exit early if source and destination differ only by case or trailing slash
12.0.3 / 2023-01-19
- update
Shimformove_dir()andwp_opcache_invalidate_directory() - composer update
12.0.2 / 2023-01-12
- PHP 8.1 compatibility fix, thanks @chesio
- other PHP 8.1 fixes
- declare
class APIvariable$type, avoid future PHP issues, thanks @chesio
12.0.1 / 2023-01-02
- cleanup parsing of GitHub release assets
- composer update to fix dependency conflict
12.0.0 / 2022-12-12
- ensure
$wp_filesystemis available - re-integrate Git Updater PRO
- integrate Git Updater Additions
- add git logo to subtab, hide for now
- load API tabs of installed/active API plugins
- set Git Updater to auto-update with new
$db_version - replace Appsero SDK with Freemius SDK
- suspend Freemius plugin updating for Git Updater
- fix uninstall.php for Freemius