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]
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