Super Speedy Performance Analysis changelog
Find which plugin is actually making your site slow, with proof
Latest version0.18.0
Released12 August 2026
Last 90 days12 releases
Last 90 days47 changes
Tested up toWordPress 7.0
Product page
What Super Speedy Performance Analysis does, what it costs and who it is for.
Knowledge base
Setup guides, how-tos and troubleshooting for Super Speedy Performance Analysis.
Discord support
Ask a question in the Super Speedy Performance Analysis channel and get an answer from Dave.
Downloads & licence
Grab the latest build or check your licence and renewal status.
0.18.012 August 2026
- Shared analyses now describe what kind of site this is - an online shop, a jobs board, a publisher, or honestly more than one of them - with the signals that led to the label, so superspeedy.org can compare your results against sites genuinely like yours instead of a single average.
- Site sizes are shared as bands and never exact counts, and now cover pages, total orders, orders in the last 30 days, comments and how many plugins are active, alongside the posts, products, users and database size already sent. Order counts use safe routes only: total orders come from WooCommerce's own order table estimate or WordPress's maintained count, and from nothing at all on a posts table too large to count cheaply, while the 30-day figure is a real count of that window and stays accurate however busy your shop is.
- A checkout analysis now shares your order-management time - opening the order and marking it completed - as its own record with its own total. It was measured but discarded on the way out before. Customer checkout totals are unchanged and still contain no admin time.
- A management sequence that was blocked by a security plugin, or that only got half way, is shared as blocked or partial rather than quietly left out.
- The Share tab now describes all of this in plain terms: what the bands mean, and that checkout and order management travel separately.
0.17.412 August 2026
- When a plugin reacts to another being excluded for measurement - trying to switch a plugin on or off, or to run a destructive database statement - you are now told, with an admin notice naming the plugin that reacted and the plugin it reacted to. Every attempt was already refused; now you find out even if the analysis finished while you were elsewhere.
- Reactions get their own block on the Overview tab instead of competing for a top-five slot they always lost, and read as plain English ("Rank Math Pro tried to deactivate a plugin while Rank Math was excluded for measurement") rather than a rule name.
- Shared analyses now carry which plugin was excluded alongside which plugin reacted, so these pairs can build a community dependency map. The refused statement itself is still never shared, only its fingerprint.
- Fixed the SEO plugin slug in the bundled rules (Rank Math installs as seo-by-rank-math), so a Rank Math site is correctly spotted when a second SEO plugin is also active.
0.17.311 August 2026
- MCP abilities are now marked public so agent tooling can discover them
0.17.211 August 2026
- Updated super-speedy-settings to the latest version
0.17.111 August 2026
- The site score is now shown out of 100 (e.g. 10/100) on the Overview tile, the History tab and in
wp sspaoutput, so a low score cannot be read as 10 out of 10. - Added a
statusindex to the runs table so the active-run check no longer scans the whole run history, keeping admin pages fast once many analyses have accumulated.
0.17.011 August 2026
- The checkout analysis now measures order management too: after the purchase it opens the order in wp-admin and marks it completed - the two things a shop owner does most - so you can see how slow your order screen is and what marking an order completed sets off (the completed-order email, stock and downloads, and every plugin hooking order completion).
- The order-management time is shown in its own section below the customer's wait, because it is your staff time per order, not something a customer waits through.
- "Analyse checkout flow" is now "Analyse checkout & order flow" on the admin bar and the Pages tab, and the disclosure lists the order view and completion before anything runs.
- The completed-order email is timed or intercepted exactly as the other order emails are, following your mail setting.
0.16.111 August 2026
- New Settings tab with the measurement timeout: how long each measurement request may wait for a page before giving up (10-900 seconds, default 60). Raise it when the pages you are diagnosing take longer than a minute to load - a page slower than the limit records nothing at all, and those are exactly the pages worth measuring.
0.16.010 August 2026
- Plugin Impact Analysis now always starts from a chooser: nothing is measured until you pick the plugins yourself, nothing is preselected, and the chooser explains exactly what will happen and what it will cost before anything runs.
- If a plugin reacts to another being excluded during a measurement, its activation and deactivation routines are now silenced before they can run, and destructive database statements (
DROP,TRUNCATE,ALTER ... DROP, whole-tableDELETE) are refused for that request - measured on a real deactivation routine that drops database indexes. - Every caught reaction becomes a finding on the analysis, is included when you share results, and the pair is measured together from the next run on, so a reaction can happen at most once per site.
- Plugin Impact Analysis now requires this plugin's own
db.phpdrop-in during the run, because that is what enforces the database guard; sites where another plugin owns the drop-in can use the existing temporary swap option. - New
--no-cache-modesbehaviour applies from the chooser too: the object-cache measurements are opt-in rather than automatic.
0.15.010 August 2026
- Plugin Impact Analysis now reads each plugin's own code to find which plugins cannot run without another one, and measures those together in one go, so nothing is ever left running without something it depends on.
- Your SEO plugin, page builder or anything else another plugin depends on can now be measured at all: these used to be skipped entirely to keep them safe.
- A verdict measured this way says so, e.g. "measured together with seo-by-rank-math-pro, which cannot run without it", and the running analysis names both plugins in the measurement.
- The plugin picker on a page panel tells you which plugins will be measured together before you start.
0.14.010 August 2026
- Fixed a plugin that switches itself off when a dependency is missing staying off after a Plugin Impact Analysis measured it: a measurement can no longer change which plugins your site runs.
- "Analyse this page" and clicking a page on the Pages tab now open the same panel, carrying everything either of them used to show on its own.
- That panel now also shows per-plugin attribution in both modes, the outbound HTTP calls, what
EXPLAINsays about each slow query, the object cache hit rate for the page, and what has been measured by disabling plugins on it. - New "Measure plugin impact on this page" on the panel: tick the plugins, read "7 plugins x 1 page = 9 measurements, about 20 seconds" before anything starts, and the verdicts appear in the same panel when it finishes.
- Plugin Impact Analysis can now be pointed at any URL on your site, including a page no analysis has ever profiled, because it measures that page's own baseline as it goes.
- The Pages tab now lists the newest measurement of each page, whether it came from a full analysis or from analysing that page on its own, with the date it was taken; the site score still comes only from full analyses.
- Removed the "Open in Performance Analysis" link from the page panel, which is now the full view.
- New
--urland--no-cache-modesoptions onwp sspa run --type=deep, andurl,pagesandcache_modeson therun-deep-analysisability.
0.13.110 August 2026
- Deep Analysis is now called Plugin Impact Analysis, matching the Measured impact column it fills.
- The Share tab now tells you when sharing is on but an analysis could not be prepared, instead of failing quietly.
- A queued submission no longer stops if the collector address is wrong for a moment - it retries a few times before giving up, so correcting the address no longer means retrying every item by hand.
- An analysis you chose to share on its own is no longer left waiting when it needs a retry.
- The running analysis now shows which phase it is in beside the measurement count, so the total growing part-way through makes sense.
- A queued submission no longer depends on its analysis still being in your history.
- Database updates now run one at a time, so two visitors arriving together cannot collide.
0.13.010 August 2026
- New "See exactly what gets sent" button on the Share tab: it builds the payload for your latest analysis, explains in plain English what it contains and what it never contains, and lets you download the file. Nothing is queued or sent.
- Queued submissions are now delivered by your browser while you are on the analysis screen, instead of waiting for WP-Cron, which many hosts disable. Cron still runs as a backstop.
- Measured impact now reads "adds 120ms typically, up to 340ms on wc-checkout", replacing a total that summed every page together - a figure no visitor ever experienced, and one that grew simply by measuring more pages.
- Measured impact is now kept per page, so re-measuring one plugin on one page updates that page and leaves every other page's result standing.
- Analysing a page that the full analysis already covers, such as the shop or the home page, now files it under that page rather than a one-off entry, so the two are comparable.
0.12.09 August 2026
- Nothing on the Performance Analysis screen reloads the page any more: queueing a run, pruning detailed data, replacing a drop-in, retrying or pausing a submission, cancelling a run and finishing an analysis all update in place, keeping the tab you were on.
- The Sharing settings and Choose analyses links now switch tab in place instead of reloading and landing you back on Overview.
- Fixed sharing being refused on any site running a plugin with a four-part version number, e.g. 3.0.83.3, which the privacy check mistook for an IP address. Affected sites queued nothing at all; their existing analyses can be sent with Queue existing runs.
- New Version column on the Plugins tab, showing the version each component was at when the analysis measured it.
- Deep Analysis records the plugin version it measured, and the Plugins tab now says when a measured verdict was taken against a version you no longer run.
- The per-page breakdown names the version its measurements came from.
- The History tab lists the components and versions each analysis measured.
- The page title now sits at the start of the tab row, with the running plugin version beside it.
- The community rules feed backs off for 12 hours after a failed fetch instead of retrying every hour.
- Queued submissions are claimed atomically, so two background workers can never deliver the same payload twice.
- A submission interrupted by a PHP timeout now waits for its scheduled retry instead of becoming due again immediately.
- Admin styles and scripts refresh as soon as they change, so the analysis screens cannot render with a stale stylesheet.
- Every analysis now records which options each page actually read, so the Overview can name the autoloaded options no page used and the size they cost on every request.
- New Autoloaded options panel on the Overview, with copy-and-paste SQL to switch autoload off for options nothing read and on for options read on nearly every page.
- The Attribution Code owner and Caller buttons on the Plugins tab now swap the table in place instead of reloading the page.
- Measured impact now says when it was measured, and warns when that Deep Analysis ran before the analysis shown beside it or against a version you no longer run.
- A running analysis now opens in the middle of the screen and lists every measurement as it is taken, e.g. "home with super-speedy-search disabled, object cache off", instead of only a progress bar.
- Fixed the minimise button on the running-analysis panel doing nothing.
- Deep Analysis now accepts a page list, so
wp sspa run --type=deep --suspects=my-plugin --pages=admin-orders-searchre-measures one plugin on one page instead of sweeping every page. - Sharing your results with the community is now a durable background queue: each completed run becomes its own versioned anonymised payload, which survives reloads and outages and retries until the community archive confirms it is stored.
- Deep analyses, cache analyses, checkout flows, ad-hoc page profiles, plugin-toggle spot checks and Excimer function, component and phase data are all shared now, each as one coherent run rather than a mixture of the latest profiles and unrelated history.
- Ad-hoc page profiles are shared as a page classification and an opaque identifier, so no URL or URL-derived key leaves your site.
- The Share tab previews the exact JSON each queued payload would send, with its compressed size, SHA-256 and receipt.
- New
Queue existing runscontrol shares the analysis history you already have, in bounded resumable batches, skipping runs that are already queued or archived. - New
Retry now,PauseandResumecontrols per queued payload, replacing the old Submit Now button, which rebuilt a payload from scratch on every press. - Payloads upload straight to the community archive using a short-lived single-object URL issued by superspeedy.org, and TLS verification is always on.
- Sharing stays off until you opt in, an update never turns it on, and turning it off stops new payloads and delivery attempts without deleting anything already archived.
- New
Share thiscontrol on every analysis in the History tab, so you can contribute a single full scan, deep analysis, page analysis, cache analysis, spot check or checkout analysis without switching on sharing for everything else. - The Share tab now presents the two choices separately: share every analysis automatically, or pick individual analyses and share only those.
- Analysis runs never wait on the network, so the community archive being unreachable cannot slow down or fail a run.
0.11.47 August 2026
- The excimer install steps now use your distribution's package (
php8.3-excimerstyle on Debian and Ubuntu, Remi'sphp-pecl-excimeron RHEL and Fedora,php83-pecl-excimeron Alpine), named for the exact PHP version the site runs so servers carrying more than one PHP enable it for the right one; pecl remains only where no package exists, as upstream no longer publishes excimer releases there. - The
tideways_xhprofinstall steps now build the extension from its source repository,github.com/tideways/php-xhprof-extension. - The ask-your-host message carries the same install commands and states which PHP version the site runs.
0.11.37 August 2026
- New deterministic misbehaviour signatures in the checkout analysis, matched by behaviour so white-labelled and hosting-installed forks are caught identically:
checkout_purge_order_pages(a cache plugin "purging" the order itself - with HPOS that is a request to/?p=<order id>that renders a slow 404, fired on every order note),checkout_amp_purge_missing(purging/amp/pages on a site with no AMP plugin, each one a full 404 render), andcheckout_self_fetch_failed(the site calling its own URL and timing out while the customer waits). Each finding names the calling plugin and the specific fix. - Outbound calls keep the values of safe routing keys (
p,page_idand similar), never anything else, so the target of a purge is identifiable.
0.11.27 August 2026
- Fixed the checkout flow's own pre-flight and cleanup steps leaking into the component roll-up, the outbound-call list and the mail totals, which could overstate a cache-purge plugin's cost by a quarter.
- The payment boundary is now stamped at entry to
payment_complete(), so order emails, cache purges and integrations hanging off the status transition are reported as post-payment confirmation time rather than time that risks the sale. - On stores that disallow guest checkout, the customer account WooCommerce creates for the purchase is now deleted with the order, the pre-flight discloses it, and the hourly janitor sweeps any a crashed run left behind.
- One
checkout_blocking_httpfinding per plugin per step, with the call count, total time and the worst call, instead of one finding per call. - Outbound calls now show their method, query-string keys and calling function, so a purge of
/?p=123no longer displays as a fetch of the bare homepage. - Emails sent through a mail plugin that replaces WordPress delivery (Mailgun's HTTP mode and similar) are now all counted and reported as untimed, with their real cost visible under outbound calls, instead of showing as one message in 0ms.
0.11.17 August 2026
- The checkout flow now measures the classic shortcode checkout as well as the block checkout, so a store using
[woocommerce_checkout]no longer gets "Only the block checkout is supported so far". - Fixed the run notes reporting "0 orders deleted" on a checkout flow that failed part way through, when the order had in fact been deleted.
0.11.07 August 2026
- New "Analyse checkout flow" measures the server time your customer waits through at every step of one real purchase, with every plugin on your site active, split at the payment boundary so time that risks the sale is shown separately from time after the money is in.
- A pre-flight panel lists exactly which emails, webhooks and plugins a run will set off before anything is created, and the order is cancelled and deleted afterwards with stock restored.
- New checkout findings
checkout_slow_step,checkout_component_cost,checkout_blocking_http,checkout_mail_inlineandcheckout_dupe_queries. - New
wp sspa checkout-flowcommand plus therun-checkout-flowandget-checkout-flowabilities, with--dry-runto print the pre-flight without buying anything. - Order emails are sent for real during a checkout flow run so your mail server's own time is measured; every other kind of run still sends nothing.
- The checkout flow covers the block checkout, and says so rather than guessing when a store uses the shortcode checkout.
- Profiles now record the request method, so the POST steps of a checkout are no longer listed as GETs.
- The sampling profiler labels the last phase of a REST or
wc-ajaxrequestendpoint_workrather thanrender_and_output.
0.10.127 August 2026
- The installation instructions now point at the GitHub Releases download, https://github.com/superspeedyplugins/super-speedy-performance-analysis/releases/latest
0.10.117 August 2026
- Restored the plugin's own update check against superspeedyplugins.com, so new versions show up on your Plugins screen again. If you are on 0.9.3 to 0.10.10, install this one by hand once from https://github.com/superspeedyplugins/super-speedy-performance-analysis/releases/latest and updates arrive on their own from then on.
0.10.107 August 2026
- Fixed the spot-check offered after you activate or deactivate a plugin re-running itself every time the page reloaded, instead of stopping once its results were in.
- The spot-check notice now clears once you take it up, not only when you dismiss it.
0.10.94 August 2026
- The Tools tab leads with excimer - it is the single biggest capability upgrade a site can make, and the page says so plainly: "if you install one thing, install excimer". Its card describes everything it unlocks (the function view, driven-by splits, per-phase drill-downs) and switches to Active with an in-use description once installed.
- The tracing-profiler card (tideways_xhprof) states honestly that the plugin does not read it: exact call counts are a planned deep-dive mode, and sampling answers most questions without the overhead.
- Function-level profiling has a full guide in the knowledge base at superspeedyplugins.com/kb/super-speedy-performance-analysis/features/function-level-profiling/ - what the function view gives you, how to read self versus inclusive time, and the exact install steps including the noexec /tmp fix.
0.10.84 August 2026
- NEW the panel discloses the measurement path. Profiling requests are loopbacks from your server to itself, and on many hosts those bypass your CDN - arriving WITHOUT the headers Cloudflare adds for real visitors (the country header, WAF marks). Behaviour keyed on those headers then differs between the measured path and the visitor path: WooCommerce's MaxMind lookup, for example, only runs when no country header is present. Every capture records whether it passed through Cloudflare and whether the country header was present, and the panel says so plainly - including a note when Cloudflare was traversed but IP Geolocation is switched off.
0.10.74 August 2026
- NEW the untimed rows expand IN PLACE to the functions that were actually running during that specific phase. Every profiler sample carries a timestamp, so samples are bucketed into the request phases - clicking the render remainder shows the functions sampled during render, clicking the plugin-boot gap shows what ran during plugin boot. Each phase gets its own list instead of one global table answering every click the same way.
- The global "By function" table remains at the bottom as the whole-request view; older stored results without phase data keep the jump-to-table behaviour.
0.10.64 August 2026
- NEW the "By function" table now says who was DRIVING each hot function. When a shared function's time is spent on behalf of several plugins, the row shows the split - "WP_Object_Cache::get, 63ms self, driven by: woocommerce 31ms, seo-by-rank-math 12ms" - using the same shared-library-aware attribution as everything else. This is the difference between knowing the object cache is busy and knowing which plugin is keeping it busy.
0.10.54 August 2026
- The "untimed remainder" rows are now the doorway to the function view: when the sampling profiler ran, clicking any untimed row jumps to the "By function" table and highlights it - that table is where the remainder's time gets named, function by function.
- The panel's "By function" table now lists functions by SELF time first. Sorted by inclusive time, the top rows were WordPress's own bootstrap include chain - plumbing, not culprits. Self time names the functions actually burning the CPU.
0.10.44 August 2026
- The Tools tab's PECL install steps now include the fix for the "shtool ... does not exist or is not executable" failure: hardened servers mount /tmp with noexec, which breaks pecl's build. The verified fix is a temporary exec remount of /tmp for the build, restoring noexec afterwards - proven on a real hardened server.
- The Tools tab's Re-check button now rechecks in place over ajax instead of reloading the page, so it no longer dumps you back on the first tab.
0.10.34 August 2026
- The panel header now reads "Super Speedy Performance Analysis" with a version pill, matching the Super Speedy Imports design - so screenshots also say which version produced the numbers.
0.10.24 August 2026
- The panel header wordmark is now the text-only version, without the icon.
0.10.14 August 2026
- The panel header now carries the current Super Speedy Plugins lockup (icon + wordmark, white), bundled with the plugin instead of borrowed from the shared settings module, whose copy was an older mark.
- Escape closes the panel, on the front end and in wp-admin.
0.10.04 August 2026
- NEW function-level profiling via the excimer PHP extension. When excimer is installed (the Tools tab generates the exact install steps for your server, or a ready-to-paste message for your host), every profiled page automatically gains a "By function" breakdown: which exact functions the time was spent in, with self and inclusive milliseconds, each attributed to its plugin or theme - including inside theme template files, which nothing else can see. Appears in both the "Analyse this page" panel and the Pages tab drill-down.
- Because excimer records a complete call stack for every sample, attribution uses the same shared-library-aware walk as the SQL analysis - a plugin is never blamed for a vendor library another plugin called into.
- Sampling has negligible overhead (the same profiler runs on every Wikipedia request), so it runs during the normal measurement pass without distorting any of the numbers.
- Everything still works without excimer - the breakdown simply does not appear, and the Tools tab card now switches to "in use" once the extension is present.
0.9.154 August 2026
- The panel's provenance line now leads with a relative age ("5m ago", "just now") computed server-side, so you never have to reconcile the timestamp against the server's timezone.
- The cryptic "anon" label now says what it means: "profiled as a logged-out visitor" (or "profiled as admin" for wp-admin URLs) - front-end pages are deliberately measured the way a real visitor gets them, without the admin bar and admin-only hooks.
0.9.144 August 2026
- NEW every phase in "Where the PHP time went" is now expandable - click a phase to see which plugins its time belongs to (plugin file loading per plugin, plugins_loaded/init/wp_loaded callbacks per plugin, the render phase per plugin), with anything our instruments could not see honestly labelled. Works on already-stored results too - the data was always captured, just not shown.
- NEW much more of the render phase is now timed. WooCommerce's template layout hooks (shop loop, product summaries, sidebar and friends) and every dynamic block render are individually timed and attributed to the plugin that provides them, so the "untimed remainder" shrinks to genuinely just the theme's own template code.
- FIXED on archive pages, hooks that fire once per post (the_content, the WooCommerce loop hooks) had their callbacks re-wrapped on every firing, nesting the timers and counting the same work more than once. Wrapping now happens exactly once per hook.
0.9.134 August 2026
- The "Analyse this page" panel is now branded and styled to match the Super Speedy design language: purple accents, rounded corners, the Super Speedy Plugins wordmark in the header, and a "Powered by Super Speedy Performance Analysis - free from superspeedyplugins.com" footer, so screenshots of your results say where they came from.
- Slow queries are click-to-copy: the row shows the start of the query, clicking it copies the FULL query to your clipboard and confirms with a small "Copied" toast that fades out.
- Tested up to WordPress 7.0.
0.9.124 August 2026
- The "Analyse this page" popover is now a full-width panel under the toolbar - no scrolling, and room for everything.
- FIXED a long unbreakable callback name (namespaced class names have no spaces) could blow one column out sideways, squeezing the other column and pushing the millisecond values off the edge. Columns are now hard-capped at half the width and long names wrap.
- Whether you are looking at a stored result is now unmissable: a "Cached result" / "Fresh result" badge with the timestamp sits in a bar at the TOP of the panel, next to the Re-run button - no more scrolling to re-run.
- "Full detail" is renamed "Open in Performance Analysis" and moved to a quiet link on the right of that bar - it leads to the site-wide view (all pages side by side, per-plugin SQL aggregates, HTTP calls, duplicate queries, history), not to more detail about this one page.
0.9.114 August 2026
- FIXED the popover's Re-run and Full detail buttons no longer use the generic "button" class, which themes restyle unpredictably (some with !important) and which has no styling at all on the front end of most themes. They now carry the plugin's own class with self-contained styling, verified against a live WooCommerce theme.
0.9.104 August 2026
- NEW render breakdown. The "Template render + output" phase is no longer a single number: every wp_head/wp_footer/content-filter callback, every shortcode and every widget is individually timed and attributed to its plugin, with the remainder honestly labelled as the theme's own template code. Widgets are attributed to the plugin that provides them, not to WordPress core.
- The "Analyse this page" popover is now a two-column layout - roughly double the width, phases and stats on the left, per-plugin costs and the render breakdown on the right, slowest queries across the bottom - so results fit without scrolling.
- The same render breakdown appears in the Pages tab drill-down.
0.9.94 August 2026
- FIXED the "Where the PHP time went" phase table stopped at routing, so on a real page its rows summed to well under the generation time and the difference looked unmeasurable - when it was simply the template render. The table now accounts for the whole request: new "Post-init boot" and "Template render + output" rows close the gap, and the phases sum to the page's generation time.
0.9.84 August 2026
- NEW "Analyse this page" in the admin toolbar. On any page of your site - front end or wp-admin - click the button and the plugin profiles the exact URL you are looking at while you watch, then shows the results in a popover: generation time, SQL, HTTP and RAM, where the PHP time went (per plugin), and the slowest queries. Click it again later on the same page and the stored result reopens instantly, with a Re-run button.
- These one-page checks are stored separately from full analyses, so they never replace your site-wide results on the Overview and Pages tabs.
- Admins only, same-site URLs only, and the profiling requests are the same signed, cache-busted, never-cached requests the full analysis uses.
0.9.73 August 2026
- NEW bootstrap decomposition - the answer to "every page is slow but no single plugin shows up". Many sites pay a flat PHP cost on every request (plugin loading plus init hooks) that is spread across dozens of plugins in slices too small for one-at-a-time exclusion to see. Every profiled page now records where that time went, with nothing to install: the request broken into phases (core, plugin file loading, plugin boot callbacks, theme setup, init, routing, render), the PHP cost of EVERY plugin individually (file load time plus its callbacks on the expensive hooks), and the slowest single hook callbacks by name.
- Find it in the Pages tab: click any page row - "Where the PHP time went" appears in the drill-down alongside the existing query and HTTP detail.
- The instrument only runs on the analysis's own signed requests, adds two clock reads per callback there, and touches nothing on normal traffic.
Showing the 40 most recent of 57 releases. View the full history
