PhastPress uses advanced techniques to manipulate your pages, scripts, stylesheets and images to significantly improve load times. It’s designed to conform to Google PageSpeed Insights and GTmetrix recommendations and can improve your site’s score dramatically.

PhastPress’ motto is no configuration. Install, activate and go!

PhastPress has the Phast web page optimisation engine by Albert Peschar and Milko Kosturkov at its core.

Image optimization:

  • Phast optimizes images using PNG quantization (pngquant) and JPEG recoding (libjpeg-turbo).
  • Phast inlines small images (< 512 bytes) in the page.
  • Phast converts JPEG images into WebP for supporting browsers.
  • Phast enables native lazy loading to speed up page loading and save bandwidth.

Asynchronous scripts and stylesheets:

  • Phast loads all scripts on your page asynchronously and in a single request, while maintaining full compatibility with legacy scripts, due to our custom script loader.
  • Phast proxies external scripts to extend their cache lifetime.
  • Phast inlines critical CSS automatically by comparing the rules in your stylesheets with the elements on your page.
  • Phast loads non-critical CSS asynchronously and in a single request.
  • Phast inlines Google Fonts CSS.
  • Phast lazily loads IFrames to prioritize the main page load.

Get the full power of Phast for your website by installing PhastPress now.

For commercial support and bug reports, click here.


  1. Upload the PhastPress plugin to your site and activate it.
  2. Make sure that PhastPress is activated on the Settings page.
  3. Test your site. If you experience any issues, you may request commercial support.


Should I use other optimization plugins with PhastPress?

No. You do not need any other plugins, such as image optimization (e.g., Smush) or file minification (e.g., Autoptimize) after you install PhastPress, because PhastPress includes all necessary optimizations.

I recommend using the simple combination of PhastPress and WP Super Cache only. This reduces the potential for plugin conflicts, and it is really all you need.

Fast Velocity Minify is not compatible with PhastPress, and causes PhastPress not to work. Please use either plugin, but not both.

What about caching and compatibility with caching plugins?

Caching means saving the HTML from the first visit to a page for later visits, so it does not have to be generated each time. Caching also helps performance with PhastPress, because the page needs to be optimized only once. It is recommendable to use a caching plugin with PhastPress.

PhastPress is not a caching plugin. I recommend using WP Super Cache in combination with PhastPress to speed up your server response time (TTFB).

In case you are using another caching plugin, please read the notes below:

WP Fastest Cache: Compatible with PhastPress, but non-caching optimizations must be disabled. Turn off the WP Fastest Cache options in this screenshot.

W3 Total Cache: Compatible with PhastPress, but non-caching optimizations must be disabled. Specifically, the Prevent caching of objects after settings change option causes problems.

Cache Enabler (by KeyCDN): Not compatible with PhastPress. Cached pages will not be optimized.

Generally, PhastPress should be compatible with other caching plugins as well. Some caching plugins include optimizations of JavaScript, CSS and/or images. I recommend turning off all optimizations to avoid conflicts with PhastPress.

Is PhastPress compatible with Asset CleanUp: Page Speed Booster?

Yes. The core functionality of Asset CleanUp: Page Speed Booster complements PhastPress by removing unused JavaScript and CSS from the page.

Do not use Asset CleanUp’s features for optimizing CSS and JS. These features can cause conflicts with PhastPress, and they are not needed, because PhastPress already does this.

PhastPress is enabled, but nothing happens

You might be using a plugin that compresses the page before PhastPress processes it. When that happens, PhastPress cannot apply optimizations.

For example, if you are using the Far Future Expiry Header plugin, disable the option “Enable Gzip Compression”.

Why does PhastPress not impact the “Fully Loaded Time” measured by GTmetrix?

The “Fully Loaded Time” in GTmetrix is the amount of time taken until all network activity ceases. This measurement can be misleading because it does not take into account the order in which resources load.

Normally, external resources such as scripts and stylesheets must be downloaded, parsed and executed before the page can be rendered. PhastPress changes this sequence by including all necessary resources (that is, the critical CSS) in the page, and executing scripts asynchronously, so that they do not block the rendering of the page.

This causes the page to be visible earlier in the browser, but does not change GTmetrix’s fully loaded time.

In order to see this effect, register and log in to GTmetrix and enable the “Video” option. Then test your site (with Phast enabled), and use the “Compare” button to again test your site, but while appending “?phast=-phast” to the URL (eg, When the comparison loads, select the “Filmstrips” tab and you’ll see the difference. The Phast-optimized version of your site should start rendering much earlier.

Can I use a hook to disable PhastPress?

Should you need to disable PhastPress on certain pages, you can use the following code to do so:

add_filter('phastpress_disable', '__return_true');

Make sure that this code runs during template_redirect or earlier.

Can I use disable PhastPress on WooCommerce checkout and cart pages?

Add this code to your theme’s functions.php, or to a new file in wp-content/mu-plugins:

add_filter('phastpress_disable', function ($disable) {
    return $disable || is_cart() || is_checkout();

How and when does PhastPress clean the cache?

PhastPress uses filesize and modification time information to detect file changes, so clearing the cache is generally not needed. When you change a script or CSS file, the change should be visible immediately after reloading.

If you do want to clear the cache, you can delete all the data inside wp-content/cache/phastpress or wp-content/plugins/phastpress/cache.

How do I exclude a specific script from optimization?

By default, PhastPress delays the load of all scripts until after the DOM has finished loading, so that the browser can render the page as quickly as possible. If you wish to load specific scripts as soon as possible, such as Google Analytics, you may add the data-phast-no-defer attribute to the script. It would be preferable to also mark external scripts as async, when possible.

For example:

<script data-phast-no-defer>
// my script goes here


<script async data-phast-no-defer src=""></script>

If you (or a plugin) are using wp_enqueue_script to add the script to the page, you can use the phast_no_defer data key to stop PhastPress from processing the script:

wp_script_add_data('my_script_name', 'phast_no_defer', true);

Make sure this is run after registering the script. If you are trying to apply this to a script loaded by a plugin, you could use the wp_print_scripts hook:

add_action('wp_print_scripts', function () {
    wp_script_add_data('my_script_name', 'phast_no_defer', true);

If you use the HTML source code to find the script name, note that -js and -js-extra are not part of the name. For example, for a script like <script id="jquery-core-js"> in the source code, the script name is jquery-core, and that is what you should pass to wp_script_add_data.

This is applied automatically for these scripts:

  • Google Analytics script inserted by Monsterinsights since PhastPress 1.29.
  • Tracking script inserted by Slimstat Analytics since PhastPress 1.30.
  • Google Analytics script inserted by Google Site Kit since PhastPress 1.75.
  • Google Analytics script inserted by GA Google Analytics since PhastPress 1.76.

Does PhastPress collect data or use external services?

Images are optimized using a free API, provided by the creator of PhastPress.

During image optimization, the following data is sent to the API:

  • the URL on which PhastPress is used
  • the version of the plugin
  • the PHP version (to track compatibility requirements)
  • the image itself

Images are sent to the API only once. Processed images are stored locally, and not retained by the API.

If image optimization is switched off, the API will not be used.

I get an error saying “Headers already sent”. How do I fix this?

Your theme or a plugin is trying to send HTTP headers after the page has started rendering and bytes have been sent to the browser. This is wrong, but it works when PHP output buffering is enabled.

PhastPress always sends output as soon as possible, to reduce the time to first byte. That means this problem cannot be fixed without slowing down sites without buggy themes/plugins.

To fix the problem on your site, the following code needs to be run in order to enable output buffering:

add_action('template_redirect', function () {

You can add this code to your theme’s functions.php, or create a file output-buffer.php in wp-content/mu-plugins with the above code. You may have to create this directory first.

Alternatively, download and extract the contents into your web folder. You should end up with a file named output-buffer.php in wp-content/mu-plugins.

Can I optimize images without changing their URLs?

Yes. Add these two lines to your .htaccess file:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^wp-content/.*[^/]\.(jpe?g|gif|png)$ wp-content/plugins/phastpress/phast.php [L,NC,E=PHAST_SERVICE:images]

Then in PhastPress settings, disable image optimization in tags and CSS.

Now, reload your site and check if images are optimized.

Is it possible to use PhastPress with a CSP?

Yes, as long as you use a CSP with a script-src policy containing nonce-*. To enable Phast’s support for CSP implement the phastpress_csp_nonce filter:

add_filter('phastpress_csp_nonce', function () {
    return 'my-nonce';

Why do images not get converted to WebP when using Cloudflare?

Cloudflare does not support Vary: Accept, so sending WebP via Cloudflare can cause browsers that don’t support WebP to download the wrong image type. You can try using Cloudflare Polish instead.


I once saw a video from a YouTuber called Web Squadron. He adviced to use Phastpress and WP Meteor to use to optimize WordPress. I’ve been using WP Rocket for a while now. It did improve the speed of our site but all those options were just too hard to perfectly set up.  Phastpress is just a really simple and a great plug-in. It improves the Pagespeed score a good bit and in combination with WP Meteor, it’s even better! I myself use EWWW Image optimizer to optimize and lazyload all my images. I can easily disable the lazy load option in Phastpress and it seems to be perfectly compatible with all sort of plugins. It works great with Elementor (and WooCommerce, ARMember, ACF, etc) and I haven’t seen any quirks yet.  Thank you for creating this great FREE plug-in!
March 6, 2023
This plugin is simple to setup but it very effective in optimizing the website. The number of requests for a page when way down. Initially there were some errors caused by CSS Optimizations. Albert quickly responded within a few hours, even over the weekend, and changed a setting to fix the problem. I was made of aware of this plugin by Imran "How to Boost Page Speed Optimization WordPress for FREE in 2023 "
August 7, 2022
Over the years, I think I've tried just about every optimization plugin out there, Including WP Rocket, Autoptimize, etc. PhastPress is better than all of them, and it's free. I'd be happy to pay for this plugin; it's that good. Big thanks to Albert :))
June 16, 2021
The plugin works as promised and delivers the results in no time. I am very glad that I found this plugin. In addition, Albert is the person who really cares about regular users like myself. I was contacting him with some questions and received decent response. Keep up a great job! Simon
Read all 98 reviews

Contributors & Developers

“PhastPress” is open source software. The following people have contributed to this plugin.


“PhastPress” has been translated into 2 locales. Thank you to the translators for their contributions.

Translate “PhastPress” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.


3.2 – 2024-02-23

  • Do not check SQLite version and do not require support for WITHOUT ROWID.

Updated Phast to version 1.110 to support versions of SQLite without WITHOUT ROWID support.

3.1 – 2024-02-21

  • Check that SQLite is version 3.8.2 or newer.

3.0 – 2023-12-01

  • Moved from deprecated \Requests to \WpOrg\Requests\Requests class.
  • PhastPress now requires WordPress 6.2.

2.19 – 2023-10-27

  • Bump “Tested up to” to WordPress 6.4.

2.18 – 2023-08-10

  • Bump “Tested up to” to WordPress 6.3.

2.17 – 2023-08-09

  • In resource optimization service, stop wp-load.php as soon as WPINC is defined.

2.16 – 2023-05-14

  • Fix deprecation warnings in the control panel.
  • Fix installation notice on dashboard.

Update Phast to version 1.109:

  • Fix deprecation warnings.

2.15 – 2023-05-13

Update Phast to version 1.108:

  • Fix deprecation warnings.

2.14 – 2023-04-17

  • Fix fatal error on phastpress_disable if unconfigured.

2.13 – 2023-04-17

Update Phast to version 1.107:

  • Prevent duplication of self-closing <meta charset> tags.

2.12 – 2023-03-30

  • Fix WordPress 6.2 compatibility.

2.11 – 2023-03-18

  • Bump “Tested up to” to WordPress 6.2.

2.10 – 2022-11-18

Update Phast to version 1.106:

  • Set Content-Type: application/json header on bundler responses.
  • Remove X-Robots-Tag header.

2.9 – 2022-11-07

  • Prevent undefined array index warning.

2.8 – 2022-11-07

2.7 – 2022-10-31

  • Bump “Tested up to” to WordPress 6.1.

Update Phast to version 1.105:

  • Set X-Robots-Tag: none header on bundler responses to prevent search engines from indexing them.

2.6 – 2022-10-11

  • Bump “Tested up to” to WordPress 6.0.2.

2.5 – 2022-08-06

  • Add nonce attributes to script tags generated by PhastPress itself.

PhastPress now requires WordPress 5.7 or later.

2.4 – 2022-07-26

  • Add phastpress_csp_nonce filter.

2.3 – 2022-04-04

  • Clarity PDO_SQLITE requirement message.

2.2 – 2022-04-03

Update Phast to version 1.104:

  • Improve CSP support.
  • Use SQLite3 database for caching instead of a file tree.

2.1 – 2021-10-07

Update Phast to version 1.103:

  • Update CA bundle.

2.0 – 2021-09-27

  • Require PHP 7.3.

Update Phast to version 1.102:

  • Don’t rewrite the URLs of dynamically inserted module scripts. This fixes compatibility with Presto Player.

1.125 – 2021-09-07

Update Phast to version 1.101:

  • Ensure the security token never gets reset when the cache grows too large. This prevents resource URLs from changing suddenly.

1.124 – 2021-05-31

  • Prevent dark flash when OS dark mode is active but theme dark mode is disabled.

1.123 – 2021-05-26

  • Add missing file; simplify logic; improve log message.

1.122 – 2021-05-26

  • Prevent light flash when using the dark mode in the Twenty Twenty One theme, even when the page is large enough to trigger multiple renders.

This release misses a file. Please use 1.123 instead.

1.121 – 2021-05-20

  • Prevent light flash when using the dark mode in the Twenty Twenty One theme.

1.120 – 2021-05-13

Update Phast to version 1.100:

  • Send 403 and 404 status codes for unauthorized and not found resource URLs respectively, if they cannot be safely redirected to the original resource.

1.119 – 2021-05-09

  • Fix notice on undefined cspNonce variable.

1.118 – 2021-05-04

  • Avoid an issue with the Stop Spammers plugin preventing the install notice from being closed.

1.117 – 2021-04-28

Update Phast to version 1.99:

  • Prefix async, defer attributes with data-phast- to please W3C validator.

1.116 – 2021-04-21

  • Update settings labels about IFrame lazy loading.

1.115 – 2021-04-21

Update Phast to version 1.98:

1.114 – 2021-03-17

  • Deterministically generate security key based on WordPress secret keys. This avoids URLs changing when the cache is emptied.

1.112 – 2021-03-17

  • Bump WordPress compatibility to 5.7.

1.111 – 2021-03-17

Update Phast to version 1.97:

  • Fix open redirect on phast.php. This would allow a malicious person to redirect someone to a third-party site via phast.php by sending them a link. This can enable phishing attacks if the user is mislead by the hostname of the initial URL. It does not compromise the security of your site itself.

1.110 – 2021-03-11

Update Phast to version 1.96:

  • Don’t emulate document.currentScript for scripts that are executed normally. This prevents some scripts from seeing the wrong currentScript accidentally.

1.109 – 2021-03-09

Update Phast to version 1.95:

  • Do not rewrite <img> element src when it has a rev-slidebg class and points to transparent.png. This is because Revolution Slider‘s JavaScript depends on the image filename for its logic.

1.108 – 2021-03-09

  • Optimize AJAX responses generated by the quick view functionality in Flatsome theme.

1.107 – 2021-03-09

Update Phast to version 1.94 to support this improvement.

1.106 – 2021-03-08

Update Phast to version 1.93:

  • Don’t optimize snippets if they look like JSON objects, ie, start with {".

1.105 – 2021-03-08

Update Phast to version 1.92:

  • Support whitespace in url() in CSS. Eg, url( 'file.jpg' ) is not
    processed correctly.

1.104 – 2021-03-04

Update Phast to version 1.91:

  • Make message about inability to override document.readyState a warning rather than an error, to avoid spurious complaints from PageSpeed Insights.

1.103 – 2021-03-04

Update Phast to version 1.90:

  • Correctly support additional arguments when using setTimeout. This fixes a regression in version 1.83.

1.102 – 2021-03-04

  • Add phastpress_optimize_snippet function to allow arbitrary HTML to be optimized.

Update Phast to version 1.89:

  • Ensure error pages are always interpreted as UTF-8.

1.101 – 2021-02-26

Update Phast to version 1.88:

  • Simplify PATH_INFO calculation if the environment variable is missing. This is now determined by splitting the path component of REQUEST_URI on .php/.
  • Improve error messages, hopefully aiding troubleshooting when phast.php isn’t doing it’s job.

1.100 – 2021-02-18

  • Handle multisite installations in subdirectories.

1.99 – 2021-02-05

Update Phast to version 1.87:

  • Fix handling of closing parenthesis and string literal separated by newline in JSMin.

1.98 – 2021-02-02

1.97 – 2021-02-01

Update Phast to version 1.86:

  • Use text/plain MIME type for the bundled CSS and JS responses. This helps apply automatic response compression in some server configurations (specifically o2switch).

1.96 – 2021-01-28

Update Phast to version 1.85:

  • Raise maximum page size to 2 MiB.

1.95 – 2021-01-28

  • Add compatibility for LiteSpeed Cache. PhastPress optimizations would not work before this.

1.94 – 2021-01-18

Update Phast to version 1.84:

  • Detect WOFF2 support using a feature test, instead of relying on the user agent. This fixes Google Fonts on iOS 9 and earlier.

1.93 – 2021-01-04

Update Phast to version 1.83:

  • Make sure setTimeout chains in DOMContentLoaded are completely executed before the load event is triggered. This fixes some uses of jQuery’s ready event.

1.92 – 2020-12-16

Update Phast to version 1.81:

  • Use Base64-based path info for server-generated URLs.

1.91 – 2020-12-16

Update Phast to version 1.80:

  • Encode characters that cannot occur in URLs. This fixes canonical URLs for optimized images if those URLs contained special characters.

1.90 – 2020-11-19

  • Delay NextGEN Gallery resource manager output buffer hook until after PhastPress deployment if WP Super Cache late init is enabled. This fixes an issue where footer scripts would disappear when NextGEN Gallery and WP Super Cache late init were used at the same time.

1.89 – 2020-11-18

  • Delay deployment until init hook if WP Super Cache late init is enabled. This fixes PhastPress optimizations being done on every load in WP Super Cache’s Simple mode, and not being done at all in Expert mode.

1.88 – 2020-11-18

Update Phast to version 1.79:

  • Support document.currentScript in optimized scripts. (This fixed compatibility with PDF Embedder.)
  • Prevent (suppressed) notice from ob_end_clean.

1.87 – 2020-10-28

Update Phast to version 1.78:

  • Handle <!doctype html ...> declarations correctly, and don’t insert <meta charset> before them. (This broke pages using old XHTML doctypes.)

1.86 – 2020-10-23

  • Disable PhastPress when editing with WPBakery.

1.85 – 2020-10-23

Update Phast to version 1.77:

  • Insert <meta charset=utf-8> tag right after <head> and remove existing <meta charset> tags. This fixes an issue where the <meta charset> tag appears more than 512 bytes into the document, causing encoding issues.

= 1.84 – …