Integrations / Cloudflare R2

Cloudflare R2 integration
for VeloCMS

Storing images and files in a database is slow, fragile, and expensive at scale. VeloCMS sends every upload directly to Cloudflare R2 — globally replicated, zero egress fees, and accessible in milliseconds anywhere in the world.

What this integration does

Every image you upload in the VeloCMS media library, every video attached to a post, and every digital product file available for download after purchase goes directly into a Cloudflare R2 bucket. Files are never stored in the PocketBase SQLite database itself — that would bloat the database and make backups impractical. R2 uses Cloudflare's object storage network, which means files are served from the same 300+ PoP network as Cloudflare's CDN without any egress fees for bandwidth. For photographers and creators with high-resolution images, this is the difference between paying per-GB for downloads and paying only for storage. Full-resolution files are preserved; VeloCMS serves appropriately sized variants at render time through Next.js Image Optimization without downscaling the originals.

Full-res originals

Uploads are stored at original resolution. VeloCMS generates responsive variants at render time — the full-res file is never deleted.

Zero egress fees

R2 charges only for storage, not bandwidth. High-traffic image galleries don't add a per-download cost.

Global CDN delivery

Files are served from Cloudflare's 300+ PoP edge network. Readers load images from the nearest datacenter.

Digital product downloads

Paid digital products — PDFs, presets, source files — are stored in R2 and served via time-limited signed URLs after purchase.

Where to find it in admin

  1. 1
    Managed SaaS plan. R2 is pre-configured. Upload images directly from Admin → Media. No R2 credentials required on your side.
  2. 2
    Self-hosted. Set CLOUDFLARE_R2_BUCKET, CLOUDFLARE_R2_ACCESS_KEY_ID, and CLOUDFLARE_R2_SECRET_ACCESS_KEY in .env.local. The media library starts using R2 immediately.

Use cases

A photographer publishing a portfolio blog uploads 50MB RAW-processed JPEGs — R2 stores the originals and VeloCMS serves compressed WebP variants to visitors without paying per-download bandwidth costs. A developer selling digital products (Figma components, Lightroom presets, source code archives) stores purchase files in R2 and issues signed download URLs automatically on order completion. A developer running a VeloCMS self-hosted instance on a low-memory VPS avoids saturating disk I/O by offloading all media to R2, keeping the SQLite database fast and compact.

Cloudflare R2 storage pairs naturally with the VeloCMS for photographers workflow and the developer blog stack.

Fast media. Zero egress fees.

14-day free trial. Media uploads on Cloudflare R2 from day one.

Get started with VeloCMS