{"id":389256,"date":"2026-10-21T21:43:20","date_gmt":"2026-10-21T21:43:20","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/keepwatch\/"},"modified":"2026-10-22T08:52:46","modified_gmt":"2026-10-22T08:52:46","slug":"keepwatch","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/keepwatch\/","author":23588905,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.6.1","stable_tag":"0.6.1","tested":"7.1.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Keepwatch","header_author":"WPXLab","header_description":"Local site health, update and error monitoring for WordPress, with optional WooCommerce checks. Runs entirely on your site; the WPXLab cloud connection is optional and opt-in.","assets_banners_color":"0f0f0e","last_updated":"2026-10-22 08:52:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/wpxlab.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":85,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.6.1":{"tag":"0.6.1","author":"wpxlab","date":"2026-10-22 08:52:46","revision":3759584}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3759102,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3759102,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3759102,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3759102,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3759102,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.6.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3759115,"resolution":"1","location":"assets","locale":"","width":1385,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3759115,"resolution":"2","location":"assets","locale":"","width":451,"height":339},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3759115,"resolution":"3","location":"assets","locale":"","width":1385,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3759115,"resolution":"4","location":"assets","locale":"","width":1385,"height":800}},"screenshots":{"1":"Tools \u2192 Keepwatch overview: health score, items that need attention and site facts.","2":"WordPress Dashboard widget showing open issues.","3":"Checks tab with status filters and check groups.","4":"Notifications tab with email alert settings."}},"plugin_section":[262246],"plugin_tags":[14925,5603,151481,2550,286],"plugin_category":[45,54],"plugin_contributors":[287882],"plugin_business_model":[],"class_list":["post-389256","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-error-log","plugin_tags-monitoring","plugin_tags-site-health","plugin_tags-updates","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-security-and-spam-protection","plugin_contributors-wpxlab","plugin_committers-wpxlab"],"banners":{"banner":"https:\/\/ps.w.org\/keepwatch\/assets\/banner-772x250.png?rev=3759102","banner_2x":"https:\/\/ps.w.org\/keepwatch\/assets\/banner-1544x500.png?rev=3759102","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/keepwatch\/assets\/icon.svg?rev=3759102","icon":"https:\/\/ps.w.org\/keepwatch\/assets\/icon.svg?rev=3759102","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/keepwatch\/assets\/screenshot-1.png?rev=3759115","caption":"Tools \u2192 Keepwatch overview: health score, items that need attention and site facts."},{"src":"https:\/\/ps.w.org\/keepwatch\/assets\/screenshot-2.png?rev=3759115","caption":"WordPress Dashboard widget showing open issues."},{"src":"https:\/\/ps.w.org\/keepwatch\/assets\/screenshot-3.png?rev=3759115","caption":"Checks tab with status filters and check groups."},{"src":"https:\/\/ps.w.org\/keepwatch\/assets\/screenshot-4.png?rev=3759115","caption":"Notifications tab with email alert settings."}],"raw_content":"<!--section=description-->\n<p>Keepwatch shows the health of your site in one place: outdated plugins and themes, PHP fatal errors,\nWordPress Site Health results, scheduled task (WP-Cron) problems, database and environment warnings.\nIf WooCommerce is active, store-specific checks (template overrides, failed or stuck scheduled actions, HPOS sync)\nare added automatically. WooCommerce is not required.<\/p>\n\n<p>Everything runs on your own site. Keepwatch does not need an account and sends nothing off-site by default.\nConnecting to the optional WPXLab cloud (outside uptime checks, history, multi-site overview) is opt-in and\nrequires your explicit consent; see External services.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Local dashboard under Tools \u2192 Keepwatch (no account required)<\/li>\n<li>WordPress Dashboard widget with open issues at a glance<\/li>\n<li>PHP fatal error capture with redacted paths and secrets<\/li>\n<li>Change log of plugin, theme and WordPress updates; a fatal error that starts soon after an update is marked as a possible link<\/li>\n<li>Core, plugin and theme update status<\/li>\n<li>WordPress Site Health critical and recommended counts<\/li>\n<li>WP-Cron overdue task detection (including DISABLE_WP_CRON sites)<\/li>\n<li>\u201cDiscourage search engines\u201d visibility warning<\/li>\n<li>Environment checks: PHP support, HTTPS, debug display, memory limit, file editor<\/li>\n<li>Database checks: autoload size, expired transients, approximate DB size<\/li>\n<li>Server checks: disk space, OPcache, persistent object cache<\/li>\n<li>Security signals: new administrators, role grants, plugin activate\/deactivate<\/li>\n<li>Inventory strip: WordPress\/PHP\/MySQL\/WooCommerce\/theme\/plugin counts<\/li>\n<li>Backup monitoring: is a backup plugin active and how old is the last completed backup<\/li>\n<li>Optional WooCommerce module: failed and stuck Action Scheduler jobs, outdated template overrides, HPOS sync<\/li>\n<li>Optional weekly summary and critical-issue emails via your site\u2019s <code>wp_mail<\/code> (off by default)<\/li>\n<li>Translation-ready: every string can be translated on translate.wordpress.org<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>Keepwatch works fully without any external service. All checks run on your site.<\/p>\n\n<p><strong>Optional: WPXLab cloud (wpxlab.com).<\/strong> Nothing is sent unless an administrator pastes a connection code under\nTools \u2192 Keepwatch \u2192 WPXLab cloud and accepts the consent screen. When connecting, Keepwatch sends the site address,\nan anonymous installation id, a public key and the WordPress, PHP and Keepwatch versions to\n    https:\/\/wpxlab.com\/api\/v1\/keepwatch\/enrollments. WPXLab then calls <code>\/wp-json\/keepwatch\/v1\/verify<\/code> on your site once\nto confirm the address; the endpoint only answers during your own connect request. After that, Keepwatch sends a report\nhourly through WP-Cron (never during page loads) to <code>https:\/\/wpxlab.com\/api\/v1\/keepwatch\/reports<\/code>: the id, status and\nshort headline of each check, plus WordPress, PHP, Keepwatch and WooCommerce versions. If WooCommerce is active, the\nreport also contains the number of placed orders and failed payments per hour for the last 7 days (totals only), used\nfor \"orders stopped\" and \"failed payments spiking\" alerts. It also contains the public addresses of the shop, cart, checkout and newest\nproduct page, which the cloud opens from outside to check that they work. The report also lists the plugin, theme and\nWordPress changes of the last 7 days (name, slug and version numbers) and, for PHP fatal errors, only a fingerprint,\nthe plugin or theme they came from and when they started; error messages and file paths stay on your site.\nCheck descriptions, user names,\nfile paths, e-mail and IP addresses are not sent; WooCommerce data never includes customer data. Reports are kept for\nyour plan's history period and then deleted.\nOnly if an administrator also allows it (on the same screen, or later with \"Allow sending\"), the report includes the\ninstalled plugins and themes (name, slug, version, active, available update) and four site metrics (PHP memory limit,\nsize of autoloaded options, database size, number of overdue scheduled tasks).\nAfter a report, Keepwatch may fetch its settings from <code>https:\/\/wpxlab.com\/api\/v1\/keepwatch\/config<\/code>: only how often to\nreport and which of the optional data above to include. The settings are signed by WPXLab and applied only if the\nsignature checks out; WPXLab cannot run code, change files or read your database through this.\nDisconnecting is one click and stops all sending immediately.<\/p>\n\n<ul>\n<li>Service: WPXLab, https:\/\/wpxlab.com<\/li>\n<li>Terms of service: https:\/\/wpxlab.com\/terms<\/li>\n<li>Privacy policy: https:\/\/wpxlab.com\/privacy<\/li>\n<\/ul>\n\n<p>Optional email alerts use your WordPress site\u2019s normal mail configuration (<code>wp_mail<\/code>). That mail may be delivered by\nwhatever SMTP or hosting mail setup you already use; Keepwatch does not call a third-party API for those emails.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Keepwatch stores data in your WordPress database (for example: recorded PHP fatal errors with redacted paths,\noptional security-event notes, and your alert settings). Nothing is transmitted to WPXLab or any other third party\nunless you connect the optional WPXLab cloud (see External services). Uninstalling Keepwatch removes the options it created.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Source code ships inside the plugin zip (PHP and CSS only; no minified or obfuscated assets). There is no remote\nupdate channel and no build step required to run the plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>keepwatch<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP via Plugins \u2192 Add New \u2192 Upload.<\/li>\n<li>Activate Keepwatch through the Plugins screen.<\/li>\n<li>Open Tools \u2192 Keepwatch to see the local health dashboard.<\/li>\n<li>(Optional) Enable email alerts under Tools \u2192 Keepwatch \u2192 Notifications.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20keepwatch%20require%20woocommerce%3F\"><h3>Does Keepwatch require WooCommerce?<\/h3><\/dt>\n<dd><p>No. Keepwatch is a general WordPress health plugin. When WooCommerce is active, extra store checks turn on automatically.<\/p><\/dd>\n<dt id=\"does%20it%20send%20data%20anywhere%3F\"><h3>Does it send data anywhere?<\/h3><\/dt>\n<dd><p>No. Checks and the fatal error list stay on your site. The optional weekly or critical-issue emails are sent only with\nWordPress <code>wp_mail<\/code> through your own site\u2019s mail configuration, and only if you turn them on.<\/p><\/dd>\n<dt id=\"will%20features%20be%20locked%20behind%20a%20license%3F\"><h3>Will features be locked behind a license?<\/h3><\/dt>\n<dd><p>No. Everything in this plugin runs locally and stays free.<\/p><\/dd>\n<dt id=\"how%20do%20i%20clear%20recorded%20php%20errors%3F\"><h3>How do I clear recorded PHP errors?<\/h3><\/dt>\n<dd><p>Open Tools \u2192 Keepwatch \u2192 PHP errors and use \u201cClear error list\u201d.<\/p><\/dd>\n<dt id=\"which%20languages%20are%20available%3F\"><h3>Which languages are available?<\/h3><\/dt>\n<dd><p>Keepwatch is written in English and is fully translatable. Translations are contributed on translate.wordpress.org and WordPress installs them automatically for your site language.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.6.1<\/h4>\n\n<ul>\n<li>New setting under Notifications: choose whether deleting the plugin also deletes its data. Deactivating never deletes anything.<\/li>\n<li>Health score ring is drawn with SVG instead of an inline style; stylesheet gets a table of contents and section markers.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>WPXLab cloud: connection handling tidied up. No change in what is sent or when.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>WPXLab cloud: report frequency and optional data can be set from the WPXLab dashboard. Settings arrive signed and only a fixed list of settings is accepted.<\/li>\n<li>WPXLab cloud (optional, needs a separate \"Allow sending\"): installed plugins\/themes with available updates and four site metrics, so updates can be tracked across sites.<\/li>\n<li>WooCommerce: new checks for webhooks that WooCommerce switched off after repeated delivery failures, and for products out of stock or running low (counts only).<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Translations are now delivered by translate.wordpress.org language packs; the plugin no longer bundles or loads its own language files.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>New: change log. Plugin, theme and WordPress updates, installs, activations and theme switches are recorded locally (also updates made by FTP or WP-CLI, found on the next hourly comparison).<\/li>\n<li>New: a PHP fatal error that starts within 24 hours after the same plugin or theme changed, or within 60 minutes after any change, is marked as a possible link on Tools \u2192 Keepwatch \u2192 Errors.<\/li>\n<li>Cloud: the report includes the last 7 days of changes and the source and start time of fatal errors (no messages or paths), for \"error after update\" alerts.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>New: with WooCommerce and a cloud connection, the public shop, cart, checkout and newest product page addresses are added to the report so the WPXLab cloud can check from outside that the buying path works.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>New: backup monitoring. Detects UpdraftPlus, BackWPup, WPvivid, All-in-One WP Migration, Duplicator, Jetpack VaultPress Backup and BlogVault and warns when the last completed backup is older than 7 days (critical after 30). Keepwatch does not take backups itself.<\/li>\n<li>New: with WooCommerce and a cloud connection, hourly order and failed-payment totals (counts only) are added to the report so the WPXLab cloud can alert you when orders stop or failed payments spike.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New: optional connection to the WPXLab cloud with an explicit consent screen and one-click disconnect.<\/li>\n<li>New: redesigned admin screen with tabs (Overview, Checks, PHP errors, Notifications, WPXLab cloud), a health score and status filters.<\/li>\n<li>New: hourly check summaries to the connected cloud through WP-Cron with retry and backoff (only after consent).<\/li>\n<li>Fix: fewer false security alerts, cached database size measurement and more reliable email scheduling.<\/li>\n<li>Fix: a PHP TypeError on admin pages caused by the settings sync hook receiving an empty argument.<\/li>\n<li>Uninstall and deactivation also remove the cloud connection options and scheduled report events.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Local health checks, fatal error capture, dashboard and admin widget.<\/li>\n<li>Database, server and security checks; inventory strip.<\/li>\n<li>Optional WooCommerce checks (Action Scheduler, template overrides, HPOS sync).<\/li>\n<li>Optional weekly and critical-issue email digests via wp_mail.<\/li>\n<li>Translations: tr_TR, ru_RU, fr_FR, it_IT.<\/li>\n<\/ul>","raw_excerpt":"Local site health, update and error monitoring for WordPress. Optional WooCommerce checks switch on when a store is detected.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/389256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=389256"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpxlab"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=389256"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=389256"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=389256"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=389256"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=389256"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=389256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}