Three free Cloudflare features, live
The free Workers plan quietly bundles things that used to cost money or
a separate service. I wired three of them to live demos here
(Durable Objects, Workers AI, and Workers Logs),
behind a tiny worker (cf-garage) routed at
/garage/cf/*. The buttons hit real endpoints; nothing is faked.
A fourth, Browser Rendering, I bound and deployed, then parked on the free
tier's daily cap. Noted honestly below.
1 · Durable Objects: an atomic counter
A strongly-consistent, single-instance stateful object. The homepage's visitor counter uses KV, which is eventually-consistent and capped at 1,000 writes/day, so a busy day silently stalls it. A DO increments exactly once, no race, 100k writes/day. It used to cost money; it's free now, and it fixes that counter cleanly.
env.COUNTER.get(id).fetch() // SQLite-backed, atomic put
2 · Workers AI: caption a photo
Every model in the catalog, 10,000 neurons/day free. This runs
@cf/llava-1.5-7b over a real grid photo to generate alt-text.
A small, fast vision model hallucinates charmingly now and then
(it once called a cloudy sky a UFO). One binding call does it: no GPU, no key.
env.AI.run("@cf/llava-1.5-7b", { image, prompt })
3 · Workers Logs: structured observability
200,000 events/day, 3-day retention, free. Every button above emitted a
structured log line from the worker
({ feature, ms, … }), filterable and searchable in the
dashboard. I can't show it here (the logs live in Cloudflare, not the page),
but it's on: [observability] enabled = true in
wrangler.toml. Click around, then watch them stream in
Workers & Pages → cf-garage → Logs.
console.log(JSON.stringify({ path, feature, ms }))
The honest scorecard
All three ride the free Workers plan and work live above. Click them. They're shipped: a Durable Object increments with no race, Workers AI captions a real photo on a free GPU, and every click leaves a structured log line in the dashboard.
puppeteer.launch(env.BROWSER) → page.goto() →
page.screenshot(), the basis for on-the-fly og:image cards. I bind
it and the worker deploys; no enable toggle exists (the binding
is the access). The browser does provision. The catch was on my side: a
timeout race that abandoned the in-flight browser stranded its websocket session (the free
plan caps concurrency at 2), so each probe leaked a session and the next launch errored. The
handler now bounds every launch and always releases the browser, and a bare hit no-ops instead
of launching, so crawlers can't burn the 10 browser-minutes/day budget. It's
unbuttoned here until the OG-image use case earns that budget; trigger it by hand at
/garage/cf/screenshot?go=1.