WP Manifestindependent plugin directory
manifest / performance / steady-speed

Steady Speed

WordPress plugin: faster pages that still work. Minifies CSS/JS, removes render-blocking files, defers scripts in their original order, lazy-loads images.

★ 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/rem700/steady-speed/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

A WordPress plugin that makes pages load faster without breaking them. It minifies CSS and JavaScript, removes render-blocking files, defers scripts in their original order and lazy-loads images.

It is meant as a safer alternative to Autoptimize-style optimizers. The order in which styles and scripts run is what usually breaks sites, so Steady Speed never changes it. It only optimizes files; for page caching, use your host's cache or any page cache plugin alongside it.

Features

Styles (CSS)

  • Minifies stylesheets and rewrites the paths inside them (images, fonts, @import), so they work from any location.
  • Puts small stylesheets straight into the page, so they no longer block the first paint.
  • Combines only neighbouring stylesheets, so the cascade stays exactly the same. An external @import starts a new file.
  • Minifies the large inline style block that block themes print on every page.
  • Adds font-display: swap where a theme left it out.
  • Optional: loads stylesheets without blocking, together with critical CSS.

Scripts (JavaScript)

  • Defers scripts in their original order, inline scripts too. jQuery code, wp_localize_script data and before/after inline scripts keep working.
  • Some scripts must run while the page loads: document.write scripts, scripts you exclude, and everything before them. These stay in place.
  • Scripts that look up their own address (webpack chunks, document.currentScript) are never moved.
  • Minifies unminified files. Code the minifier is not safe with is left as is.
  • Optional: combines neighbouring scripts, and loads chat widgets or analytics on the visitor's first interaction.

Images, fonts, HTML

  • Lazy-loads images and iframes below the first few.
  • Marks the main image with fetchpriority="high" when the theme did not.
  • Speeds up Google Fonts, adds preconnects, preloads fonts.
  • Removes the emoji script. HTML minification is optional.

Safety

  • Test mode: only administrators see optimized pages.
  • Add ?nooptimize=1 to any address to see the original page. The admin bar has a link for it.
  • On any error, the original page is served. Huge pages and inline scripts are handled without regular-expression limits.
  • Clearing keeps old files for a day, so pages saved by a page cache keep working. Common page caches are cleared too.
  • Warns when another plugin (Autoptimize, WP Rocket, LiteSpeed Cache and others) optimizes the same files.
  • Never touches page-builder editors, AMP, feeds, REST, sitemaps, logins, AJAX or POST requests.
  • No external services, accounts or tracking.

Languages: English, Russian, Ukrainian, Hungarian, German. A .pot file is included for other languages.

Requirements

WordPress 6.4+ and PHP 7.4+ (tested up to PHP 8.4 and WordPress 7.1).

Installation

  1. Download the latest zip from Releases, or build it yourself (see below).
  2. In WordPress, go to Plugins → Add New → Upload Plugin and upload the zip.
  3. Activate the plugin. Then open your site in a private window and check that it looks and works as before.
  4. Fine-tune the plugin in Settings → Steady Speed.

Development

bin/build.sh                    # builds dist/steady-speed-<version>.zip (git archive, without tests/tools)
python3 tools/i18n/extract.py   # collects translatable strings
python3 tools/i18n/build.py     # writes languages/*.po, *.mo and steady-speed.pot (checks placeholders)

The tests run inside a WordPress install. The authors use WordPress Playground on port 9400.

  1. Copy tests/fixtures/ss-helper.php to wp-content/mu-plugins/. It is a test helper; never use it on a live site.
  2. Install tests/fixtures/ss-fixture and tests/fixtures/ss-traps as plugins.
  3. Run the suites:
  • tests/unit.php — 91 unit tests. Run them with ?ss_helper=php&v=require WP_PLUGIN_DIR."/steady-speed/tests/unit.php";.
  • tests/e2e/*.py — browser comparisons with Playwright and Chromium. They load each page with and without optimization and compare the results:
    • script order, computed styles and screenshots;
    • a settings matrix;
    • request types;
    • security checks;
    • trap scenarios;
    • theme and plugin compatibility.
  • tests/minifier/ — CSS torture test. Computed styles must match in Chromium.

Third-party code

Minify and PathConverter by Matthias Mullie, MIT license. They are bundled under the SteadySpeed\Vendor namespace with one fix: true.valueOf no longer becomes invalid code.

License

GPL-2.0-or-later. See LICENSE.