WP Manifestindependent plugin directory
manifest / unclassified / fadewatch-abandoned-closed-add-on-checker

Fadewatch – Abandoned & Closed Add-on Checker

Find out which of your WordPress plugins have been closed on WordPress.org (and why), which haven't been updated in years, and which can't be checked.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/prathameshbasagare/fadewatch-abandoned-closed-add-on-checker/archive/refs/heads/release.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Find out which of your WordPress plugins have been closed on WordPress.org (and why), which haven't been updated in years, and which can't be checked.

readme.txt is the official readme used by the WordPress.org plugin directory. This file is for developers browsing the source.

Statuses

Every installed plugin gets exactly one status:

Status Meaning
Closed Closed on WordPress.org. The closure date and reason are shown, e.g. "Closed on July 27, 2023: Security Issue".
Possibly abandoned No release in over 24 months (configurable).
Ageing No release in 12–24 months (configurable).
Maintained Released recently.
Not on WordPress.org Premium or custom plugin, or the Update URI header points elsewhere.
Not verified A different WordPress.org plugin uses the same slug (slug-collision guard).
Couldn't check WordPress.org couldn't be reached. Never reported as closed or not found.

Features

  • Maintenance column on the Plugins screen: sortable, with filter links and a coloured border on closed or possibly abandoned rows.
  • Report page (Tools → Plugin Maintenance) with summary counts, a Check now button and CSV export.
  • Two Site Health tests: closed plugins (critical when closed for a security issue) and plugins without updates for a long time.
  • E-mail only when something changes, an immediate e-mail for a security closure, and an optional weekly summary.
  • Multisite: one shared check for the whole network (Network Admin → Plugins → Plugin Maintenance).

How it works

  • Opt-in first. Nothing is sent to WordPress.org until an administrator clicks "Allow checks and scan now" (or enables it in Settings). Turning it off stops all requests.
  • Background only. WordPress.org is queried through WP-Cron in batches of 10. Each batch stops after 15 seconds to stay under PHP time limits. Admin pages only read stored data and never make HTTP requests. Nothing runs on the front end.
  • Check now. Runs the same batches from the browser over AJAX, so checks still work when WP-Cron is disabled or broken.
  • Re-checks. Closed plugins and failed checks are re-checked every 6 hours. Plugins are re-checked right after they are installed, updated or activated.
  • Accuracy.
    • A failed request never overwrites an earlier good result.
    • Closed and not-found responses are both HTTP 404, so they are told apart by the response body.
    • The installed plugin's name and author are compared with the WordPress.org entry before its data is used.

Requirements

  • WordPress 6.4 or later
  • PHP 7.4 or later

Developer hooks

Filters

Filter Purpose
fadewatch_plugin_slug( $slug, $file, $data ) Map a plugin file to a different WordPress.org slug.
fadewatch_skip_plugin( $skip, $file, $data ) Exclude a plugin from checks.
fadewatch_thresholds( $thresholds ) Change the ageing / abandoned thresholds (in months).
fadewatch_status( $evaluation, $item, $record ) Override the computed status.
fadewatch_email_recipients( $recipients ) Change notification recipients.

Actions

Action Fires when
fadewatch_status_changed( $plugin_file, $old_status, $new_status, $evaluation ) A plugin's status changes.
fadewatch_scan_started( $source ) A full scan is queued (activation, cron, manual, fallback, settings).
fadewatch_scan_completed( $results ) The scan queue has been fully processed.

Example

Map a plugin whose folder name differs from its WordPress.org slug:

add_filter( 'fadewatch_plugin_slug', function ( $slug, $file ) {
    return 'my-renamed-folder/plugin.php' === $file ? 'original-wporg-slug' : $slug;
}, 10, 2 );

Project structure

fadewatch.php                      Bootstrap, constants, activation hooks
uninstall.php                      Removes options and scheduled events
includes/
  class-fadewatch-api.php               WordPress.org Plugins API client and response parsing
  class-fadewatch-resolver.php          Installed plugin → WordPress.org slug (Update URI, single-file plugins)
  class-fadewatch-status.php            Status model, thresholds, slug-collision guard
  class-fadewatch-scanner.php           Queue, batches, locking, cron, change detection
  class-fadewatch-store.php             Persistent storage (non-autoloaded network options)
  class-fadewatch-report.php            Evaluated rows for every screen
  class-fadewatch-notifier.php          Plain-text e-mails
  class-fadewatch-admin.php             Report and settings page, CSV export
  class-fadewatch-plugins-screen.php    Plugins screen column, filters and sorting
  class-fadewatch-site-health.php       Site Health tests
  class-fadewatch-ajax.php              "Check now" endpoints
  class-fadewatch-render.php            Shared output helpers
assets/                            Admin CSS and dependency-free JS

Branches and releasing

  • dev: development, including dev-only files (.gitignore, .distignore, the product spec).
  • release: only the files that ship to WordPress.org.

Build the release zip from the release branch. git archive includes committed files only, so the .git folder stays out:

git archive --format=zip --prefix=fadewatch-abandoned-closed-add-on-checker/ release -o ../fadewatch-abandoned-closed-add-on-checker.zip

Run Plugin Check before every release.

Privacy

Nothing is sent before an administrator allows checks. After that, only plugin slugs are sent, and only to api.wordpress.org over HTTPS. The user agent does not include the site URL. There is no tracking and no account. See the External services section in readme.txt.

License

This plugin is free software, licensed under the GNU General Public License v3 or later (GPLv3+). See LICENSE for the full text.