{"id":269416,"date":"2025-12-28T02:38:58","date_gmt":"2025-12-28T02:38:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/brenwp-cache\/"},"modified":"2026-01-02T01:49:56","modified_gmt":"2026-01-02T01:49:56","slug":"brenwp-cache","status":"publish","type":"plugin","link":"https:\/\/hat.wordpress.org\/plugins\/brenwp-cache\/","author":23408568,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.1","stable_tag":"1.0.1","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"BrenWP Cache","header_author":"Brendigo LTD","header_description":"Lightweight, privacy-friendly file-based page caching with a modern, scoped WP Admin UI.","assets_banners_color":"a78d56","last_updated":"2026-01-02 01:49:56","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/brendigo.com\/","header_plugin_uri":"https:\/\/brenwp.com\/","header_author_uri":"https:\/\/brendigo.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":180,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"brendigo","date":"2026-01-02 01:49:56"}},"upgrade_notice":{"1.0.1":"<p>Adds early serving, Health tab, automation (Preload + Garbage Collection), and privacy-safe analytics.<\/p>","1.0.0":"<p>First stable release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3428609,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3428609,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3428609,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3428609,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3428609,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3428609,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3428609,"resolution":"3","location":"assets","locale":""}},"screenshots":{"1":"Dashboard overview: hit rate, cache size and one-click purge.","2":"Settings overview: enable cache, TTL and early serving (no drop-ins).","3":"Quick actions: one-click purge and health shortcut.","4":"Early serving status: conservative early serve at plugins_loaded.","5":"Statistics: early hits\/misses\/stores and privacy-safe top cached paths.","6":"Early serving setting: enable early serving in request lifecycle."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[146,187,3853,247,794],"plugin_category":[52,54],"plugin_contributors":[252368],"plugin_business_model":[],"class_list":["post-269416","plugin","type-plugin","status-publish","hentry","plugin_tags-cache","plugin_tags-optimization","plugin_tags-page-cache","plugin_tags-performance","plugin_tags-speed","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-brendigo","plugin_committers-brendigo"],"banners":{"banner":"https:\/\/ps.w.org\/brenwp-cache\/assets\/banner-772x250.png?rev=3428609","banner_2x":"https:\/\/ps.w.org\/brenwp-cache\/assets\/banner-1544x500.png?rev=3428609","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/brenwp-cache\/assets\/icon-128x128.png?rev=3428609","icon_2x":"https:\/\/ps.w.org\/brenwp-cache\/assets\/icon-256x256.png?rev=3428609","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/brenwp-cache\/assets\/screenshot-1.png?rev=3428609","caption":"Dashboard overview: hit rate, cache size and one-click purge."},{"src":"https:\/\/ps.w.org\/brenwp-cache\/assets\/screenshot-2.png?rev=3428609","caption":"Settings overview: enable cache, TTL and early serving (no drop-ins)."},{"src":"https:\/\/ps.w.org\/brenwp-cache\/assets\/screenshot-3.png?rev=3428609","caption":"Quick actions: one-click purge and health shortcut."}],"raw_content":"<!--section=description-->\n<p><strong>BrenWP Cache<\/strong> speeds up WordPress by serving cached HTML pages to anonymous visitors. On a cache miss, WordPress renders the page normally; BrenWP Cache captures the final HTML output and stores it as a file. On subsequent requests, the cached HTML is served early, reducing server load and improving response times.<\/p>\n\n<p>This plugin is intentionally minimal, transparent, and WordPress.org-friendly:\n* No telemetry, no tracking, no \u201cphone home\u201d\n* No external services or dependencies\n* Admin UI assets are strictly scoped to this plugin\u2019s pages<\/p>\n\n<h3>Key features<\/h3>\n\n<p><strong>Full-page file cache for anonymous visitors<\/strong>\n* Caches full HTML documents for <strong>GET<\/strong> requests only.\n* Designed for the common \u201cpublic pages\u201d scenario where most traffic is anonymous.\n* Avoids caching in common non-cacheable contexts such as admin, AJAX, REST, feeds, previews, searches, and similar endpoints.<\/p>\n\n<p><strong>Rules to prevent caching personalized or dynamic content<\/strong>\n* <strong>Exclude logged-in users<\/strong> (recommended; enabled by default).\n* <strong>Exclude URLs<\/strong> (one per line):\n  - Prefix rules (e.g. <code>\/checkout<\/code>)\n  - Wildcards (e.g. <code>\/cart*<\/code>)\n* <strong>Exclude by cookies<\/strong> (useful for ecommerce\/session cookies).\n* <strong>Exclude by user agent<\/strong> (bots, scanners, special clients).\n* <strong>Bypass query parameter<\/strong>: when present (e.g. <code>?nocache=1<\/code>) caching is bypassed for that request.\n* Optional 404 caching (disabled by default; enable only if your 404 output is safe and static).<\/p>\n\n<p><strong>Tools and automation<\/strong>\n* One-click <strong>Purge cache<\/strong> tool in WP Admin.\n* Optional auto-purge when posts are updated (useful for content sites that publish\/edit frequently).<\/p>\n\n<p><strong>Security and WordPress.org compliance<\/strong>\nBrenWP Cache is built to meet WordPress.org review expectations:\n* Capability checks + nonces for state-changing admin actions\n* Strict sanitization\/validation of input and late escaping for output\n* Cache directory is constrained under <code>wp-content\/cache\/brenwp-cache<\/code> with path safety guards\n* Cached HTML is served as a full document (not escaped) and is integrity-verified with an HMAC signature; unsigned\/invalid cache is treated as a miss\n* No obfuscation, no remote calls, no dangerous execution patterns<\/p>\n\n<h3>Recommended usage (important)<\/h3>\n\n<p>A full-page cache should never store private\/personalized output. For best results:\n* Keep \u201cExclude logged-in users\u201d enabled.\n* Add exclusions for dynamic endpoints such as:\n  - <code>\/checkout<\/code>, <code>\/cart<\/code>, <code>\/my-account<\/code> (WooCommerce)\n  - Any pages that show user-specific data, pricing, currency switching, or session-based content\n* If a page sets cookies or sends <code>Cache-Control: private\/no-store\/no-cache<\/code>, it will not be cached.<\/p>\n\n<p>Developed by <strong>Brendigo LTD<\/strong>.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>BrenWP Cache does not collect personal data and does not send telemetry. Optional Preload requests only your own site URLs.\nCaching is file-based on your server, stored under your WordPress content directory, and controlled by your configuration.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>brenwp-cache<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin via the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li><p>Open <strong>BrenWP Cache<\/strong> in WP Admin to configure settings:<\/p>\n\n<ul>\n<li>Enable caching<\/li>\n<li>Set TTL (cache lifetime)<\/li>\n<li>Add Rules (URL\/cookie\/user-agent exclusions)<\/li>\n<li>Use Tools to purge cache after major changes<\/li>\n<\/ul><\/li>\n<li><p>Early serving is enabled by default when caching is enabled. You can disable it in <strong>BrenWP Cache \u2192 Settings<\/strong> if needed.<\/p><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20this%20plugin%20collect%20data%20or%20send%20telemetry%3F'><h3>Does this plugin collect data or send telemetry?<\/h3><\/dt>\n<dd><p>No. BrenWP Cache does not collect personal data and does not send telemetry, analytics, or tracking. If you enable Preload, WordPress will issue requests to your own site URLs to warm the cache.<\/p><\/dd>\n<dt id='does%20it%20cache%20pages%20for%20logged-in%20users%3F'><h3>Does it cache pages for logged-in users?<\/h3><\/dt>\n<dd><p>By default, <strong>no<\/strong>. The recommended setup is to exclude logged-in users to avoid caching personalized content.<\/p><\/dd>\n<dt id='what%20should%20i%20exclude%3F'><h3>What should I exclude?<\/h3><\/dt>\n<dd><p>Exclude any endpoints that can be personalized or session-dependent. Common examples include ecommerce areas (cart\/checkout\/account), membership pages, pages that display user-specific content, and any endpoints that vary by cookies or authentication.<\/p><\/dd>\n<dt id='does%20it%20cache%20pages%20that%20set%20cookies%20or%20declare%20%22no-cache%22%3F'><h3>Does it cache pages that set cookies or declare \"no-cache\"?<\/h3><\/dt>\n<dd><p>No. If a response sets cookies or includes caching prevention directives such as <code>Cache-Control: no-cache\/no-store\/private<\/code> (or <code>Pragma: no-cache<\/code>), BrenWP Cache will not store it.<\/p><\/dd>\n<dt id='what%20is%20the%20bypass%20parameter%3F'><h3>What is the bypass parameter?<\/h3><\/dt>\n<dd><p>If the configured bypass query parameter is present (for example <code>?nocache=1<\/code>), the request bypasses caching. This is useful for debugging or forcing a fresh render.<\/p><\/dd>\n<dt id='can%20i%20use%20regex%20rules%3F'><h3>Can I use regex rules?<\/h3><\/dt>\n<dd><p>Regular expressions are intentionally not supported. Use prefix or wildcard rules instead.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added early serving support within the plugin (no drop-ins required).<\/li>\n<li>Added Health tab with runtime checks (cache directory permissions, cache size, last purge, and counters).<\/li>\n<li>Added Preload (WP-Cron) and Garbage Collection (WP-Cron) automation.<\/li>\n<li>Added marketing query-string stripping and allowlist query parameters.<\/li>\n<li>Added mobile cache variant option (separate cache key for mobile vs desktop).<\/li>\n<li>Improved purge behavior and safety guards.<\/li>\n<li>Admin UX: one-click global purge button and WP Admin Bar shortcut.<\/li>\n<li>Privacy-safe analytics: top cached paths (path-only; no query strings) and daily cache size trend sampling (admin-only).<\/li>\n<li>Security: do not cache requests with Authorization headers.<\/li>\n<li>Security: Preload\/Warm-cache accepts only local (same-host) URLs and uses hardened HTTP options (reject unsafe URLs; no redirects).<\/li>\n<li>Cache correctness: explicitly bypass cache for core endpoints (wp-login.php, wp-json, xmlrpc.php, wp-cron.php).<\/li>\n<li>Compatibility: recursive cache directory creation (wp_mkdir_p) to prevent missing cache\/config on fresh installs.<\/li>\n<li>Performance: cache size calculations are transient-cached to avoid frequent full disk scans.<\/li>\n<li>Code quality: removed deprecated add_option() parameter usage and hardened error accounting.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial WordPress.org-ready release.<\/li>\n<li>Full-page, file-based caching for anonymous visitors (GET requests).<\/li>\n<li>Modern, strictly scoped WP Admin UI (hero + navigation + cards; no global admin overrides).<\/li>\n<li>Rules engine for cache bypass\/exclusion:\n\n<ul>\n<li>Exclude logged-in users<\/li>\n<li>Exclude URLs (prefix, wildcard)<\/li>\n<li>Exclude by cookies and user agents<\/li>\n<li>Optional bypass query parameter<\/li>\n<li>Optional 404 caching (disabled by default)<\/li>\n<\/ul><\/li>\n<li>Safety hardening:\n\n<ul>\n<li>Capability checks + nonces for state-changing admin actions<\/li>\n<li>Input sanitization\/validation and late output escaping<\/li>\n<li>Cache directory constrained to <code>wp-content\/cache\/brenwp-cache<\/code> with path safety guards<\/li>\n<li>Cached HTML integrity verification (HMAC signature); unsigned\/invalid cache treated as miss<\/li>\n<li>Avoid caching responses that set cookies or specify no-cache\/no-store\/private directives<\/li>\n<\/ul><\/li>\n<li>Tools:\n\n<ul>\n<li>One-click purge<\/li>\n<li>Optional auto-purge on post updates<\/li>\n<\/ul><\/li>\n<li>Uninstall cleanup removes plugin options, stats, HMAC key, and cache directory (best-effort).<\/li>\n<\/ul>","raw_excerpt":"Lightweight, privacy-friendly file-based page caching with a modern, strictly scoped WP Admin UI.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/269416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=269416"}],"author":[{"embeddable":true,"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brendigo"}],"wp:attachment":[{"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=269416"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=269416"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=269416"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=269416"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=269416"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hat.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=269416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}