From 84a3d0b39b9aae8467849741fc4567f8741c5af1 Mon Sep 17 00:00:00 2001 From: ee-extensions release bot Date: Wed, 15 Jul 2026 20:22:26 +0000 Subject: [PATCH] release manifest-updater 1.1.4 --- manifest-updater.json | 8 ++++---- manifest-updater/manifest-updater-1.1.3.zip | Bin 11229 -> 0 bytes manifest-updater/manifest-updater-1.1.4.zip | Bin 0 -> 11251 bytes 3 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 manifest-updater/manifest-updater-1.1.3.zip create mode 100644 manifest-updater/manifest-updater-1.1.4.zip diff --git a/manifest-updater.json b/manifest-updater.json index 5c93a4c..0849e21 100644 --- a/manifest-updater.json +++ b/manifest-updater.json @@ -1,13 +1,13 @@ { "name": "Manifest Updater", "slug": "manifest-updater", - "version": "1.1.3", - "download_url": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/manifest-updater/manifest-updater-1.1.3.zip", + "version": "1.1.4", + "download_url": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/manifest-updater/manifest-updater-1.1.4.zip", "homepage": "https://gitea.mulligan.casa/mmulligan/manifest-updater", "requires": "6.1", "tested": "7.0", "requires_php": "8.1", - "last_updated": "2026-06-23 19:57:11", + "last_updated": "2026-07-15 20:22:26", "icons": { "1x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/manifest-updater/icon-128x128.png", "2x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/manifest-updater/icon-256x256.png" @@ -25,6 +25,6 @@ "description": "

A tiny, universal, self-hosted updater for plugins and themes. Network-activate it once; any project that opts in via its Update URI header gets WordPress-native update notifications, \"View details\", and one-click / auto updates — network-wide, with no per-project updater code and no tokens.

\n

It's \"Git Updater meets PUC,\" but thin: WordPress already does the hard part (scanning every installed project's header, routing by host, building the update transient, rendering the row, running the install). This plugin only supplies the piece core can't — reading your JSON manifest and returning the update.

\n

Opt in — the # fragment is the trigger. Append a fragment to the project's Update URI header; the fragment is the only trigger (paths are never sniffed), so it can't collide with a project that updates some other way:

\n\n

The part before # is the manifest URL; #manifest-updater.json opts the project in and selects JSON-manifest mode. The Update URI header also earns the project automatic protection from being overwritten by a same-named wordpress.org plugin or theme — for free, from core.

\n

Network-wide, so everything else can be site-active. get_plugins() / wp_get_themes() return every installed project regardless of activation, and the update transients are network-level on multisite — so updates surface and install network-wide while the projects themselves stay site-active, network-active, or inactive. Only Manifest Updater needs to be network-active.

\n

Same-origin image proxy. Icons and banners are re-served from your own site, so the browser never makes a cross-origin request to the update host — which sidesteps Private Network Access blocks, NAT hairpin, CORS, and service workers that otherwise leave the icon blank on the Updates screen.

", "installation": "
    \n
  1. Upload to wp-content/plugins/ and Network Activate it (it is Network: true).
  2. \n
  3. Give each project you want updated an Update URI header ending in #manifest-updater.json, pointing at its JSON manifest.
  4. \n
  5. That's it — updates appear on the normal Plugins / Updates screens, network-wide.
  6. \n
", "faq": "

Does the project have to be network-active to get updates?

\n

No. Only Manifest Updater is network-active. Opted-in projects can be site-active, network-active, or inactive and still receive updates.

\n

Where do manifests come from?

\n

Any URL you control, returning the PUC (\"Plugin Update Checker\") JSON format. Only version and download_url are required; everything else enriches the row and the details modal. Manifests are cached in a network site-transient for 12h; the Updates screen's \"Check again\" busts the cache.

", - "changelog": "

1.1.3
\n* Changelog gate is now warn-only: a release is no longer blocked by a missing CHANGELOG.md [VER] entry (documentation, not correctness). Version/tag/Stable-tag stay hard-gated.

\n

1.1.2
\n* Screenshots support: readme.txt == Screenshots == captions pair with screenshots/screenshot-N.png into a same-origin proxied gallery tab; no images means no tab (no more captions-only Screenshots section).

\n

1.1.1
\n* \"View details\" sections now come from readme.txt (the WP-native source) rather than README.md; changelog version markers render bold (no clear:both modal gap); base/config renamed to .mu-manifest.yaml + .mu-release.yaml.

\n

1.1.0
\n* Same-origin image proxy for plugin/theme icons + banners — fetched server-side, re-served from this site, so cross-origin/private-network/CORS/service-worker hurdles never blank the icon. SSRF-contained (same host as the manifest, no redirects), raster-only, content-type allow-listed, cached, size-capped.
\n* tags passed through to the \"View details\" modal sidebar.
\n* Self-hosting via the shared update channel + a reusable release pipeline (.ci/) mirrored to the channel on release.

\n

1.0.0
\n* Initial release: network-wide self-hosted updates for plugins and themes via the Update URI header + a #manifest-updater.json fragment. Full PUC manifest field support, 12h manifest cache, self-update.

" + "changelog": "

1.1.4
\n* Migrate self-update channel to wordpress/wp-updates.

\n

1.1.3
\n* Changelog gate is now warn-only: a release is no longer blocked by a missing CHANGELOG.md [VER] entry (documentation, not correctness). Version/tag/Stable-tag stay hard-gated.

\n

1.1.2
\n* Screenshots support: readme.txt == Screenshots == captions pair with screenshots/screenshot-N.png into a same-origin proxied gallery tab; no images means no tab (no more captions-only Screenshots section).

\n

1.1.1
\n* \"View details\" sections now come from readme.txt (the WP-native source) rather than README.md; changelog version markers render bold (no clear:both modal gap); base/config renamed to .mu-manifest.yaml + .mu-release.yaml.

\n

1.1.0
\n* Same-origin image proxy for plugin/theme icons + banners — fetched server-side, re-served from this site, so cross-origin/private-network/CORS/service-worker hurdles never blank the icon. SSRF-contained (same host as the manifest, no redirects), raster-only, content-type allow-listed, cached, size-capped.
\n* tags passed through to the \"View details\" modal sidebar.
\n* Self-hosting via the shared update channel + a reusable release pipeline (.ci/) mirrored to the channel on release.

\n

1.0.0
\n* Initial release: network-wide self-hosted updates for plugins and themes via the Update URI header + a #manifest-updater.json fragment. Full PUC manifest field support, 12h manifest cache, self-update.

" } } diff --git a/manifest-updater/manifest-updater-1.1.3.zip b/manifest-updater/manifest-updater-1.1.3.zip deleted file mode 100644 index 1419ca8d1a46cb782bc58006dbc83470135d3876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11229 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 V#LURZn1zdrmCMwS$&{1p-vG#>IWPbK literal 0 HcmV?d00001