Skip to content

Cloudflare Limits

Cloudflare Workers has certain limits you should be aware of when building your Cloudwerk application.

LimitFreePaid
Requests per day100,000Unlimited
Request body size100 MB100 MB
Response body sizeNo limit (streaming)No limit (streaming)
LimitFreePaid
CPU time per request10 ms30 s (Unbound)
Duration (wall clock)No explicit limitNo explicit limit
Memory per request128 MB128 MB
Environment variables6464
Environment variable size5 KB each5 KB each
LimitValue
Script size (compressed)10 MB
Script size (uncompressed)30 MB
Number of scriptsUnlimited
LimitValue
Maximum databases50,000 per account
Maximum storage per database10 GB
Maximum rows read per query1,000,000
Maximum rows written per query1,000
Maximum query duration30 seconds
LimitValue
Maximum SQL statement size100 KB
Maximum bound parameters100
Maximum columns per table2,000
Maximum row size1 MB
MetricValue
Reads per second~10,000
Writes per second~1,000
Typical read latency5-50 ms
Typical write latency50-200 ms
LimitFreePaid
Maximum namespaces100100
Maximum keys per namespaceUnlimitedUnlimited
Maximum value size25 MB25 MB
Maximum key size512 bytes512 bytes
Maximum metadata size1 KB1 KB
LimitFreePaid
Reads per day100,000Unlimited
Writes per day1,000Unlimited
Deletes per day1,000Unlimited
Lists per day1,000Unlimited
MetricValue
Read latency< 60 ms (95th percentile)
Write propagationUp to 60 seconds (eventually consistent)
LimitValue
Maximum object size5 TB
Maximum bucket count1,000 per account
Maximum objects per bucketUnlimited
LimitFreePaid
Class A operations (writes)1,000,000/month$4.50 per million
Class B operations (reads)10,000,000/month$0.36 per million
Data transfer (egress)FreeFree
MetricValue
Put latency< 100 ms
Get latency< 50 ms
Multipart upload parts10,000 max
LimitValue
Maximum queues per account100
Maximum message size128 KB
Maximum batch size100 messages
Maximum in-flight messages10,000
LimitValue
Messages per second (send)400 per queue
Messages per second (receive)5,000 per consumer
LimitValue
Message retention4 days
Retry attemptsConfigurable (default: 3)
Maximum delay12 hours
LimitValue
Storage per object10 GB
Key size2 KB
Value size128 KB
Total storage per accountNo explicit limit
MetricValue
Requests per object~500/second
Alarm precision1 second
LimitValue
Max connections per object32,768 (hibernatable)
Max message size1 MB
LimitValue
Triggers per Worker3
Minimum interval1 minute
Execution time (Free)30 seconds
Execution time (Paid)15 minutes
LimitValue
Total bindings per Worker200
Service bindings20
LimitFreePaid
Subrequests per request501,000
Recursive subrequests1616
  1. CPU Time: Use streaming for large responses, offload heavy work to Queues
  2. Database: Use indexes, paginate results, batch writes
  3. KV: Cache frequently accessed data, use appropriate TTLs
  4. R2: Use multipart uploads for large files
  5. Queues: Use batching for high-volume message sending
// Track request timing
export const middleware: Middleware = async (request, next, context) => {
const start = Date.now();
const response = await next(request);
const duration = Date.now() - start;
// Log for monitoring
console.log(`Request took ${duration}ms`);
// Alert if approaching limits
if (duration > 8000) { // 8s warning for 10ms limit
console.warn('Request approaching CPU limit');
}
return response;
};
export async function loader({ context }: LoaderArgs) {
try {
const data = await context.db.selectFrom('items').execute();
return { data };
} catch (error) {
if (error.message.includes('D1_ERROR')) {
// Handle D1-specific errors
console.error('Database error:', error);
return { data: [], error: 'Database temporarily unavailable' };
}
throw error;
}
}

For current pricing, see the Cloudflare Workers Pricing page.

ServiceFree TierPaid (Workers Paid)
Workers100K requests/day$5/month + $0.50/million
D15M rows read/day, 100K writes/day$0.001/million rows read
KV100K reads/day, 1K writes/day$0.50/million reads
R210M Class B, 1M Class A/month$0.36/million reads
QueuesIncluded$0.40/million messages
Durable ObjectsIncluded$0.15/million requests