Guide

Where to host a static or Vite/SvelteKit/Astro site in the EU

Netlify, Cloudflare Pages, Vercel and Sarpius all serve static sites from a global edge. Here's how they actually differ on jurisdiction and price.

Updated 24 September 2026

Where can you host a static or Vite/SvelteKit/Astro site in the EU?

For a static or client-rendered build (Vite, a prerendered SvelteKit site, Astro, plain HTML/CSS), the mainstream platforms, Netlify, Cloudflare Pages, Vercel and Sarpius, all do roughly the same thing at the mechanical level: push a git repo, get a build uploaded once and served from a cached edge with automatic TLS, at no container cost. Cloudflare Pages runs directly on Cloudflare's own network. Netlify and Vercel each operate their own CDN. Sarpius uploads the build to S3-compatible object storage and serves it through its own edge proxy, which itself sits behind Cloudflare's network by default, so a Sarpius-hosted static site is cached at two layers rather than one. The practical differences are jurisdiction, whether the free tier allows commercial use, and what happens once the project also needs a real backend.

Does the connect-and-deploy flow actually detect a static build?

Yes. Sarpius's connect-a-repository wizard recognizes Vite, SvelteKit, Astro, React, Vue, Angular, Hugo, Eleventy, Docusaurus, MkDocs and plain static output among its 45 auto-detected frameworks and runtimes, and classifies each detected Component into "Served from storage (static)" or "Containers" before you confirm the plan. A static Component never spins up a container, is billed on stored size (EUR 0.025/GB-month) rather than on traffic, and gets its hashed build assets (the app.4f3a9c12.js shape Vite, Rollup and webpack all produce) marked Cache-Control: public, max-age=31536000, immutable, with everything else no-cache so a redeploy is always observed. Directory-style routes resolve to that directory's own index.html, so /blog correctly serves blog/index.html rather than falling back to the site root.

How do the EU-relevant static hosts actually compare?

FeatureSarpiusNetlifyCloudflare PagesVercel
Company / HQNetherlands (KVK 73239038), owns its hardwareUnited States (San Francisco)United States (San Francisco)United States (San Francisco)
How the static build is servedS3-compatible storage + Sarpius's own edge, behind Cloudflare's networkNetlify's own CDNDirectly on Cloudflare's own global networkVercel's own CDN (126 PoPs, 19 regions, per Vercel's own docs)
Free tier, commercial useAllowed, stated in the Terms of Service, section 5No explicit restriction found on Netlify's current pricing page (check before relying on this)No restriction found on Cloudflare's Pages docs/pricing pages checkedExplicitly restricted to personal, non-commercial projects
Cheapest paid planEUR 4.99/month per additional app (container-side; static Components are billed on storage only)"Personal" plan around $9/month, per Netlify's current pricing page (treat exact tier names as "check")Free plan: 500 builds/month, 100 projects/account; paid "Workers Paid" tier for higher limitsPro: $20/month per seat
EU jurisdiction (company, not just data center)Yes, Dutch company, no US parentNo, US companyNo, US companyNo, US company
Container/backend in the same productYes, first-party (PHP, Node, Python, Java, Go)No first-party container product; functions onlyWorkers (serverless), not containersServerless/edge functions, not containers
Managed database in the same productYes: PostgreSQL, Redis, MariaDBNo first-party databaseD1 (SQLite-compatible), KV, R2No first-party database since Vercel Postgres/KV were deprecated
Project export / exit bundleProject migration bundle: container files, SQL database dumps, bucket objects, commit manifest, secrets.env via 5-min single-use token behind 2FA, 24h retentionGit repository only; no automated full-stack archiveGit repository and Cloudflare API/wrangler; separate exports for D1/KV/R2Git repository only; separate partner DB exports

Why does "served on a global CDN" not automatically mean "EU jurisdiction"?

Cloudflare's own network spans 348 cities across 8 regions, by Cloudflare's own published figure, and Vercel's spans 126 Points of Presence across 19 compute-capable regions, by Vercel's own docs. Neither figure says anything about which company's law governs your data: Cloudflare Pages, Netlify and Vercel are all US companies, so the CLOUD Act question applies to the platform even when a specific edge node happens to sit in an EU city. Sarpius is a Dutch company with no US parent, and for a domain where Cloudflare itself, as a sub-processor, is the concern rather than the server's location, a paid per-domain "Privacy route" removes Cloudflare from that domain's request path entirely, at EUR 4.99/month on top of the existing EUR 1.99/month custom-domain fee. That option loses Cloudflare's CDN, WAF and DDoS protection for that domain; it is a genuine trade, not a free upgrade.

Cloudflare network ↗Vercel regions ↗

What happens when the static site needs a backend later?

This is where the four platforms diverge hardest. Netlify, Cloudflare Pages and Vercel each answer with serverless/edge functions: short-lived, request-scoped, no long-running process. Sarpius answers with a container in the same Project, wired to a managed Postgres, Redis or MariaDB database, which is the better fit for a real backend process (a Laravel API, a Node worker, a long-running job) rather than a handful of stateless functions. Sarpius's own Serverless Functions, the function-per-request model the other three already ship, are planned, not available yet.

Frequently asked questions

Does a static site on Sarpius ever get billed for bandwidth?

No. A static Component served from object storage is billed on stored GB, not on egress; the 10 GB bandwidth bundle and the EUR 0.05/GB overage rate apply to container apps, not to the storage-served path.

Is a Sarpius-hosted static site actually cached the same way a Vercel or Netlify one is?

Mechanically yes: a build is uploaded once, hashed assets are cached as immutable, everything else is revalidated on every request, and the site sits behind a CDN. The difference is who operates that CDN: Vercel and Netlify operate their own; Sarpius serves from its own edge proxy sitting behind Cloudflare's separately-operated network by default, with a paid opt-out per domain.

Can I bring a monorepo with a static front-end and a Laravel or Node back-end?

Yes. A Project is one application made of multiple Components; the wizard detects each one separately and puts the front-end in storage and the back-end in a container, sharing routing, databases and storage.

Does the free tier really allow a commercial static site, unlike Vercel's Hobby plan?

Yes. The Terms of Service say so explicitly in section 5: the Free Tier may be used for any lawful purpose, including commercial use such as a business website or the front-end of a paid product.

Can I export a full project with both a static front-end and a backend?

Yes. You can generate a Project migration bundle from the Project workspace behind two-factor authentication. The bundle contains the built static output, live container files, SQL database dumps, bucket objects, and a manifest with git commit SHAs, per-file sha256 checksums, and explicit omission notes. Decrypted environment variables are streamed as secrets.env at download time using a 5-minute one-time token and are never stored in the resting bundle artifact. Bundles are downloadable for 24 hours and can be created once per 24 hours.

Keep reading