Cache-warming service · Made 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. Multi-shop, multi-tenant, all from one place.

01 What it does

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.

Without Cache Warmer

Cold start after flush

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.

With Cache Warmer

Warm start, automatic

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, multiple shops in parallel. 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.

02 Multi-shop · Multi-tenant

One service for all your shops — and your clients' shops too.

Agencies with ten shops, brands with three storefronts, resellers with a client portfolio — everyone in one instance. Per-client configuration, per-client triggers, per-client reports. No dedicated server needed per shop.

Sequential queueing

One shop after the other, per client

If a client owns shop A, B and C, A is fully warmed first, then B, then C — instead of all three at once. Load and bandwidth stay predictable.

Parallel across clients

Client X and Y at the same time

While client X is being warmed, client Y is already running. Sequentiality only applies within a group — across clients, things run in parallel.

Isolation

No cross-tenant leaks

Client data, URLs, reports, statistics — everything strictly isolated per client account. Even in the audit log only that account's own runs are shown.

Per-shop settings

Individual configuration per shop

Concurrency, user agent, auth headers, custom URLs, ignored paths — all configurable per shop. Defaults at the group level, override per shop.

Sub-users

Staff with their own permissions

Agency setup: main account with all shops, individual staff members only see clients assigned to them. Read-only or read-write configurable.

03 Smart crawler

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.

04 URL discovery

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.

05 Scheduling

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.

06 Notifications

Reports by email — per shop, per client, 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 per client, 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.

Per client

Daily summary across all shops

If a client owns five shops, they 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.

07 Dashboard

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.

08 In numbers

What's in the package.

10,000+
URLs per run, no sweat
15×
faster thanks to HTTP/2 pooling
3×
Shopware versions supported
shops & clients per instance
99.9%
uptime on Creoline hosting
09 Pricing · Transparent & flexible

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
19 / month
  • 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
Agency
For agencies and resellers
149 / month
  • Unlimited shops
  • Multi-tenant accounts
  • Customer grouping & sequential queueing
  • Sub-users with custom permissions
  • White-label reports
  • Self-hosted option
  • Priority support & SLA
  • Unlimited run history

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

10 Changelog · What's new

Actively developed — straight out of agency workflows.

Cache Warmer was born out of our own client shops and is continuously extended with features missing in everyday work. From the first internal version up to the current production-stable build.

v1.4
May 2026
  • Migration from sql.js to better-sqlite3 — fixes WASM memory crashes on large run histories, much faster on aggregation queries
  • Customer grouping with sequential shop queueing per client
  • Per-shop and per-client email notifications via PHP sendmail
  • PM2 process management with automatic restart and log rotation
v1.3
April 2026
  • HTTP/2 connection pooling with automatic fallback to HTTP/1.1 + keepalive
  • Per-shop concurrency control from 1 to 16 parallel requests
  • Bugfix: duplicate URLs from sitemap indexes correctly deduplicated
v1.2
March 2026
  • Web dashboard with live feed via server-sent events
  • WebAuthn / Touch ID login for the admin panel
  • AES-256-GCM encryption for stored HTTP auth credentials
  • REST API with bearer token and scopes
v1.1
February 2026
  • Companion plugin for Shopware 6.5/6.6/6.7 — trigger on cache:clear
  • Slack webhook integration in addition to email reports
  • Custom URL lists per shop, ignore patterns with glob syntax
v1.0
January 2026
  • Initial release with sitemap crawl, cron trigger, webhook and basic dashboard
  • Multi-shop support, multi-tenant architecture
  • Run history with per-shop statistics
  • Standard email reports per run
11 FAQ · Common questions

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 client account you can create as many sub-users with their own permissions as you need — ideal for agencies managing multiple client 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.

Technical details

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.5 Shopware 6.6 Shopware 6.7 WooCommerce Magento 2 Static 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 20 better-sqlite3 PM2 HTTP/2 React admin PHP 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.

Interested?

Let's talk about your cache strategy.

Whether one shop or an agency portfolio with fifty storefronts — Cache Warmer makes the first visit after every cache flush just as fast as the hundredth. Drop us a line for a trial account or a short demo.