Render
Cloudflare Worker to proxy and cache requests to R2
Install / Use
/learn @kotx/RenderREADME
Render
Proxies readonly requests to Cloudflare R2 via Cloudflare Workers.
If you want an uploader, try Aster!
If you see a bug or something missing, please open an issue or pull request!
Features
- File listings (with optional hidden files)!

- Handles
HEAD,GET, andOPTIONSrequests - Forwards caching headers (
etag,cache-control,expires,last-modified) - Forwards content headers (
content-type,content-encoding,content-language,content-disposition) - Caches served files using the Cache API
- Ranged requests (
range,if-range, returnscontent-range) - Handles precondition headers (
if-modified-since,if-unmodified-since,if-match,if-none-match) - Can serve an appended path if the requested url ends with / - Defaults to
index.htmlin 0.5.0 - Can serve custom 404 responses if a file is not found
Setup
Configuration
Create your R2 bucket(s) if you haven't already (replace bucket_name and preview_bucket_name appropriately):
pnpm install
pnpm wrangler r2 bucket create bucket_name # required
pnpm wrangler r2 bucket create preview_bucket_name # optional
You can also do this from the Cloudflare dashboard.
Edit wrangler.toml to have the correct bucket_name and optionally, preview_bucket_name (you can set it to bucket_name) if you're going to run this locally.
You can do this from a fork, if using the GitHub Actions method.
You may edit CACHE_CONTROL to the default cache-control header or remove it entirely to fall back to nothing. If you set CACHE_CONTROL to "no-store" then Cloudflare caching will not be used.
Deploying
Note: Due to how custom domains for workers work, you MUST use a route to take advantage of caching. Cloudflare may fix this soon. Also note that *.workers.dev domains do not cache responses. You MUST use a route to your own (sub)domain.
If you want to deploy render with multiple domains for one worker, check out multi-render! It uses render as a package to serve multiple buckets to multiple domains with custom configurations.
Method 1 (Local)
pnpm wrangler publish # or `pnpm run deploy`
Method 2 (GitHub Actions)
- Fork this repository
- Set the secrets
CF_API_TOKEN(with theEdit Cloudflare Workerstemplate) andCF_ACCOUNT_IDin the repo settings - Enable workflows in the Actions tab
- Update
wrangler.tomlas needed (this will trigger the workflow) - (Optionally) set the worker route in the Cloudflare dashboard to use the Cache API
Using as a package
You may use this worker's functionality as a package by installing and importing render2:
npm install render2
Usage:
import render from "render2";
render.fetch(req, env, ctx);
You can see an awesome example with Erisa's multi-render!
Development
Install deps:
pnpm install
To launch the development server:
pnpm run dev
Notable Related Projects
- auravoid's fork adds Plausible support.
- Erisa's project multi-render add support for domain-specific configurations.
Related Skills
node-connect
340.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
340.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.2kCommit, push, and open a PR
