Skip to content

Fast pages, cleared just right

Speedy Cache saves your Craft pages as static files and clears only the ones that change. No database tables, no template changes, and Cloudflare and CloudFront built in. Save something below and see what clears.

Get startedHow clearing works →

In the control panel

Your site’s cached pages

  • /Cached
  • /newsCached
  • /news/summer-saleCached
  • /news/winter-menuCached
  • /aboutCached
  • /contactCached
  • /shop/veg-boxCached

Choose a change on the left.

316 ms,

Built by Craft316 ms
No cache
From Speedy, through PHP30 ms
Works as soon as it’s installed
From Speedy, by the web server1 ms
With the server rules

Our store locator page, measured on our test site. Your times will vary; the gap won’t.

A message in the control panel: Cached pages are served without PHP, in 1 ms.
Utilities → Speedy Cache checks it for you.

Fast, without the usual worries

See why it cleared

A plain-English log: what was saved, how many pages cleared, and which ones.

Recent clears: Saved entry “Adelaide CBD Store” cleared 7 pages, listed underneath

Your database stays small

Pages and what they depend on are files. Speedy adds no tables, so backups and deploys stay quick.

web/speedy/
  example.com/news/index.html
storage/speedy/
  meta/example.com/news.json
  tags/3f/3f2a…e9.txt
  log.jsonl

Forms just work

Cached pages get a fresh CSRF token as they load. No template changes, no “Bad request” on submit.

{# Your template, unchanged #}
<form method="post">
  {{ csrfInput() }}
  …
</form>

Safe by default

Logged-in visitors, carts, pages that set cookies and pages with query strings are never cached.

X-Speedy: HIT
X-Speedy: SKIP logged in
X-Speedy: SKIP cart
X-Speedy: SKIP query string
X-Speedy: STATIC

Editing never clears

Drafts and autosaves are ignored. Imports of thousands of entries make one clear, not thousands.

$ php craft resave/entries --section=news
Done resaving entries.
→ 1 clear job queued

Two settings to start

On, and URLs to never cache. CDN keys if you have one. Everything else has a sensible default.

Speedy Cache settings: Cache pages, Never cache, and the Cloudflare and CloudFront fields

Your site is behind CloudFront

  1. /news/summer-sale/news/
  2. 38 pages changed in one import
  3. /news*/shop*/

3 paths sent, not 38 · 214 of 1,000 free paths used this month

Your CDN, cleared for you

Speedy spots your CDN from its headers. Add a token and the CDN keeps your pages too, at the edge, close to visitors. When content changes, Speedy clears it there as well.

  • Cloudflare. A token with one permission, Cache Purge.
  • CloudFront. Batched into wildcards to stay in the 1,000 free paths a month, with a counter. No AWS SDK.
  • No token yet? The CDN is told not to keep pages, so it never shows an old one.

Cloudflare · CloudFront →

A row of brass and black tube heads with pressure gauges in Prague’s pneumatic post station
Tube heads at the central station of Prague’s pneumatic post.

Ready before anyone asks

For more than a century, Prague’s pneumatic post sent letters through tubes under the city. Nobody walked them across town: they were sealed, sent and there. A cached page works the same way. It’s built once, ahead of time, and goes straight out to every visitor without Craft lifting a finger.

Brass control panels for each tube line, made by Mix & Genest of Berlin, with coloured indicator lights
A panel for each line, so the right message reached the right place.
The blower room: rows of blue motors that pushed air through the tubes
The blower room that kept it all moving.

Fast in three steps

Install it.

composer require suprim/speedy
php craft plugin/install speedy

Pages are cached from the next visit. That’s it for most sites.

Add the server rules, if you can.

php craft speedy/server-rules

Optional. Pages are already cached. Paste the rules into Nginx or Apache and cached pages skip PHP too: 1 ms instead of 30.

Add your CDN, if you have one.

A Cloudflare token or CloudFront key in Settings → Plugins → Speedy Cache.

Make every page feel instant.

composer require suprim/speedy
Installation guide →