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.
Install
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.zipA 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
@importstarts a new file. - Minifies the large inline style block that block themes print on every page.
- Adds
font-display: swapwhere 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_scriptdata and before/after inline scripts keep working. - Some scripts must run while the page loads:
document.writescripts, 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=1to 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
- Download the latest zip from Releases, or build it yourself (see below).
- In WordPress, go to Plugins → Add New → Upload Plugin and upload the zip.
- Activate the plugin. Then open your site in a private window and check that it looks and works as before.
- 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.
- Copy
tests/fixtures/ss-helper.phptowp-content/mu-plugins/. It is a test helper; never use it on a live site. - Install
tests/fixtures/ss-fixtureandtests/fixtures/ss-trapsas plugins. - 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.