Skip to content
All postsOne image pipeline branching into self-hosted and managed cloud paths

Self-hosted vs managed image optimization: how to choose

Compare who owns the database, cache, delivery bill, upgrades, monitoring, and failure recovery in self-hosted and managed image optimization.

Updated self-hostingarchitectureimage-cdn

The self-hosted and managed editions use the same transform grammar, but they are not the same operational decision. One puts Postgres, cache capacity, updates, and incidents on your team. The other puts the service boundary and delivery bill with Keenpix.

Start by deciding which team will own failures in the image path. Cost makes more sense after that responsibility is clear.

Self-hosting fits an infrastructure team

Run Keenpix yourself when your team needs to control where the application and database run, or modify the AGPL-3.0 code. Self-hosting alone does not guarantee residency or compliance: source requests, CDN traffic, email, backups, and logs may still leave the selected network or region. Document those paths separately. This model makes sense when Docker, PostgreSQL backups, TLS, monitoring, and capacity planning are already routine work.

There is no managed delivery charge in this model. There is still infrastructure cost. Cold transforms consume CPU, the disk cache needs space, Postgres needs backups, and the public endpoint needs abuse controls. Horizontal replicas also need an outer CDN because their local disk caches are separate; bundled self-host mode does not currently provide a shared object-storage cache.

The Docker deployment guide covers a pinned release, health checks, cache boundaries, and the first database dump. Read it before estimating the operating cost from the container count alone.

Managed cloud fits a product team

Use the managed service when the team wants to create projects and deliver images without operating the database and transform workers. This removes a deployment from your on-call list, but it introduces a provider dependency and a bandwidth bill.

Check the current pricing page against the successful bytes you expect the managed network to deliver. Cloudflare edge hits, Keenpix cache hits, and new transforms each count once; browser hits and customer-owned CDN hits do not reach the managed network. Include expected growth and any regions or origins that need special handling. Do not compare a cloud plan only with the price of one self-hosted VM. Include backups, monitoring, upgrades, and the time spent responding to failures on that VM.

Moving later is possible, but plan the details

Both editions understand the same core path and query parameters. A migration can still change the hostname, project identifier, signing secret, cache behavior, and DNS. Put the delivery hostname behind a configuration value from the beginning, and avoid scattering complete transform URLs through stored content.

Test signed URLs and cache keys before switching traffic. A matching ?w=1200&fmt=webp query does not prove that both deployments share the same project policy or signature.

A practical decision

Choose self-hosting when infrastructure control is a requirement and the team already owns the work it creates. Choose managed cloud when the image pipeline is supporting infrastructure that the product team does not want to operate.

If the answer is still unclear, run the same source set through both for a week. Measure delivered bytes, cold-transform latency, cache hits, operator time, and failure recovery. That record is more useful than a generic cost calculator.

Keep reading

Optimized images, minus the surprise bill.

One published price on managed image delivery. Or self-host the open-source engine, free.