- 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
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.
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.
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.
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.
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.
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.
Automatic retry
Failed URLs (5xx, timeout) are retried with exponential backoff. Permanently failed calls show up in the report — grouped by HTTP status.
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 — 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.
Client groups with their own logic
Multiple shops belonging to one client are grouped together. Within the group, shops run sequentially — that client's server never gets hit by multiple warmer runs at the same time.
- Any number of clients, any number of shops per client
- Per-client queue with FIFO ordering
- A crashing shop doesn't block its group
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.
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.
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.
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.
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.
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.
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
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.
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.
Configurable sleep between requests
Optional sleep between requests — for very sensitive shared hosting. Dynamic sleep based on the last response code is also possible.
Recognisable and respectful crawler
Default user agent StoneWaterCacheWarmer/1.x — unambiguously identifiable in server logs, clearly distinct from search engine bots. Override per shop.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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".
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.
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.
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.
Multiple addresses per shop
Engineering gets the error details, marketing gets the overview. Per address you set which severity (info / warning / error) is delivered.
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).
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.
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.
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.
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.
WebAuthn / Touch ID
Sign in with fingerprint or hardware key (FIDO2 / WebAuthn). Classic password as fallback. Optional enforced 2FA per user.
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.
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.
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.
- 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
- 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.
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.
- 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
- 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
- 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
- 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
- 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
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.
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
As long as a shop serves a sitemap.xml, the warmer can crawl it. Only the optional companion plugin is Shopware-specific.
Stack
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.
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.