← Stacks

Cloudflare Workers

Platform: edge | typescript

name: Cloudflare Workers
platform: edge
language: typescript
framework: "hono | vanilla"
auth: "shared-auth (@shared/auth + Supabase Auth, or JWT)"
architecture: edge_functions
build: wrangler
package_manager: pnpm
validation: zod@4
i18n: json (simple key-value, or @formatjs/intl)
linter: eslint (flat config v9, typescript-eslint)
formatter: prettier
type_checker: tsc --noEmit (strict mode)
testing: vitest + miniflare (@cloudflare/vitest-pool-workers)
pre_commit: husky + lint-staged (eslint + prettier + tsc)
key_packages:
  - wrangler
  - hono (routing)
  - "@cloudflare/workers-types"
  - drizzle-orm (D1 database)
  - "zod (validation — import from zod/v4)"
  - eslint + typescript-eslint + prettier (code quality)
deploy: cloudflare_workers
infra: sst (sst.config.ts)  Tier 1, wrangler for dev
ci_cd: github_actions
monitoring: posthog (analytics + errors) + cloudflare_analytics
logs:
  wrangler_tail: "wrangler tail --format=pretty 2>&1 | head -100"
  wrangler_logs: "wrangler deployments list && wrangler deployments view"
  d1_logs: "wrangler d1 insights {db-name}"
  posthog: "PostHog dashboard → Error tracking"
  local_build: "pnpm build 2>&1 | tail -50"
dev_server:
  command: "pnpm dev"
  port: 8787
  ready_url: "http://localhost:8787"
visual_testing:
  type: browser
  checks:
    - "Navigate to localhost:8787, verify API responds with valid JSON"
    - "Test key API endpoints return expected status codes"
    - "Check browser console for CORS or fetch errors"
storage:
  - D1 (SQLite at edge)
  - R2 (S3-compatible storage)
  - KV (key-value)
  - Durable Objects (stateful)
agent_content:
  markdown_for_agents: "Enable in Cloudflare dashboard → Quick Actions → Markdown for Agents (auto for all zones)"
  content_negotiation: "For custom Workers: check req.headers.get('Accept')?.includes('text/markdown'), return markdown variant"
  llms_txt: "Serve /llms.txt route with site map for AI agents"
ecosystem:
  workerd: "github.com/cloudflare/workerd — open-source Workers runtime (C++/V8). Self-host Workers locally or on own infra. Escape vendor lock-in."
  emdash: "Serverless CMS on Workers (Astro 6.0 + D1 + R2). WordPress successor with v8 plugin sandboxing and x402 AI monetization."
notes: |
  - Edge-first: no Node.js APIs
  - Use Durable Objects for realtime
  - R2 for media storage
  - Zod 4 for all input validation (import from "zod/v4")
  - pnpm as package manager
  - ESLint flat config + Prettier for code quality
  - tsc --noEmit for type-checking (strict mode)
  - Vitest + @cloudflare/vitest-pool-workers for Workers testing
  - Husky + lint-staged for pre-commit (eslint, prettier, tsc --noEmit)
  - English first for API responses, i18n via JSON if needed
  - Agent-readable: enable CF Markdown for Agents + serve /llms.txt + content negotiation for markdown
  - workerd: self-host Workers runtime for local dev/testing or vendor independence (github.com/cloudflare/workerd)
  - EmDash: open-source CMS on Workers — use as boilerplate for content sites (Astro 6.0 theming, plugin sandboxing, AI-native)
Sources