How asset preview works, how public and signed delivery workflows work, how cache purge is enabled, and what the cost and metrics views are actually showing.
- Inline preview eligibility
- Public URL and signed URL behavior
- Cloudflare cache purge requirements
- Cost analysis and live metrics model
Preview, URLs, cache purge, and cost analysis
Inline preview support
The app supports inline preview for selected image and text formats.
Image preview candidates:
- jpg
- jpeg
- png
- webp
- gif
- svg
- avif
Text preview candidates include:
- plain text
- json
- md
- html
- css
- js
- ts
- tsx
- yml
- yaml
- xml
Preview eligibility also depends on the configured maximum preview file size. If the object is larger than the preview threshold, the app reports that preview is disabled for size, not that the object is broken.
Preview settings that matter
Preview behavior is controlled from Settings > Preview:
- Enable image preview
- Enable inline text preview
- Max preview file size
- Signed URL preview expiry
If inline preview is disabled in settings, the product reports that directly. It does not silently fall back to frontend-side credential use.
Signed URLs
Signed URLs are generated in the backend.
Important boundaries:
- object-level signed URL generation is an R2 backend operation
- preview signed URLs are also backend-generated
- the frontend does not sign URLs itself
Supported signed URL verbs include:
- GET
- HEAD
- PUT
- DELETE
Signed URL expiry is clamped for safety:
- preview URL generation uses a short-lived expiry window
- object action signed URLs can use a longer expiry, but still within bounded limits
Use signed URLs when the object is private and you need time-limited access, upload, delete, or sharing behavior from the delivery workflow.
Public URLs
Public URL generation is mapping logic, not a permission grant.
Current mapping order:
- profile CDN domain, if configured
- profile public base URL, if configured
- raw R2 endpoint path
If no CDN or public base URL exists, the app can still return an endpoint-based URL. That does not mean the object is publicly readable. It only means the product can construct a URL shape.
Public URL copy flows belong in the same workflow as object selection, domain mapping, and purge.
Cache purge requirements
Cache purge is available only when the active profile includes:
- Cloudflare Zone ID
- Cloudflare API token with purge permission
- a public URL mapping that resolves the selected object to the actual public URL
If any of those are missing, purge actions are unavailable by design.
The product supports:
- purging selected object URLs
- purging arbitrary URLs from the cache tools area
- validating whether the active profile has enough purge configuration
Use purge only when the selected URL maps to the real public asset path. If the object cannot be mapped to a public URL, the product blocks purge instead of guessing.
Preview and delivery workflow
A reliable delivery workflow usually looks like this:
- Upload or sync the asset.
- Confirm metadata and cache-control in object details.
- Preview the asset if the file type is supported.
- Copy the public URL or generate a signed URL.
- Purge the public URL if you are replacing cached content.
That keeps storage, delivery, and cache operations attached to the same object context.
Cost analysis is an estimate layer
The cost view is not pretending to be authoritative Cloudflare billing data.
Current purpose:
- show bucket footprint
- show prefix footprint
- highlight largest prefixes
- highlight largest objects
- estimate monthly storage cost from your configured storage price
Use it for operational visibility and prioritization, not for invoice reconciliation.
Live R2 metrics
The metrics view uses Cloudflare GraphQL to surface live R2 telemetry in the desktop workflow.
Use it for:
- current operational visibility
- verifying whether a bucket or prefix is active
- pairing transfer or delivery work with real metrics context
Treat this as live operator telemetry, not as a billing export or long-term analytics warehouse.
Cost settings that matter
In Settings > Cost Analysis, the current operator-facing controls are:
- currency
- storage price per GB per month
Those values shape how the estimate is rendered. If your pricing assumptions are wrong, the estimate will also be wrong.
Common mistakes
"Public URL" does not work in the browser
Check:
- whether the object is actually served publicly
- whether the CDN domain or public base URL is correct
- whether the copied URL shape matches the public delivery path
Preview is unavailable for a supported file type
Check:
- preview file size threshold
- preview settings toggles
- object content type and extension
Purge is unavailable
Check:
- Zone ID
- API token
- token scope
- URL mapping for the selected object
Cost numbers look low or high
Check:
- storage price setting
- whether you are reading bucket vs prefix scope
- whether you expected invoice-grade billing instead of a storage estimate
Metrics do not appear
Check:
- whether the active profile has the required Cloudflare access for metrics
- whether the GraphQL path is available for the account
- whether you are treating a live metrics view like a historical billing report