frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: A WordPress plugin that rewrites image URLs for near-zero-cost delivery

https://wordpress.org/plugins/bandwidth-saver/
54•cr1st1an•8h ago
Hi HN,

I built a WordPress plugin called Bandwidth Saver. It takes the images your site already has and serves them through Cloudflare R2 and Workers, which means zero egress fees and extremely low storage cost. The goal is to make image delivery fast and cheap without adding any of the complexity of traditional optimization plugins.

The idea is simple. WordPress keeps generating images normally. The plugin rewrites the URLs on the frontend so images are served from a Cloudflare Worker. On the first request, the Worker fetches the original image and stores it in R2. After that, Cloudflare’s edge serves the image from its global cache with no egress charges. There’s no need to preload or sync anything, and if something fails, the original image loads. That’s the entire system.

I built this because most image CDN plugins try to do everything: compression, resizing, AI transforms, asset management, custom dashboards, and monthly fees. That’s useful for some users, but it’s unnecessary for most sites that just want their existing media to load faster without breaking the bank. Bandwidth Saver focuses only on delivery, not transformations. It’s intentionally minimal.

There are two ways to use it. The plugin is completely free if you want to run your own Cloudflare Worker. I included the Worker code and the steps needed to deploy it. If you don’t want to deal with any Cloudflare setup, there’s a managed option for $2.99 per month that uses my Worker and my R2 bucket. I’m trying to keep it accessible while also covering operational costs.

The plugin works with any theme or builder and doesn’t modify the database. It only rewrites URLs on output. WordPress remains the system of record for all media. R2 simply becomes a cheap, durable cache layer backed by Cloudflare’s edge.

I’m especially interested in feedback about the approach. Does the fetch-on-first-request model make sense? Is the pricing fair for a plugin of this scope? Should I prioritize allowing users to connect their own R2 buckets or the managed service? And for those with experience in edge compute or CDNs, I would love thoughts on how to improve the Worker or the rewrite strategy.

Thanks for reading, happy to answer any questions.

Comments

WillPostForFood•7h ago
Nice work! I wish more WordPress plugins took a Unix like approach of just doing one thing well. Wat too common for good plugins to grow into a bloated mess over time.
cr1st1an•5h ago
Thanks! I hope to keep it simple for a long time, and ideally profitable.
danpalmer•7h ago
You might want to put a cap on the $2.99/m plan, otherwise one huge site could wipe you out. If you do, I'd express that in terms that most small Wordpress sites will understand (like unique viewers, page hits, etc).

I think some here will say "why not just use Cloudflare directly", but I disagree, I think this plugin makes sense. Cloudflare is relatively straightforward for technical users, but many Wordpress users are non-technical. $2.99 is a very small amount for reliable fast images, while also packing a pretty nice margin for you for most users who will need a tiny fraction of that.

donohoe•7h ago
Yeah, raise your base price too imho. At least $5
cr1st1an•5h ago
Will do, had to make it interesting for launch :)
cr1st1an•5h ago
Yes, this plugin is aimed at the long tail and I need to be clear on a fair use policy. The idea behind the self host worker is that I can provide white glove migration if any site becomes burdensome without disrupting the service altogether.

And I agree, if a site is behind Cloudflare DNS this plugin does not make much sense, but it's a solution for many non-technical users, as you mentioned.

calvinmorrison•7h ago
my feedback... a lot of my clients just use cloudflare and its basically free.
cr1st1an•5h ago
This is true. Honest question: how technical are your clients? I’m trying to get a sense of whether there’s a market where paying $2.99 a month is a better choice than moving the domain to Cloudflare.
weird-eye-issue•4h ago
You don't need to "move the domain to Cloudflare"
fareesh•7h ago
doesn't cloudflare already offer this if you proxy?
cr1st1an•5h ago
Yes! It’s amazing. This is an option for non-technical users or anyone who can’t or won’t move their domain to Cloudflare’s DNS.
catskull•7h ago
Cloudflare has their own image optimization and caching service, would be a good alternative: https://developers.cloudflare.com/images/transform-images/

I wrote a basic plugin for Jekyll to automatically prefix my images with this. Pretty much just set it and forget it: https://github.com/catskull/catskull.github.io/blob/master/_...

Am I missing something or is this way harder to do in Wordpress?

cr1st1an•5h ago
The idea here is that WordPress will still host and transform the images (could have many stacked plugins as a pipeline) but the plugin will rewrite the final image's URL to be served by Cloudflare. So you can benefit of whatever pipeline you have in the server, and let the plugin use cloudflare at the edge.
weird-eye-issue•4h ago
That is what Cloudflare already does by caching images
nchmy•6h ago
Why use a cf worker rather than use wp hooks to upload to r2 when an image is uploaded?

Where does the url rewrite happen - wp hook or in cf worker?

As another comment said, 2.99 unlimited is a TERRIBLE idea

cr1st1an•5h ago
The purpose of the worker is to offload all Cloudflare configuration to a single endpoint that fetches and caches each image on demand. This removes the need for any configuration at the WordPress level and keeps credentials out of WordPress entirely.

The URL rewrite happens in a WordPress hook. And yes, the $2.99 plan could technically cover around 200 GB in R2, but there is real liability attached to that.

What price would feel fair and still interesting to you?

Belphemur•6h ago
Great idea and definitely love the aspec of bringing your own worker.

But technically would it be better to have the plugin to any transformation and then have just cloudflare in front of the website raking care of all caching ? (I thought they even provide a WordPress plugin for that).

Also careful with hosting other people content under your domain/service under your name especially with CSAM stuff and other illegal material that your domain becomes the face of.

cr1st1an•5h ago
Hi, yes. Jetpack has a plugin for CDN but it's very limited I actually had the experience of having to turn off that plugin because the shared URL was reported as a malicious website, and without notice raked up a bill of over $9k for AWS bandwidth costs.

The idea here is to make it actually work at a level of service that Jetpack can't or won't. Yes, in the managed service I'll have to take that into account.

benatkin•6h ago
I wouldn't use this, because it seems odd to use a Cloudflare Worker for something inherently static, but I thought about what I might use, and bunny.net came to mind. Now I have a question, which is why on the Bunny.net pricing page doesn't it mention Cloudflare? https://bunny.net/pricing/ It mentions CDN77, BytePlus, CacheFly, CloudFront, and Fastly. Is what Cloudflare provides in a different market segment?
cr1st1an•5h ago
Yes, the worker handles the fetch and cache. In normal use the URLs would point straight to the R2 public endpoint. Cloudflare might end up cheaper than Bunny.net. Five terabytes on Cloudflare would be about $75, but you avoid egress fees entirely and gain access to more than 300 edge locations.
jorams•3h ago
> It mentions CDN77, BytePlus, CacheFly, CloudFront, and Fastly. Is what Cloudflare provides in a different market segment?

Cloudflare's pricing is "free until you get a message from the sales team that it's time to pay up". That's impossible to compare to anything else, so yes effectively a different market segment.

VladVladikoff•6h ago
[flagged]
cr1st1an•5h ago
I'm listening.
EGreg•5h ago
https://github.com/Qbix/Platform

Having said that, I am a big fan of CDNs. Your origin server can generate pages and that’s a lot better than static sites.

If you want a decentralized Internet, don’t use the Web. Use something like Pears / Holepunch / Hypercore / Dat (same thing hehe)

autoexec•6h ago
> Privacy

> Bandwidth Saver respects your privacy and your visitors’ privacy: Does not track visitors...Does not collect analytics

Wouldn't this cause a site's visitors to send traffic to cloudflare in situations where they wouldn't otherwise, allowing cloudflare to log their IP, timestamp, and the image requested, along with any other data in the request header? If this plugin wasn't used on the site cloudflare wouldn't get/log/track any of that. I'm not sure that handing all that data over to a third party (especially one as large and centralized as cloudflare) is compatible with respecting visitor's privacy. At the very least, site owners should be made aware of the fact that this is data will end up being shared.

cr1st1an•5h ago
This is true, I still try to be clear about that:

"External Services

This plugin connects to external services to deliver images:

Cloudflare R2 & Workers

Purpose: Stores and serves cached images from 300+ global locations Provider: Cloudflare, Inc. Terms: cloudflare.com/terms Privacy: cloudflare.com/privacypolicy"

jijji•5h ago
I loved the FAQ question "What happens if cloudflare is down?"... Well, the short answer is it takes down 75% of the internet with it; you mean like 3 days ago for the whole day? well, there is always going outside and going bowling with your friends for a few hours until it comes back online, then the internet resumes function at that time.
cr1st1an•5h ago
True true, maybe I should update it to “go outside and touch some grass.”
system2•3h ago
We serve over 100 WordPress websites, some with relatively high traffic. I've never encountered a Cloudflare issue with image caching. I am a little confused about what this is all about.

We also have our own CDN-ish DigitalOcean droplets with Terabytes of data transfer available (stacked droplets increase the TB limit under the same account, too). This is a $10-$15 solution for 100+ WordPress sites.

Small droplets (DigitalOcean, Vultr, or managed like CloudWays) offer multi-TB bandwidth for data transfers. With the WebP format, even the highest-resolution image is under 100 KB. We try to keep everything under 50 KB for mobile optimization as well. I don't see sites using 50 GB per month and always below the limits. Why would anyone need an extra layer of complication?

tallanvor•2h ago
How many WordPress sites even need this? I have several running and none of them use anywhere close to enough bandwidth that I have to worry about it.
Neil44•1h ago
What's the advantage of this vs just setting the site up on a free cloudflare plan and use a caching rule?
red_Seashell_32•1h ago
Easier for non-technical wordpress users who would struggle setting it up themselves.

Show HN: KiDoom – Running DOOM on PCB Traces

https://www.mikeayles.com/#kidoom
250•mikeayles•12h ago•27 comments

Show HN: We built an open source, zero webhooks payment processor

https://github.com/flowglad/flowglad
316•agreeahmed•17h ago•178 comments

Show HN: Wolfrominoes

https://demos.samgentle.com/wolfrominoes/
7•sgentle•3d ago•1 comments

Show HN: A WordPress plugin that rewrites image URLs for near-zero-cost delivery

https://wordpress.org/plugins/bandwidth-saver/
54•cr1st1an•8h ago•32 comments

Show HN: I built directory of fashion brands because I didn't know how to dress

https://brandlist.it.com
2•EthanSeo•2h ago•2 comments

Show HN: I built an interactive HN Simulator

https://news.ysimulator.run/news
497•johnsillings•1d ago•212 comments

Show HN: Constitutional AI Agent OS (governance enforced at kernel level)

https://github.com/kimeisele/steward-protocol
3•harekrishna108•3h ago•1 comments

Show HN: Anthony Bourdain's Lost Li.st's

https://bourdain.greg.technology/
2•gregsadetsky•3h ago•1 comments

Show HN: Parm – Install GitHub releases just like your favorite package manager

https://github.com/yhoundz/parm
3•houndz•10h ago•1 comments

Show HN: OCR Arena – A playground for OCR models

https://www.ocrarena.ai/battle
210•kbyatnal•4d ago•62 comments

Show HN: Datamorph – A clean JSON ⇄ CSV converter with auto-detect

https://datamorphio.vercel.app
22•sumit_entr42•5d ago•6 comments

Show HN: Search London StreetView panoramas by text

https://london.publicinsights.uk
38•dfworks•5d ago•14 comments

Show HN: Cynthia – Reliably play MIDI music files – MIT / Portable / Windows

https://www.blaizenterprises.com/cynthia.html
85•blaiz2025•1d ago•30 comments

Show HN: Stun LLMs with thousands of invisible Unicode characters

https://gibberifier.com
195•wdpatti•2d ago•105 comments

Show HN: I wrote a minimal memory allocator in C

https://github.com/t9nzin/memory
133•t9nzin•2d ago•32 comments

Show HN: We cut RAG latency ~2× by switching embedding model

https://www.myclone.is/blog/voyage-embedding-migration/
23•vira28•1d ago•3 comments

Show HN: I Figured It Out

https://www.adama-platform.com/learn
3•mathgladiator•11h ago•0 comments

Show HN: Rs-Utcp, a Rust Implementation of the Universal Tool Calling Protocol

https://github.com/universal-tool-calling-protocol/rs-utcp
2•juanviera23•13h ago•0 comments

Show HN: MCP Security Scanning Tool for CI/CD

https://smart.mcpshark.sh/
12•devops-coder•14h ago•0 comments

Show HN: Build the habit of writing meaningful commit messages

https://github.com/arpxspace/smartcommit
109•Aplikethewatch•3d ago•131 comments

Show HN: Deft-Intruder – Real-time malware detection daemon for Linux

https://github.com/539hex/deft-intruder
4•539hex•20h ago•0 comments

Show HN: Virtual SLURM HPC cluster in a Docker Compose

https://github.com/exactlab/vhpc
57•ciclotrone•6d ago•14 comments

Show HN: Hypercamera – a browser-based 4D camera simulator

https://dugas.ch/4d_creatures/4d_camera.html
19•chronolitus•6d ago•4 comments

Show HN: Supabase-Test – Fast Isolated Postgres DBs for Testing Supabase RLS

https://www.npmjs.com/package/supabase-test
29•pyramation•5d ago•10 comments

Show HN: Forty.News – Daily news, but on a 40-year delay

https://forty.news
438•foxbarrington•3d ago•178 comments

Show HN: I built an interactive map of jobs at top AI companies

https://map.stapply.ai
15•kalil0321•1d ago•5 comments

Show HN: Wealthfolio 2.0- Open source investment tracker. Now Mobile and Docker

https://wealthfolio.app/?v=2.0
672•a-fadil•4d ago•213 comments

Show HN: Experimental eBPF Firewall in Rust with Heuristic Risk Scoring

https://github.com/N1ghttm4r33/Antivirus
2•n1ghtm4rr3•16h ago•0 comments

Show HN: SafeShare – Clean tracking params locally (PWA and bookmarklets

https://j-ai-71.github.io/Supersystem/
2•safeshare•17h ago•0 comments

Show HN: ZenPaint, a pixel-perfect MacPaint recreation for the browser

https://zenpaint.org/
7•allthreespies•17h ago•0 comments