Cache warming service by Stone & Water

So your Shopware shop never starts cold.

After every cache flush, every deploy, every plugin update the first request is slow - and that's exactly when the first customer often walks in. Cache Warmer pre-crawls your URLs, parallelises politely with HTTP/2 pooling, and emails you once everything is warm again. Multiple shops, fixed intervals, all from one place.

10,000+URLs per run
15xfaster through HTTP/2 pooling
shops per account
99.9 %uptime on Creoline hosting

Pre-crawl every URL - before the first customer hits it.

Shopware caches get invalidated on every deploy, every plugin activation, every cron flush. The first request per page then has to rebuild the complete template, all hooks and all listings from scratch - often 3 to 10 seconds. Cache Warmer makes exactly that first request before a real visitor does.

Cold start after flush

Without Cache Warmer

The first visitor hits a page that takes 3 to 10 seconds. Bounce rate goes up, conversion drops, Google PageSpeed score sinks. With heavy traffic, hundreds of pages get hit before the caches stabilise.

Warm start, automatic

With Cache Warmer

Right after the cache flush, the sitemap gets walked. Categories, product detail pages, CMS pages, manufacturer listings - all pre-loaded. The first real visitor gets the fast cached version immediately.

Trigger

Automatic after cache flush

Via webhook from the Shopware admin, via cronjob, or manually from the dashboard - you choose when the warmer runs. Also straight after bin/console cache:clear.

URL sources

Sitemap auto-discovery

Reads sitemap.xml and any sitemap index files. Optional additional static URL lists per shop. Variant products, categories, CMS pages - picked up automatically.

Politeness

Polite, not aggressive

Sequential processing per shop, always inside the defined time window. No DDoS of your own server - the load stays within what your hardware can handle.

Detection

X-Cache-header awareness

Automatically detects whether a hit or miss occurred (Varnish, Cloudflare, Shopware HTTP cache). Statistics per run: how many pages were already warm, how many had to be rebuilt.

Robustness

Automatic retry

Failed URLs (5xx, timeout) are retried with exponential backoff. Permanently failed calls show up in the report - grouped by HTTP status.

Languages & channels

Per sales channel and language

Every sales channel, every language, every domain is handled separately - multi-shop setups are first-class citizens, not a workaround.

One service for all your shops.

Agencies with ten shops, brands with three storefronts: every shop gets its own configuration, its own schedule and its own reports. Warming happens exactly in the intervals you define per shop - without a dedicated server per shop.

Schedule

Fixed intervals per shop

For every shop you decide when warming happens: hourly, nightly, after each deploy. The cron sticks to exactly that setting.

  • Any number of shops per account
  • Own schedule and own time window per shop
  • If one run is skipped, the other appointments stay untouched
Order

One run after the other

Runs of the same shop never overlap. If the next appointment comes up while a run is still going, it is queued instead of started on top. Load and bandwidth stay predictable.

Load behaviour

Predictable for your server

You decide how much load arrives, per shop: number of parallel requests, pause between requests and the time window in which warming is allowed.

Separation

Every shop on its own

Configuration, URLs, reports and statistics belong strictly to one shop. The audit log only ever shows the runs of your own shops.

Per-shop settings

Individual configuration per shop

Concurrency, user agent, auth headers, custom URLs, ignored paths - all configurable per shop. Defaults for all shops, exceptions per shop.

Access

Staff with their own permissions

Main account with all shops, individual staff members only see the shops assigned to them. Read-only or read-write configurable.

Why it matters

The first visit after a flush decides everything.

After every deploy, plugin activation and cron flush, the first request per page has to rebuild the entire template. That first request is exactly what the Cache Warmer takes over, before a real visitor makes it.

HTTP/2 pooling with HTTP/1.1 fallback.

Instead of opening a new TCP and TLS connection for each URL, the warmer keeps an HTTP/2 stream open per origin. Hundreds of URLs travel through a single connection - faster, leaner, and seen by the server as one coherent stream rather than many connections.

Connection pooling

One TLS session per origin

HTTP/2 multiplexing allows multiple parallel streams over a single connection. Instead of 100 TLS handshakes for 100 URLs there is one - 10 to 15× faster on modern hosts.

  • Automatic ALPN negotiation for h2 vs. http/1.1
  • Pool is rebuilt per run and cleanly closed afterwards
  • Optional keepalive across runs
Graceful fallback

HTTP/1.1 when needed

If the origin doesn't speak HTTP/2 (old proxies, some Plesk setups), the warmer automatically falls back to HTTP/1.1 with connection keepalive. No intervention, no manual toggling.

Concurrency control

Configurable per shop

Default 4 parallel requests per shop - adjustable from 1 (for very weak servers) up to 16 (for beefy machines). Each run includes a statistical hint whether the concurrency was too high or too low.

Rate limiting

Configurable sleep between requests

Optional sleep between requests - for very sensitive shared hosting. Dynamic sleep based on the last response code is also possible.

User agent

Recognisable and respectful crawler

Default user agent StoneWaterCacheWarmer/1.x - unambiguously identifiable in server logs, clearly distinct from search engine bots. Override per shop.

HTTP auth

Basic auth, bearer token, IP whitelist

Staging environments with HTTP auth? A token in a header? No problem - configurable per shop. Credentials are stored AES-256-GCM encrypted.

Sitemap-based - plus anything else you need.

The sitemap knows your public URLs best - Shopware generates one per sales channel anyway. The warmer reads it, deduplicates, sorts by priority and works through. If you need extra URLs (filter combinations, login areas, API endpoints), you can add them per shop.

Sitemap index

Multiple sitemaps followed automatically

For large shops, Shopware splits the sitemap into several files (sitemap-product-1.xml, sitemap-category-1.xml …). The warmer follows the sitemap index automatically and fetches all sub-sitemaps.

Priority

Ordered by sitemap priority

URLs with a high <priority> value get warmed first - typically the homepage and top categories. changefreq is also honoured when enabled.

Custom URLs

Add custom paths per shop

Account login, service pages, landing pages outside the sitemap - addable as a URL list per shop. With variables for multilingual paths.

Ignore list

Exclude paths

Filter combinations with GET parameters, search result URLs, checkout steps - all excludable via glob patterns. Default ignores for typical Shopware paths come pre-configured.

Deduplication

No URL twice

If the same URL appears in multiple sub-sitemaps or in custom URLs, it gets warmed only once. Query parameters are normalised by a configurable ruleset.

Re-discovery

Sitemap caching

The sitemap isn't re-parsed on every run - it's cached until the lastmod header changes or you explicitly trigger a re-read. Saves load on hourly runs.

Cron, webhook, push - you choose the trigger.

Cache Warmer isn't bound to a fixed schedule. Three trigger mechanisms, all usable at the same time - for example a nightly cron for SEO freshness, a webhook after every deploy for code releases, a manual push after a bulk update in your PIM.

Cron

Scheduled runs per shop

Standard cron syntax (0 3 * * *) per shop. Even complex schedules ("daily at 3 a.m., plus hourly during Black Friday") are supported.

Webhook

Push from Shopware or CI/CD

A simple HTTP POST to https://admin.cache-warmer.de/webhook/{token} starts a run. Straight from your deploy pipeline, from a Shopware plugin, or from a cron script.

Shopware plugin

Trigger on cache invalidation

Optional: companion plugin for Shopware 6.5/6.6/6.7 that triggers the warmer right after cache:clear, plugin update or theme recompile via webhook.

Manual

Push button in the dashboard

"Warm now" - one click per shop or per group. With a preview showing how many URLs will be picked up before the run actually starts.

Throttling

Non-overlapping runs

If a warmer run is already in progress for a shop, the next trigger doesn't spawn a second parallel run - it's either queued or deduplicated.

Stop & abort

Interrupt running runs

Accidentally kicked off a run during peak hours? Abort with a single click - in-flight requests finish, new ones don't start.

Reports by email - per shop, per run.

You don't want to log into the dashboard every morning. After each run the warmer sends a concise email: how many URLs, how many errors, average response time, cache hit rate. Per shop or as a combined report, with thresholds for "only notify on problems".

Per shop

One email per run

Summary in a compact HTML email: total URLs, errors, top 3 slowest pages, total run time. Sent directly via server sendmail - no external mail service needed.

Combined report

Daily summary across all shops

If you manage five shops, you get a single email summarising all five reports - instead of five separate ones. Either as an end-of-day summary or live after each run.

Threshold

Only when there's a problem

Default: email only when error rate > 1% or on 5xx responses. Quiet in normal operation, loud on real issues. Thresholds configurable per shop.

Recipients

Multiple addresses per shop

Engineering gets the error details, marketing gets the overview. Per address you set which severity (info / warning / error) is delivered.

Slack & webhook

Without email as well

Slack user? Drop in an incoming webhook and reports go into the channel. Or use a generic webhook for your own tools (Discord, Mattermost, Datadog).

History

Reports archived in the dashboard

Every send is stored and viewable in the dashboard. With a diff to the previous email - you see at a glance whether the error rate is rising or falling.

Live status at a glance - any time, any shop.

The web dashboard at admin.cache-warmer.de shows in real time what is running. Which shops are queued, which are being warmed, which URLs took longest? With a live tail of every active run.

Live feed

Active runs in real time

Via server-sent events you see every warmed URL live in the browser with response code, response time, cache status. No reload, no polling.

History

30 days of run detail

Every run stays searchable for 30 days with all individual URLs, response times and status codes. Aggregated statistics (average, P95, median) are kept longer.

Statistics

Trends per shop

Is your shop getting faster or slower over time? Charts show P50/P95 response times, error rate and cache hit rate per week, per month, per quarter.

Login

WebAuthn / Touch ID

Sign in with fingerprint or hardware key (FIDO2 / WebAuthn). Classic password as fallback. Optional enforced 2FA per user.

API

REST API for your own tools

Everything visible in the dashboard is also available via API: start runs, query status, export reports. Bearer-token auth, per-user scopes.

Brand

Stone-&-Water CI

Clean, calm design: orange for actions, navy for data, plenty of whitespace. Works equally well on desktop and mobile.

What's in the package.

10,000+
URLs per run, no sweat
15×
faster thanks to HTTP/2 pooling
3×
Shopware versions supported
shops per account
99.9%
uptime on Creoline hosting

Three plans - from single shop to agency.

Every plan includes the full feature set. You only pick by shop count and volume. Monthly cancellable, 14 days free trial - no credit card required.

Starter

For a single shop

Monthly19 €

All prices net, plus VAT. Cancellable monthly.

  • 1 shop
  • 5 runs per day
  • up to 1,000 URLs per run
  • Sitemap auto-discovery
  • HTTP/2 pooling
  • Email reports
  • 30 days run history

Try free for 14 days

Professional

For multiple storefronts

PopularMonthly49 €

All prices net, plus VAT. Cancellable monthly.

  • up to 5 shops
  • Unlimited runs
  • up to 10,000 URLs per run
  • Cron, webhook & manual trigger
  • Email + Slack integration
  • REST API with bearer token
  • WebAuthn / Touch ID login
  • Companion plugin included

Try free for 14 days

Agency

For agencies and resellers

Monthly149 €

All prices net, plus VAT. Cancellable monthly.

  • Unlimited shops
  • Central management of all shops
  • Individual schedules per shop
  • Sub-users with custom permissions
  • White-label reports
  • Self-hosted option
  • Priority support & SLA
  • Unlimited run history

Request demo

All prices plus VAT. Need more volume or a custom setup? Get in touch for a tailored quote.

Convinced already?Send us your shop URL, we set up the trial and come back with the first report.
Get started

Built clean. Pragmatic stack.

No marketing stack - tools we use ourselves every day. Everything runs on a single Creoline server: observable, debuggable, with no vendor lock-in to a cloud provider.

Compatibility

Shopware 6.5Shopware 6.6Shopware 6.7WooCommerceMagento 2Static sitemaps

As long as a shop serves a sitemap.xml, the warmer can crawl it. Only the optional companion plugin is Shopware-specific.

Stack

Node.js 20better-sqlite3PM2HTTP/2React adminPHP sendmail

Single-binary deployment on the Plesk Node.js runtime. Database is a local SQLite file - no external DB server required, no lock-in.

Privacy & hosting

The warmer runs on our Creoline servers in Germany. Only your shop's URLs, their response times and status codes are stored - no page content, no cookies, no customer data.

Also available as a self-hosted variant on your own server.

Architecture

Single-node service with PM2 cluster mode for load distribution. Run state in local SQLite, sitemap pre-fetch cache on the filesystem. HTTP/2 pools with origin-bound connection limits.

Logs rotated by PM2 (daily, 14 days), audit trail kept longer in the database.

Answers to the questions we hear most.

Almost any question about setup, security or scaling has come up before in the last few months. If yours isn't here, a short email gets you a quick answer.

What exactly does the Cache Warmer do?

After a cache flush, the Cache Warmer automatically calls all URLs from your Shopware shop's sitemap.xml so that the caches - HTTP cache, reverse proxy, Varnish, Cloudflare - get rebuilt. The first real visitor then gets the fast cached version straight away, instead of the 3-10 second cold-start response.

How many shops can I connect?

Starter: one shop. Professional: up to five. Agency: unlimited. Per account you can create as many sub-users with their own permissions as you need - ideal for agencies managing several shops.

Do I need a Shopware plugin?

No, not necessarily. Cache Warmer only needs a reachable sitemap.xml. There is an optional companion plugin for Shopware 6.5/6.6/6.7 that triggers the warmer automatically after every cache:clear, plugin update or theme recompile via webhook - useful, but not mandatory.

What data is stored?

Only your shop's public URLs, their response times and HTTP status codes. No page content, no cookies, no customer data. Servers are in Germany at Creoline and operated GDPR-compliant. Stored HTTP auth credentials are encrypted with AES-256-GCM.

Can I self-host Cache Warmer?

Yes, a self-hosted variant is included in the Agency plan. You get the Node.js package with better-sqlite3 and PM2 configuration and can deploy it on your own server (for example Plesk hosting with the Node runtime). Updates are included for the duration of the active subscription.

What happens when my server is under load?

Concurrency per shop is configurable from 1 to 16 parallel requests. On top, sleep between requests can be configured and dynamically increases on 5xx responses. Load stays predictable - no DDoS of your own server. Repeated timeouts pause the run automatically.

Which cache layers are supported?

The warmer detects X-Cache headers from Varnish, Cloudflare, Shopware HTTP cache, Nginx FastCGI cache and Plesk caching. Each run report shows how many pages came back as hit or miss - you immediately see whether your cache setup is working correctly.

Is there a free trial?

Yes, 14 days on all plans, no commitment. No auto-renewal, no credit card required - create a trial account, add your sitemap, start your first run. If it fits, switch to a paid plan; if not, just let it expire.

Your question is not here? Drop us a line, we usually answer the same day.

Contact

Request a trial or demo.

Tell us briefly what you need. Screenshots, sitemaps or log files can be attached right here.

JPG, PNG, WebP or PDF - up to 3 files, 5 MB each, 7 MB in total.

No more cold starts

Let us talk about your cache strategy.

Whether it is a single shop or an agency portfolio with fifty storefronts: the Cache Warmer makes the first visit after a flush just as fast as the hundredth.