Skip to main content
BuiltInEu
Back to Blog
ReviewsMay 13, 202614 min read

Bunny CDN Review 2026: An Honest Take After Migrating builtineu.eu

An honest Bunny.net review after putting it in front of builtineu.eu. Five days of dashboard data, a 90% cache hit rate, a $0.01 bill, and where Cloudflare still wins.

By Sidney
Share:
Bunny CDN Review 2026: An Honest Take After Migrating builtineu.eu

Quick answer: Bunny.net is a Slovenian content delivery network with pay-per-use pricing from $0.01 per GB, 119 points of presence, and a Routing Filters setting that hard-restricts cached files to EU-only PoPs. Five days after putting it in front of builtineu.eu, the bill is $0.01, the cache hit rate is 90.21%, and the only real setup gotcha was a Coolify build-time variable. For European-sovereignty workloads it is the cleanest Cloudflare alternative that exists right now.

Why we migrated to Bunny.net this week

Last week we finished moving the whole stack onto European infrastructure: Hetzner for compute (a single box in Falkenstein, Germany), OVHcloud for DNS, Coolify for the deploy pipeline. The last piece missing was a CDN. Putting a site about European tech behind a US CDN was never going to fly. The shortlist came down to Bunny.net, Gcore, and KeyCDN. Bunny won on price, on dashboard usability, and on one specific feature: a Routing Filters setting that hard-restricts which points of presence ever see your cached files. We flipped it on, set it to EU only, and shipped on 8 May 2026.

This post is what we learned in the first week. Setup walkthrough, real dashboard numbers, honest review, and a Cloudflare comparison. The wider context behind the Vercel exit is in the European SaaS Stack 2026 guide. The live infrastructure list is on the About page.

What is Bunny.net? (in 60 words)

Bunny.net is a Slovenian content delivery network, headquartered in Ljubljana, founded 2014 by Dejan Grofelnik Pelzel and Lovrenc Gregorcic. It is independently owned (no US parent, no controlling US investor). The product line covers CDN, edge storage, image optimisation, video streaming, DNS, and DDoS protection. Pricing is pure pay-per-use from $0.01 per GB. 119 points of presence in 82 countries.

How does Bunny CDN pricing work?

Bunny is the cheapest reputable CDN in 2026. The pricing model is the main reason. No flat-rate plan, no minimum commitment beyond a $1 monthly invoice. You pay per gigabyte transferred, and the rate depends on which region served the request. The CDN product splits into two networks: Standard (119 PoPs, the right pick for most sites) and Volume (10 PoPs, designed for petabyte-scale static delivery). On the Standard Network the rates at activation in May 2026 were:

RegionPer-GB rate (Standard Network, 119 PoPs)
Europe & North America$0.01
Asia & Oceania$0.03
South America$0.045
Middle East & Africa$0.06

The Volume Network is cheaper still ($0.005/GB for the first 500 TB, dropping to $0.002/GB above 1 PB) but routes through only 10 PoPs. Unless you are shipping petabytes, Standard is what you want.

Bunny CDN public pricing page showing the Standard Network at 119 PoPs ($0.01/GB Europe & North America) and the Volume Network at 10 PoPs ($0.005/GB for the first 500 TB).

Bunny Shield, their DDoS and bot-mitigation layer, is included for the first 25 million clean requests per month at no extra cost. Beyond that you pay per million.

For a real-world sense of the bill: builtineu.eu serves roughly 50 to 200 GB of static assets per month. At Standard EU rates that lands between €0.50 and €2, and the $1 monthly minimum invoice will bind long before per-GB usage does. The Bunny Shield free tier is nowhere near a constraint for our traffic shape. If you run an indie SaaS, a content site, or a marketing site, the CDN line item just stopped mattering on your spreadsheet.

For comparison, Cloudflare Pro is $25 per month flat. Cloudflare's free plan is genuinely free for unlimited bandwidth, and that is the one corner where Cloudflare still beats Bunny on pure cost.

Bunny.net vs Cloudflare, in 60 words

Bunny.net is a Slovenian CDN with pay-per-use pricing (around $0.01 per GB) and 119 points of presence. Cloudflare is a US-headquartered CDN with a flat-rate model and 330+ points of presence. For European-sovereignty hosting, Bunny is the GDPR-native and CLOUD-Act-free choice. For very high-traffic sites with predictable global distribution, or zero-budget static sites, Cloudflare's free tier still wins on cost.

Bunny.net vs Gcore, in 60 words

Gcore is Luxembourg-headquartered, founded 2014, with a larger global PoP network than Bunny and an enterprise-shaped onboarding flow. Bunny is cheaper for small workloads and noticeably easier to configure on day one. Gcore wins for businesses that need single-vendor coverage of CDN, edge compute, AI inference, and managed Kubernetes. Bunny wins for anyone who just wants static delivery to be fast and cheap.

Bunny.net vs KeyCDN, in 60 words

KeyCDN is Swiss, run by proinity LLC out of Winterthur. Pay-per-use pricing comparable to Bunny, slightly higher per-GB rates in Europe, and a smaller PoP network. KeyCDN appeals if you specifically want Swiss jurisdiction (FADP coverage on top of GDPR) and a no-frills product surface. Bunny wins on price, on PoP density, and on dashboard polish. Both are credible Cloudflare alternatives.

How do European CDNs compare?

ProviderHQFoundedPer-GB floorPoPsBest for
Bunny.net🇸🇮 Ljubljana2014$0.01/GB119European sovereignty, indie SaaS, sub-€5 budgets
Cloudflare🇺🇸 San Francisco2009Free / $25 flat330+Static sites with unlimited bandwidth, Workers users
Gcore🇱🇺 Luxembourg2014from $0.018/GB180+Enterprise stacks, edge compute, AI inference
KeyCDN🇨🇭 Winterthur2012$0.04/GB50+Swiss jurisdiction, simple dashboards

The full directory view is at /categories/cdn-edge.

How we set up Bunny CDN on builtineu.eu

The rollout came down to three real decisions: route only the static assets (not the whole site), lock the cache to EU PoPs, and gate the wiring behind environment variables we could unset in seconds. Each one took risk off the table before the deploy went out.

The subdomain strategy (and why we did not put the whole site behind a CDN)

The default advice when you read CDN marketing pages is to put your apex domain behind the CDN. That gives you the maximum cache surface. It also gives you the maximum risk surface: every weird edge case in your /api/* routes, every uncached page, every cookie quirk now goes through a layer you do not control.

We took a smaller swing. We pointed cdn.builtineu.eu at Bunny as a pull zone, then set Next.js's assetPrefix to that subdomain. That sends /_next/static/* (the JavaScript bundles, CSS files, and fonts that account for most of the page weight) through Bunny. HTML and API responses still go straight to origin.

Roughly 80% of the speed win at 10% of the risk. One environment variable rolls the whole thing back. No cache rules to misconfigure for /api/* routes or any authenticated pages. We will reconsider after a month if the metrics justify going further.

Pull-zone settings that matter

In the Bunny dashboard:

  • Pull zone name: builtineu. Auto-creates the host builtineu.b-cdn.net. We attached cdn.builtineu.eu as a custom hostname and let Bunny auto-issue a Let's Encrypt certificate.
  • Origin URL: https://builtineu.eu. The origin is our Hetzner box in Falkenstein.
  • Tier: Standard Network. 119 PoPs at $0.01/GB across Europe and North America. The Volume Network is cheaper per GB but runs on only 10 PoPs, which would defeat the European routing strategy below.
  • Pricing zones enabled: Europe and North America. APAC, MEA, and South America disabled. With the routing filter below set to EU only, the NA pricing zone is operationally redundant (no NA PoP will actually serve content) but harmless to leave on.
  • Bunny Shield: On. Free for the first 25 million requests per month. Adds DDoS mitigation, basic bot management, and rate limiting.
  • Routing Filters: European Union (EU) only. This is the feature that mattered most. It hard-restricts which Bunny PoPs are allowed to serve our cached files, overriding the pricing-zone configuration above. With this on, every byte of cached content stays inside EU member states. A visitor in New York still gets served at $0.01/GB EU rates from an Amsterdam or Frankfurt PoP. We can claim European-only delivery with a setting to point at, instead of waving at marketing copy.
  • Cache Expiration: Respect origin Cache-Control. Next.js stamps immutable, max-age=31536000 on hashed asset URLs. Bunny does not need to override that.
Bunny.net pull-zone Pricing & Routing settings for cdn.builtineu.eu, showing Europe and North America pricing zones enabled (Asia & Oceania, Middle East & Africa, and South America disabled) and the Routing filter set to European Union (EU) only.

DNS was a single CNAME at OVHcloud: cdn.builtineu.eu → builtineu.b-cdn.net. Propagation took under a minute.

OVHcloud DNS zone editor showing the cdn.builtineu.eu CNAME record pointing to builtineu.b-cdn.net with a 3600 second TTL.

What we did not enable, and why

Three Bunny products went unused on day one, deliberately:

  • Bunny Optimizer ($9.50 per site per month) handles image format conversion, responsive sizing, WebP and AVIF delivery, and on-the-fly transformations. We deferred it. Most of our images are SVG logos and already-compressed JPEGs. The image traffic does not justify $9.50 yet. We will revisit when monthly image bandwidth crosses 5 GB or when we move blog screenshots onto a CDN-served hostname.
  • Bunny Storage is their S3-compatible edge storage. The blog screenshots on our existing object storage are an obvious migration target. We did not move them in this pass because the current wiring works and adding a migration would have widened the blast radius of the deploy.
  • Bunny DNS would consolidate DNS onto the same vendor. OVHcloud handles our DNS today and we have no quarrel with it. Single-vendor risk is a real thing. Spreading DNS, hosting, and CDN across three independent European vendors is a feature, not a bug.

Honest cons

A review that only lists the wins is not a review. Bunny has gaps:

  • PoP density. 119 PoPs is plenty for European traffic. It is fewer than Cloudflare's 330+ and noticeably sparser in Africa, parts of South America, and the Pacific. If your traffic skews to those regions, Bunny's per-GB rates are also higher there. Cloudflare's free tier is unbeatable for very wide global distribution.
  • No edge compute parity. Bunny has Edge Scripting in beta, but nothing close to Cloudflare Workers in maturity. If your stack relies on Workers for routing logic, A/B tests, or auth-at-the-edge, you cannot replicate that on Bunny today.
  • Image optimisation is not free. Cloudflare's Polish, Mirage, and image resizing are bundled into paid plans. Bunny's image transformations require Bunny Optimizer at $9.50 per site per month. For sites with heavy image traffic this changes the cost calculus.
  • Dashboard rough edges. The pull-zone UI is fine. The video, storage, and DNS surfaces feel like they were each built by a different team. None are bad. None are joined-up.
  • Per-GB pricing punishes spikes. A viral hit on a flat-rate Cloudflare plan costs nothing extra. The same hit on Bunny is billed straight through. For predictable, very high-volume traffic, flat rate sometimes wins.
  • No perpetual free tier. There is a $1 starting credit and a $1 monthly minimum invoice. There is no perpetual free tier the way Cloudflare has one. For pure side projects with zero budget, Cloudflare still has the easier on-ramp.

Who should use Bunny CDN

  • Indie developers and small teams running European-hosted content sites or marketing sites where the CDN bill should be a rounding error
  • SaaS companies that explicitly need CLOUD-Act-free static delivery for compliance, customer commitments, or public sovereignty stories
  • Self-hosted Next.js, WordPress, or Hugo sites where assetPrefix and pull-zone caching cover the requirement
  • Anyone migrating off Vercel or Cloudflare specifically because of US-jurisdiction concerns

Who should not use Bunny CDN

  • Teams that depend on Workers, Durable Objects, or Cloudflare's R2-as-edge-storage primitives
  • Static-site hobbyists with zero budget who are happy on Cloudflare's free tier and have no sovereignty requirement
  • Sites with heavy global traffic outside Europe and North America where Bunny's per-GB premiums and sparse PoPs make Cloudflare's flat rate cheaper
  • Image-heavy publishers that need automatic format conversion bundled in the base price

How to migrate from Cloudflare to Bunny.net

If you are coming from Cloudflare, the migration is mechanical. Roughly an hour for a simple site:

  1. Sign up at bunny.net (affiliate link). Add a $5 credit to clear the trial.
  2. Create a pull zone. Origin is your existing canonical hostname. Pick the Standard Network (119 PoPs) unless you are pushing petabytes; Volume Network is cheaper per GB but runs on only 10 PoPs.
  3. Disable pricing zones outside your audience. Keep Europe and North America at minimum.
  4. Set Routing Filters to European Union (EU) only (or the regional filter that matches your sovereignty requirement). This is the binding constraint on which PoPs ever see your cached content, and it overrides the pricing-zone toggles.
  5. Add a custom hostname (cdn.yourdomain.com) and let Bunny auto-issue the certificate.
  6. Add a CNAME at your DNS provider pointing the new subdomain at <zone>.b-cdn.net.
  7. In your application config, set the asset prefix or static URL to the new CDN hostname.
  8. Update Content-Security-Policy headers to allow the CDN host across script-src, style-src, img-src, font-src, and connect-src.
  9. Add a <link rel="preconnect"> to the CDN host on every page's <head>.
  10. Deploy. Confirm the new CDN host is serving from cache (a fresh URL will miss, a second request will hit).
  11. Drop the Cloudflare proxy on your origin. Keep Cloudflare DNS, or move DNS too. Your call.

The whole migration on builtineu.eu took under an hour, including the false-start Coolify rebuild. Most of that hour was reading documentation and deciding which routing filter to set. The actual configuration was minutes.

First-week numbers

Five days in, here is what the dashboard says.

Bunny.net dashboard statistics card for the last 24 hours showing 68.03 MB of bandwidth served, 5,777 requests, and a 90.21% cache hit rate on the builtineu pull zone.

In the last 24 hours: 68.03 MB of bandwidth served, 5,777 requests, and a 90.21% cache hit rate. The hit rate is the number that matters. Above 90% means roughly one in ten requests reaches our Hetzner origin and the other nine are served straight from a European Bunny PoP. Origin load, bandwidth, and response time all dropped together the moment we cut traffic over.

The bill is the other half of the story.

Bunny.net billing overview after five days of production traffic on builtineu.eu, showing $0.01 total spend with 100% of it attributed to Europe.

Total spend after five days: $0.01. All of it in Europe, which is what the Routing Filter promised. The $1 monthly minimum invoice will bind long before per-GB usage does. The "CDN line item just stopped mattering" claim is no longer a projection.

Verdict

Bunny.net does what it claims, costs less than every reasonable alternative, and gives a European site a CDN story that holds up to scrutiny. The Routing Filters setting is the small detail that separates a vendor who says "GDPR compliant" from one who hands you a checkbox and lets you point at it.

This is a first-week review, not a verdict for the ages. We will update it at 30 days, 90 days, and one year with real bills, real cache hit ratios, and any cracks that show up in production. The first cracks are the interesting ones, and we will not hide them.

If you are running a European-hosted site and have not looked at your CDN line item in a while, this is the thirty minutes worth spending today. Bunny's signup lives here (affiliate link). The $10 starting credit and $1 monthly minimum mean the first month costs roughly a coffee.

The bigger story behind this migration, the rest of the European stack we built around Bunny, is in the European SaaS Stack 2026 guide. The live infrastructure list is on the About page.

Products Mentioned

Bunny CDN logo
Bunny CDN🇸🇮

Bunny CDN is a CDN provider that offers image processing (f.e. scaling) and special services for video streaming.

Cloudflare logo
Cloudflare🇺🇸

Cloudflare provides robust internet security and performance solutions. It safeguards websites from attacks, enhances load speeds, and ensures reliable uptime with its global network.

Coolify logo
Coolify🇭🇺

Coolify is a portable personal cooling device designed to provide relief from heat. It features adjustable temperature settings and a lightweight, ergonomic design for easy carrying. The device can be used indoors or outdoors, and it operates quietly, making it suitable for various environments, including work and leisure activities.

Gcore logo
Gcore🇱🇺

Gcore by Gcore is a European-based cloud and edge computing solution designed for efficient data processing and storage. It offers a range of services including content delivery, cybersecurity, and server hosting, aiming to enhance performance for businesses across various industries. Visit their website for more information.

Hetzner logo
Hetzner🇩🇪

Hetzner is a European cloud storage solution that offers reliable and affordable virtual servers hosted in Germany. Known for its competitive pricing, Hetzner provides a robust platform for businesses and individuals seeking efficient data storage and management solutions. With a focus on privacy and security, Hetzner ensures that all data is hosted within the EU, offering compliance with GDPR regulations and maintaining data sovereignty. This makes it an ideal choice for European businesses and privacy-conscious users who prioritize data protection. Hetzner's cloud storage services are particularly suited for small to medium-sized enterprises, developers, and IT professionals looking for cost-effective and scalable storage options. The pricing model is straightforward and paid, ensuring transparency and predictability in costs. Users can benefit from the peace of mind that comes with knowing their data is stored securely within the EU, adhering to strict data protection standards.

KeyCDN logo
KeyCDN🇨🇭

KeyCDN is a robust cloud storage solution designed to enhance content delivery across Europe and beyond. It offers a comprehensive suite of features tailored for businesses seeking efficient, secure, and compliant data handling. With its GDPR-compliant data management, KeyCDN ensures that your data is stored and processed in accordance with European regulations, providing peace of mind for privacy-conscious organizations. KeyCDN's real-time analytics dashboard allows users to monitor performance and make informed decisions quickly. The service supports HTTP/2 and Brotli compression, optimizing content delivery speed and efficiency. The origin shield feature enhances caching, reducing server load and improving response times. Additionally, KeyCDN supports custom SSL certificates, ensuring secure data transmission. Its pay-as-you-go pricing model offers flexibility and cost-effectiveness, making it suitable for businesses of all sizes. With a network of global Points of Presence (PoPs) and Web Application Firewall (WAF) integration, KeyCDN is ideal for businesses looking to improve their web performance and security. The product is particularly beneficial for European companies that prioritize data sovereignty and compliance with EU data protection laws.

Ready to Switch to EU Alternatives?

Explore our directory of 400+ European alternatives to US tech products.