{"id":51914288,"url":"https://github.com/loke-dev/workers-doctor","last_synced_at":"2026-07-27T09:02:14.852Z","repository":{"id":373217717,"uuid":"1312319528","full_name":"loke-dev/workers-doctor","owner":"loke-dev","description":"Inspect and safely run multi-Worker Cloudflare projects.","archived":false,"fork":false,"pushed_at":"2026-07-26T10:00:04.000Z","size":95,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-26T10:05:52.364Z","etag":null,"topics":["cloudflare-workers","developer-tools","github-actions","local-development","wrangler"],"latest_commit_sha":null,"homepage":"https://workers-doctor.loke.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loke-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-07-25T21:33:45.000Z","updated_at":"2026-07-26T09:55:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/loke-dev/workers-doctor","commit_stats":null,"previous_names":["loke-dev/workers-doctor"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/loke-dev/workers-doctor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fworkers-doctor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fworkers-doctor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fworkers-doctor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fworkers-doctor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loke-dev","download_url":"https://codeload.github.com/loke-dev/workers-doctor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fworkers-doctor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35945273,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-27T02:00:06.776Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare-workers","developer-tools","github-actions","local-development","wrangler"],"created_at":"2026-07-27T09:02:14.084Z","updated_at":"2026-07-27T09:02:14.844Z","avatar_url":"https://github.com/loke-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Workers Doctor\n\nInspect and safely run multi-Worker Cloudflare projects.\n\n[![npm version](https://img.shields.io/npm/v/workers-doctor?color=0f766e)](https://www.npmjs.com/package/workers-doctor)\n[![CI](https://github.com/loke-dev/workers-doctor/actions/workflows/ci.yml/badge.svg)](https://github.com/loke-dev/workers-doctor/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/loke-dev/workers-doctor/actions/workflows/codeql.yml/badge.svg)](https://github.com/loke-dev/workers-doctor/actions/workflows/codeql.yml)\n[![MIT license](https://img.shields.io/badge/license-MIT-171816)](LICENSE)\n\n[Website](https://workers-doctor.loke.dev) · [GitHub Action](#github-actions) · [Report an issue](https://github.com/loke-dev/workers-doctor/issues)\n\nWorkers Doctor turns a directory of Wrangler files into one understandable\ndevelopment plan. It resolves the selected environment, maps service and\nresource bindings, includes variables and legacy module bindings in collision\nchecks, identifies local and remote state, checks secret names from local files\nand the process environment, and can start the stack only after the plan is\nvisible.\n\n```console\n$ npx workers-doctor inspect --env staging\n\nWorkers Doctor\n2 workers · 3 bindings · 1 remote\nEnvironment: staging\n\ndoctor-api-staging  apps/api/wrangler.jsonc\n  d1               DB → doctor-preview  remote\n  service          AUTH → doctor-auth-staging  local\n\ndoctor-auth-staging  apps/auth/wrangler.jsonc\n  kv                SESSIONS → local-id  local\n\ni NOTICE WD002  Remote bindings will be used\n```\n\n## Inspect a stack\n\n```sh\nnpx workers-doctor\nnpx workers-doctor ./apps --env staging\nnpx workers-doctor --json\nnpx workers-doctor --github --strict\nnpx workers-doctor graph \u003e workers.dot\n```\n\nWrangler JSONC, JSON, and TOML configurations are supported. Common generated\ndirectories are skipped during discovery, including framework output from\nAstro, Next.js, Nuxt, SvelteKit, and Vercel.\n\n## Start the development plan\n\nPreview the exact processes and ports first:\n\n```sh\nnpx workers-doctor dev --env staging --dry-run\n```\n\nThen start every discovered Worker in dependency order:\n\n```sh\nnpx workers-doctor dev --env staging\n```\n\nUse `-p` (or `--port`) to shift the local port range when 8787 is already in use:\n\n```sh\nnpx workers-doctor dev --env staging --dry-run -p 9000\n```\n```\n\nWorkers Doctor uses the repository's lockfile to select pnpm, npm, Bun, or Yarn.\nIt stops the remaining processes and exits nonzero if any managed Worker fails\nor is terminated unexpectedly. Processes that ignore graceful shutdown are\nforce-stopped after a short grace period. Workers Doctor does not deploy, create\nresources, or call the Cloudflare API.\n\n## GitHub Actions\n\n```yaml\n- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7\n- uses: loke-dev/workers-doctor@v0.1.5\n  with:\n    environment: staging\n```\n\nThe reusable Action annotates configuration problems and fails on errors. Its\ninputs are `path`, `environment`, and `strict`. It runs the reviewed CLI bundle\nfrom the selected repository tag without downloading executable code from npm.\n\n## Diagnostics\n\n| Rule | Check |\n| --- | --- |\n| `WD001` | Selected environment exists in every scanned Worker |\n| `WD002` | Remote bindings are clearly reported |\n| `WD003` | Local and remote state are not mixed accidentally |\n| `WD004` | A project does not mix `.dev.vars` and `.env` |\n| `WD005` | Names declared in `secrets.required` exist in local secret sources |\n| `WD006` | Service binding targets resolve inside the scanned stack |\n| `WD007` | Service binding cycles, including self-cycles, are visible |\n| `WD008` | Effective Worker names are unique inside the scanned stack |\n| `WD009` | Binding names are unique inside each Worker |\n\nSecret values are never reported. `inspect`, `graph`, and CI output are fully\noffline and require no Cloudflare account. Secret-file checks consider only the\nfiles Wrangler selects for the requested environment. Parse failures omit TOML\nsource excerpts so malformed configuration values cannot enter diagnostics.\nHuman and GitHub reports render configuration control characters visibly so\nWorker and binding names cannot inject terminal or workflow-command output.\n\n## Development\n\n```sh\npnpm install\npnpm check\npnpm dist:check\npnpm dev -- tests/fixtures/healthy --env staging\npnpm site:dev\n```\n\n`pnpm check` includes a `dist` verification step, and `pnpm dist:check` is a\nsmall standalone command if you only need to confirm the committed CLI bundle is\nup-to-date.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floke-dev%2Fworkers-doctor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floke-dev%2Fworkers-doctor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floke-dev%2Fworkers-doctor/lists"}