ImageKit
A weekend of work, and real gaps remain.
Images resized, converted and delivered from a network: you request a size and a format in the URL and it produces and caches it.
Build me the image pipeline I actually need instead of ImageKit. **The transformations are the easy half and the delivery network is the expensive half.** A cheap network in front of your own resizer gets most of the value; skipping the network entirely does not. STACK - Node 20+ with Fastify - sharp for every transformation - SQLite through better-sqlite3 for the derivative index - Object storage for originals and derivatives - Bunny or Cloudflare in front for delivery — this is the part to buy rather than build - Caddy in front of the origin THE URL IS THE API - /img/<signature>/<width>x<height>/<fit>/<path>.<ext> - **Sign the parameters, or your origin is a free image-resizing service for the entire internet.** This is the failure that produces a surprise bill, and it is the first thing to write - An allow-list of widths — a dozen values, not any integer. Unbounded widths mean unbounded renders of the same picture THE PIPELINE - Fetch the original once, store it, never modify it - Derive on first request, write to storage, serve from cache ever after. The second request must never touch sharp - AVIF, then WebP, then JPEG, chosen from Accept, with `Vary: Accept` set — **forget the Vary header and the network serves AVIF to a browser that cannot read it** - Strip metadata, keep the colour profile, and honour EXIF orientation before resizing or half your portrait photographs arrive sideways - Cap dimensions and megapixels on input. A crafted image is a memory exhaustion attack DOING IT WITHOUT BREAKING THE PAGE - Emit a srcset and sizes with your allow-listed widths, and set width and height so nothing shifts as it loads - A tiny blurred placeholder generated at ingest, inline in the HTML - Never serve an image larger than the container asked for; that is where the bandwidth goes OPERATIONS - A render queue with a concurrency cap; sharp is CPU-hungry and an unbounded burst takes the machine down - **A stampede lock per derivative**: fifty simultaneous requests for one uncached image must produce one render - Bytes served and renders per day recorded, so a bill or an abuse is visible - A purge that changes the signature rather than trying to clear a cache you do not control WHAT MATTERS MOST Signed parameters and the width allow-list. Without them you have built an open image service on your own hosting bill.
What you lose
- A global delivery network with edge caching, which is the expensive part
- Format negotiation kept current as browsers change
- Transformations you never have to think about again
- Storage and origin fetching handled
If you would rather not build
- Next.js or Astro image handling if you are already in one
The escape hatch
open source · no votes, no paid placement
imgproxy
$0Fast image resizing and conversion over signed URLs; self-hosted.
imgproxy/imgproxyfree · open source
Why this verdict
our own opinion · changed only by a person
55/100
Verdict kinda at 55: sharp does the work, and the network is the part worth paying somebody for. Signed URLs are non-negotiable — an open resizer is a bill waiting to happen.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.
Questions about ImageKit
answered from the record above
Is ImageKit free?
No — the plan we track is $89 a month. Performance plan at $89/month with bandwidth and transformations included; a free tier covers small sites.
Can you replace ImageKit by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 55 out of 100, build time a weekend. Read what you lose before you decide.
How much does ImageKit cost?
$89 a month on Performance — $1,068 a year. Recorded 14 Aug 2026.
What do you lose by replacing ImageKit?
A global delivery network with edge caching, which is the expensive part; Format negotiation kept current as browsers change; Transformations you never have to think about again; Storage and origin fetching handled. If any of those carry weight for you, keep paying.
Is there an open-source alternative to ImageKit?
Yes: imgproxy, Thumbor. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

