4.4 KiB
Configuration
Getting Started
Navigate to workers.cloudflare.com/playground
- No account required for testing
- No CLI or local setup needed
- Code executes in real Cloudflare Workers runtime
- Share code via URL (never expires)
Playground Constraints
⚠️ Important Limitations
| Constraint | Playground | Production Workers |
|---|---|---|
| Module Format | ES modules only | ES modules or Service Worker |
| TypeScript | Not supported (JS only) | Supported via build step |
| Bindings | Not available | KV, D1, R2, Durable Objects, etc. |
| wrangler.toml | Not used | Required for config |
| Environment Variables | Not available | Full support |
| Secrets | Not available | Full support |
| Custom Domains | Not available | Full support |
Playground is for rapid prototyping only. For production apps, use wrangler CLI.
Code Editor
Syntax Requirements
Must export default object with fetch handler:
export default {
async fetch(request, env, ctx) {
return new Response('Hello World');
}
};
Key Points:
- Must use ES modules (
export default) fetchmethod receives(request, env, ctx)- Must return
Responseobject - TypeScript not supported (use plain JavaScript)
Multi-Module Code
Import from external URLs or inline modules:
// Import from CDN
import { Hono } from 'https://esm.sh/hono@3';
// Or paste library code and import relatively
// (See patterns.md for multi-module examples)
export default {
async fetch(request) {
const app = new Hono();
app.get('/', (c) => c.text('Hello'));
return app.fetch(request);
}
};
Preview Panel
Browser Tab
Default interactive preview with address bar:
- Enter custom URL paths
- Automatic reload on code changes
- DevTools available (right-click → Inspect)
HTTP Test Panel
Switch to HTTP tab for raw HTTP testing:
- Change HTTP method (GET, POST, PUT, DELETE, PATCH, etc.)
- Add/edit request headers
- Modify request body (JSON, form data, text)
- View response headers and body
- Test different content types
Example HTTP test:
Method: POST
URL: /api/users
Headers:
Content-Type: application/json
Authorization: Bearer token123
Body:
{
"name": "Alice",
"email": "alice@example.com"
}
Sharing Code
Copy Link button generates shareable URL:
- Code embedded in URL fragment
- Links never expire
- No account required
- Can be bookmarked for later
Example: https://workers.cloudflare.com/playground#abc123...
Deploying from Playground
Click Deploy button to move code to production:
- Log in to Cloudflare account (creates free account if needed)
- Review Worker name and code
- Deploy to global network (takes ~30 seconds)
- Get URL: Deployed to
<name>.workers.devsubdomain - Manage from dashboard: add bindings, custom domains, analytics
After deploy:
- Code runs on Cloudflare's global network (300+ cities)
- Can add KV, D1, R2, Durable Objects bindings
- Configure custom domains and routes
- View analytics and logs
- Set environment variables and secrets
Note: Deployed Workers are production-ready but start on Free plan (100k requests/day).
Browser Compatibility
| Browser | Status | Notes |
|---|---|---|
| Chrome/Edge | ✅ Full support | Recommended |
| Firefox | ✅ Full support | Works well |
| Safari | ⚠️ Broken | Preview fails with "PreviewRequestFailed" |
Safari users: Use Chrome, Firefox, or Edge for Workers Playground.
DevTools Integration
- Open preview in browser tab
- Right-click → Inspect Element
- Console tab shows Worker logs:
console.log()output- Uncaught errors
- Network requests (subrequests)
Note: DevTools show client-side console, not Worker execution logs. For production logging, use Logpush or Tail Workers.
Limits in Playground
Same as production Free plan:
| Resource | Limit | Notes |
|---|---|---|
| CPU time | 10ms | Per request |
| Memory | 128 MB | Per request |
| Script size | 1 MB | After compression |
| Subrequests | 50 | Outbound fetch calls |
| Request size | 100 MB | Incoming |
| Response size | Unlimited | Outgoing (streamed) |
Exceeding CPU time throws error immediately. Optimize hot paths or upgrade to Paid plan (50ms CPU).