{"id":390013,"date":"2026-10-23T21:05:18","date_gmt":"2026-10-23T21:05:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/paul-bunyan\/"},"modified":"2026-10-24T08:34:29","modified_gmt":"2026-10-24T08:34:29","slug":"paul-bunyan","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/paul-bunyan\/","author":14592377,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.3","stable_tag":"1.1.3","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Paul Bunyan","header_author":"Diamond Sierra","header_description":"Find what slows your site. Records every request, PHP error, slow query and outside call, and names the plugin, file and line to fix first. Log from your own code with paul_bunyan_info() and paul_bunyan_scope(). No server extension required.","assets_banners_color":"c5c7c9","last_updated":"2026-10-24 08:34:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/diamondsierra.com\/paul-bunyan\/","header_author_uri":"https:\/\/diamondsierra.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":79,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.3":{"tag":"1.1.3","author":"teoleonard","date":"2026-10-24 08:34:29","revision":3762927}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3762512,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3762512,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3762512,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3762512,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.3"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Fix first: what is slowing your site, ranked, with the plugin, file and line.","2":"One request as a timeline: hooks, queries, outside calls, emails and log messages.","3":"Which plugin is slowing down your site? Cost per plugin and theme, per kind of request.","4":"Slow database queries grouped and ranked, with the code that ran them.","5":"WP-Cron and Action Scheduler jobs that are waiting, late or failing.","6":"The AI report: a plain-text summary to paste into any AI assistant.","7":"Your data: what is stored, export and delete.","8":"The on\/off switch: on for an hour, for your browser only, or off."}},"plugin_section":[],"plugin_tags":[94,14925,21665,6246,29151],"plugin_category":[59],"plugin_contributors":[288166],"plugin_business_model":[],"class_list":["post-390013","plugin","type-plugin","status-publish","hentry","plugin_tags-debug","plugin_tags-error-log","plugin_tags-php-errors","plugin_tags-profiler","plugin_tags-slow","plugin_category-utilities-and-tools","plugin_contributors-teoleonard","plugin_committers-teoleonard"],"banners":{"banner":"https:\/\/ps.w.org\/paul-bunyan\/assets\/banner-772x250.png?rev=3762512","banner_2x":"https:\/\/ps.w.org\/paul-bunyan\/assets\/banner-1544x500.png?rev=3762512","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/paul-bunyan\/assets\/icon-128x128.png?rev=3762512","icon_2x":"https:\/\/ps.w.org\/paul-bunyan\/assets\/icon-256x256.png?rev=3762512","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Your site is slow, or something keeps throwing errors, and you need to know which plugin, which file and which line is responsible. Paul Bunyan watches every request on your own server and tells you, in plain words, what to fix first.<\/p>\n\n<p>No server extension, no outside service, no code changes. It runs wherever WordPress runs, including shared hosting.<\/p>\n\n<h4>What it finds<\/h4>\n\n<ul>\n<li><strong>Which plugin is slowing down your site.<\/strong> Time and memory per plugin and theme, split into front end, dashboard, AJAX and background requests.<\/li>\n<li><strong>Slow pages and a slow dashboard.<\/strong> Every request timed, with processor time and memory, the numbers a hosting CPU limit counts.<\/li>\n<li><strong>Slow database queries<\/strong>, grouped by shape and ranked by total time, with the plugin, file and line that ran them.<\/li>\n<li><strong>Slow outside calls<\/strong>: license checks, APIs and webhooks that hold a page up.<\/li>\n<li><strong>PHP errors, warnings and deprecation notices<\/strong>, grouped so a notice repeated thousands of times shows as one line with a count.<\/li>\n<li><strong>Email<\/strong>: how long each message took to build and to send.<\/li>\n<li><strong>Background jobs<\/strong>: WP-Cron and Action Scheduler jobs that are waiting, late or failing.<\/li>\n<li><strong>Real page loads in visitors' browsers<\/strong>, with Core Web Vitals (LCP, INP, CLS).<\/li>\n<li><strong>Site setup checks<\/strong>: autoloaded options, object cache, OPcache, transients, scheduled jobs, debug settings and page cache.<\/li>\n<\/ul>\n\n<h4>Fix first, in plain words<\/h4>\n\n<p>One ranked list of what costs your site the most: what it is, where it is, how often it happens, how much time it takes and what to do about it. Every finding carries a numbered PB code with a full explanation on diamondsierra.com.<\/p>\n\n<h4>Built to stay on<\/h4>\n\n<ul>\n<li>Small footprint: about 10 to 20 ms per request in our tests on a WooCommerce store (median of 20 loads per page, logged in).<\/li>\n<li>A safety switch turns recording off by itself if it ever costs visitors too much.<\/li>\n<li>Switch it on for an hour, for your browser only, or off, from the admin bar.<\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<ul>\n<li>Log from your own code with <code>paul_bunyan_info()<\/code>, <code>paul_bunyan_warn()<\/code>, <code>paul_bunyan_error()<\/code>, <code>paul_bunyan_scope()<\/code>, <code>paul_bunyan_event()<\/code> and <code>paul_bunyan_mark()<\/code>.<\/li>\n<li>Use <code>do_action( 'paul_bunyan_log', ... )<\/code> in code that must also run where Paul Bunyan is not installed.<\/li>\n<li>Open any request as a timeline of hooks, queries, outside calls, emails and your own messages.<\/li>\n<li>Profile one page on demand, compare two requests, and set a marker to compare before and after a change.<\/li>\n<li>WP-CLI: <code>wp pb status<\/code>, <code>wp pb fix<\/code>, <code>wp pb report<\/code>, <code>wp pb on<\/code> and <code>wp pb off<\/code>.<\/li>\n<\/ul>\n\n<h4>Your data stays on your site<\/h4>\n\n<p>Everything is stored in your own database. Nothing is sent to us or to anyone else. Email addresses are masked. Export or delete your data at any time. The AI report is a plain-text summary you copy or download and paste into the AI assistant of your choice; the plugin itself contacts no AI service.<\/p>\n\n<p>By default it keeps 3 days of full detail and 7 days of everything else. Both are settings (up to 400 days), and a size limit keeps the log from growing past what you allow.<\/p>\n\n<h4>Paul Bunyan Professional<\/h4>\n\n<p>An optional add-on for people who need more: Show the fix, alert rules, \"got slower\" detection, WooCommerce order trails, scheduled page checks, email reports, Ask AI with your own key, and private support. Everything listed above stays free. <a href=\"https:\/\/diamondsierra.com\/professional\/\">Details at diamondsierra.com<\/a><\/p>\n\n<h4>Since 1999<\/h4>\n\n<p>The original Paul Bunyan Message Logger showed Windows developers the function, module and line behind a bottleneck. This is the same idea, rebuilt for WordPress. <a href=\"https:\/\/diamondsierra.com\/docs\/\">Documentation and PB codes<\/a><\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not connect to any outside service. To profile a page or test your page cache, it loads pages from your own site, and nowhere else. Nothing it records leaves your site unless you copy it yourself (for example the AI report, which you can paste into an AI assistant of your choice).<\/p>\n\n<h3>Privacy<\/h3>\n\n<ul>\n<li>Log data stays in your own database, in two tables, and is removed on uninstall.<\/li>\n<li>Values are stripped from SQL and from URLs before storing. Keys that look like secrets are redacted. Email addresses are masked.<\/li>\n<li>The browser timing script sets no cookies and stores no identifiers. It reports paths and timings only.<\/li>\n<li>Only administrators can see the log.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>In your dashboard go to Plugins &gt; Add New, search for \"Paul Bunyan\", then click Install and Activate.<\/li>\n<li>Open Paul Bunyan in the admin menu. It profiles your home page on first run.<\/li>\n<li>Use the site as normal. The Fix first list fills in as requests come in.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>In our tests it added about 10 to 20 ms per request. Recording stops by itself if it ever costs too much, and you can switch it off from the admin bar.<\/p><\/dd>\n<dt id=\"how%20do%20i%20find%20which%20plugin%20is%20slowing%20down%20my%20site%3F\"><h3>How do I find which plugin is slowing down my site?<\/h3><\/dt>\n<dd><p>Open the Plugins screen in Paul Bunyan. It shows the time and memory each plugin and your theme cost per request, without deactivating anything.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20shared%20hosting%3F\"><h3>Does it work on shared hosting?<\/h3><\/dt>\n<dd><p>Yes. It needs no PHP extension, no server access and no outside service.<\/p><\/dd>\n<dt id=\"where%20do%20php%20errors%20go%3F\"><h3>Where do PHP errors go?<\/h3><\/dt>\n<dd><p>Into Paul Bunyan's own table in your database, grouped by message, with the plugin, file and line. Nothing is written to a public file.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20caching%3F\"><h3>Does it work with page caching?<\/h3><\/dt>\n<dd><p>Yes. Cached pages never reach PHP, so Paul Bunyan marks cached copies and tests whether your page cache is working.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Checkout, emails, payment callbacks and background jobs are all recorded. Following one order across requests is part of Professional.<\/p><\/dd>\n<dt id=\"what%20are%20pb%20codes%3F\"><h3>What are PB codes?<\/h3><\/dt>\n<dd><p>Numbered findings, each with a fixed meaning and a remark on what to do. Every code has its own page at diamondsierra.com\/docs\/codes\/.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multisite%3F\"><h3>Does it support multisite?<\/h3><\/dt>\n<dd><p>Not yet. It is tested on single sites.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20help%3F\"><h3>Where do I get help?<\/h3><\/dt>\n<dd><p>On the WordPress.org support forum for this plugin. Under Paul Bunyan &gt; Get support, the Copy support details button gives you a block of versions and setup to paste into your post.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>How long messages and routine detail are kept, how many markers are kept, and which other roles may read the screens are now settings in the free plugin.<\/li>\n<li>Watching database queries is now a setting you turn on (it uses WordPress's SAVEQUERIES for the request); Profile one page always includes queries.<\/li>\n<li>The developer functions are now paul_bunyan_info(), paul_bunyan_warn(), paul_bunyan_error(), paul_bunyan_scope(), paul_bunyan_event(), paul_bunyan_mark() and friends.<\/li>\n<li>Paul Bunyan no longer changes the order of active plugins. To time every plugin's loading, copy the optional mu-loader file into wp-content\/mu-plugins; it now finds Paul Bunyan wherever it is installed and only when it is active.<\/li>\n<li>Old temporary support accounts from version 0.19 are deleted only when an administrator presses the button.<\/li>\n<li>Every value read from the request, a cookie, the command line, an imported file or a browser report is cleaned before use.<\/li>\n<li>The browser timing script is added through WordPress's script queue.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Security: a browser timing report must come from a page built in the last 12 hours, and reports are capped at 80 rows a minute per visitor address and 6,000 an hour for the whole site, counted without races.<\/li>\n<li>The size limit now runs hourly when the log is well over, and trims browser timings before older warnings and errors.<\/li>\n<li>The Space meter, the notice and the size limit all measure the same thing; pooled text is shown on its own.<\/li>\n<li>The weekly cleanup of unused pooled text finishes on very large logs, over several runs.<\/li>\n<li>Short keys in links (8 characters or more, letters and digits mixed) are masked too.<\/li>\n<li>Filtering Messages by PB-2806 or PB-2807 lists every visit counted for it.<\/li>\n<li>Query tracing no longer trims the query list another tool (such as Query Monitor) relies on.<\/li>\n<li>Works with databases that store table names in lower case.<\/li>\n<li>Reset and uninstall remove every option and transient Paul Bunyan stores.<\/li>\n<li>Emails sent by a WordPress background process (such as WooCommerce's deferred order emails) no longer count as making a visitor wait.<\/li>\n<li>Room on the Site setup cards for tools from add-ons.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Security: browser timing reports must carry a signature from a page this site built, and are capped at 600 stored rows a minute.<\/li>\n<li>Security: more personal data is kept out of the log: user names and passwords in links, keys and tokens in link paths, codes and addresses in email subjects, and fields named like keys, sessions, phone numbers and addresses.<\/li>\n<li>Fix: the size limit now measures the message table, and unused pooled text is removed once a week.<\/li>\n<li>Fix: the empty-space rebuild runs at most once a week, only with more than 50 MB to give back, never on MyISAM tables and never on tables over 500 MB.<\/li>\n<li>Fix: \"Delete these kinds of message\" keeps messages with a code, as it says.<\/li>\n<li>Fix: a missing log table is recreated on the next write.<\/li>\n<li>Fix: query tracing stays off for WP-CLI and cron, and keeps memory in check on very long requests.<\/li>\n<li>Fix: largest paint is no longer counted for pages that sat in a background tab.<\/li>\n<li>Fix: a visit poor on more than one Web Vital is counted under each.<\/li>\n<li>Fix: checks of your own site's address respect the https_local_ssl_verify setting.<\/li>\n<li>Fix: scripts and styles load the WordPress way; including the one small script on visitor pages.<\/li>\n<li>Reset and uninstall remove every option Paul Bunyan stores.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: a size limit for the log (100 MB by default). The daily cleanup trims routine detail first, then the oldest messages, and hands the empty space back to the database.<\/li>\n<li>New: Your data shows what takes the room, by kind of message and by age, with a Free space now button.<\/li>\n<li>A notice on Paul Bunyan's screens when the log nears its limit.<\/li>\n<li>Wording: \"kinds of problems found\".<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release on WordPress.org.<\/li>\n<\/ul>","raw_excerpt":"Find what slows your site. Records every request, PHP error, slow query and outside call, and names the plugin, file and line to fix first.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/390013","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=390013"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/teoleonard"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=390013"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=390013"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=390013"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=390013"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=390013"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=390013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}