Cloudflare Workers platform adapter for Shovel - already ServiceWorker-based!
npm install @b9g/platform-cloudflareCloudflare Workers platform adapter for Shovel. Runs ServiceWorker applications on Cloudflare's edge network with R2 storage and static assets support.
``bash`
npm install @b9g/platform-cloudflare
``
@b9g/platform-cloudflare
├── /caches # CloudflareNativeCache (Cloudflare Cache API wrapper)
├── /directories # CloudflareR2Directory, CloudflareAssetsDirectory
├── /variables # envStorage (per-request Cloudflare env access)
└── /runtime # Worker bootstrap (initializeRuntime, createFetchHandler)
Configure in shovel.json:
`json`
{
"platform": "cloudflare",
"caches": {
"default": {
"module": "@b9g/platform-cloudflare/caches"
}
},
"directories": {
"public": {
"module": "@b9g/platform-cloudflare/directories",
"export": "CloudflareAssetsDirectory"
},
"uploads": {
"module": "@b9g/platform-cloudflare/directories",
"binding": "uploads_r2"
}
}
}
Shovel requires Node.js compatibility for AsyncLocalStorage and process.env support. Add to your wrangler.toml:
`toml`
compatibility_date = "2025-04-01"
compatibility_flags = ["nodejs_compat"]
With compatibility_date of 2025-04-01 or later, process.env is automatically populated with your environment variables and secrets at module load time. For earlier dates, add nodejs_compat_populate_process_env to compatibility_flags.
- CloudflarePlatform - Platform adapter (default export)
- CloudflareNativeCache - Wrapper around Cloudflare's Cache API (default export)
- CloudflareR2Directory - FileSystemDirectoryHandle for R2 buckets (default export)CloudflareAssetsDirectory
- - FileSystemDirectoryHandle for static assetsR2FileSystemDirectoryHandle
- - Base R2 directory implementationR2FileSystemFileHandle
- - Base R2 file implementationCFAssetsDirectoryHandle
- - Base assets directory implementationCFAssetsFileHandle
- - Base assets file implementation
- initializeRuntime(config) - Initialize worker runtimecreateFetchHandler(registration)
- - Create ES module fetch handlerCloudflareFetchEvent
- - Extended FetchEvent with env bindings
- envStorage - AsyncContext for per-request Cloudflare env accessgetEnv()
- - Get current request's env bindings
Configure bindings in wrangler.toml. Use lowercase binding names to avoid env expression parsing issues:
`toml
compatibility_date = "2024-09-23"
compatibility_flags = ["nodejs_compat"]
Directory Types
| Type | Use Case | Read/Write | Binding |
|------|----------|------------|---------|
| R2 | User uploads, dynamic storage | Both | User-defined |
| Assets | Static files deployed with worker | Read-only | Always
ASSETS` |MIT