Migration readiness for Cloudflare deployments

CF Ready inspects your repository for Cloudflare Workers runtime blockers and framework-specific migration paths. Migration findings account for 35% of the overall readiness score — see Scoring.

Runtime blockers

The scanner walks up to 500 source files matching **/*.{ts,tsx,js,jsx,mjs,cjs}, excluding node_modules, dist, .next, coverage, .git, build, .turbo, .vercel, and .cf-ready-cache. If your repo has more eligible files, an info finding notes that the scan was truncated.

ModuleSeverityWhat triggers a findingWorkers alternative
fsBlockerimport/require of fs or node:fs; calls to readFile, writeFile, mkdir, streams, etc.R2, KV, D1, or fetch external storage
child_processBlockerImports or exec/spawn usageQueues, Workflows, or external compute
netBlockerTCP socket importsfetch, Workers sockets, or Durable Objects
tlsBlockerTLS module importsCloudflare terminates TLS at the edge
clusterBlockerNode cluster moduleWorkers scale horizontally by default
worker_threadsBlockerWorker thread importsDurable Objects or parallel fetch
Native modules (.node)Blockerrequire('./foo.node') or ESM import of .node binariesWasm or external service
process.envInfoDirect process.env.VAR reads (not a blocker)Document vars in wrangler.toml / dashboard bindings
Blockers zero out the migration category score. Any open blocker severity finding sets the migration category to 0 and prevents a production-ready status. Resolve or refactor before go-live.

Framework detection

Detection runs from package.json dependencies, config files, and directory layout. Supported frameworks:

FrameworkDetection signalsConfidence
nextjsnext dependency, next.config.*, app/ or pages/ directoriesHigh when next is a dependency
vitevite dependency or vite.config.*High / medium
react-spareact + react-scripts or react-domMedium
astro, remix, nuxtMatching framework dependencyHigh
expressexpress dependencyHigh
nodejscreateServer patterns in entry filesMedium / low
staticHTML files without a JS frameworkHigh / medium
unknownNo confident matchLow — legacy migration hints apply

Current hosting is inferred from vercel.json, netlify.toml, wrangler.toml, and similar config files.

Next.js: vinext and OpenNext

For Next.js projects, CF Ready detects App Router vs Pages Router, middleware, and API routes, then recommends a migration path from cf-ready.config.json:

Suggested manual commands (never executed by cf-ready):

npx vinext check
npx vinext init --platform=cloudflare
npm run build:vinext
npx @vinext/cloudflare deploy --dry-run

Middleware triggers a medium-severity finding because edge runtime constraints may differ on Cloudflare.

Other frameworks

FrameworkMigration guidance
Vite / React SPACloudflare Pages or Workers Assets static deploy
Express / Node.jsProgressive rewrite toward Hono or Workers-compatible handlers
Astro, Remix, NuxtOfficial Cloudflare adapter documentation
Static HTMLDirect Pages deploy — no runtime blockers expected

Commands

cf-ready scan              # Full scan including migration checks
cf-ready migration-plan    # Write migration-plan.md only
cf-ready inspect --json    # Framework and route detection without scoring

See Examples for Next.js, Vite, and Node.js walkthroughs using the repo test fixtures.