{"id":51914293,"url":"https://github.com/loke-dev/flarecheck","last_synced_at":"2026-07-27T09:02:15.203Z","repository":{"id":372968520,"uuid":"1310979823","full_name":"loke-dev/flarecheck","owner":"loke-dev","description":"Production-readiness checks for Cloudflare Workers projects.","archived":false,"fork":false,"pushed_at":"2026-07-24T14:25:04.000Z","size":219,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-24T15:06:31.171Z","etag":null,"topics":["ci-cd","cloudflare-workers","configuration","devtools","linter","typescript","wrangler"],"latest_commit_sha":null,"homepage":"https://flarecheck.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":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-24T11:48:47.000Z","updated_at":"2026-07-24T14:25:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/loke-dev/flarecheck","commit_stats":null,"previous_names":["loke-dev/flarecheck"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/loke-dev/flarecheck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fflarecheck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fflarecheck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fflarecheck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fflarecheck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loke-dev","download_url":"https://codeload.github.com/loke-dev/flarecheck/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loke-dev%2Fflarecheck/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":["ci-cd","cloudflare-workers","configuration","devtools","linter","typescript","wrangler"],"created_at":"2026-07-27T09:02:14.454Z","updated_at":"2026-07-27T09:02:15.194Z","avatar_url":"https://github.com/loke-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FlareCheck\n\nProduction-readiness checks for Cloudflare Workers projects.\n\n[![npm version](https://img.shields.io/npm/v/flarecheck?color=f04b23)](https://www.npmjs.com/package/flarecheck)\n[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-FlareCheck-2088ff?logo=github)](https://github.com/marketplace/actions/flarecheck)\n[![CI](https://github.com/loke-dev/flarecheck/actions/workflows/ci.yml/badge.svg)](https://github.com/loke-dev/flarecheck/actions/workflows/ci.yml)\n[![MIT license](https://img.shields.io/badge/license-MIT-171816)](LICENSE)\n\n[Website](https://flarecheck.loke.dev) · [GitHub Marketplace](https://github.com/marketplace/actions/flarecheck) · [Report a finding](https://github.com/loke-dev/flarecheck/issues)\n\nFlareCheck catches Cloudflare configuration risks that builds and type checks\ncannot see: committed secrets, non-inherited environment bindings, ambiguous\ndeployment commands, stale compatibility dates, and missing observability.\n\n```console\n$ npx flarecheck\n\nFlareCheck v0.9.0\n/work/api/wrangler.jsonc\n\nProduction readiness: 72/100\n\n✗ ERROR FC003  Likely secret committed as API_KEY\n  vars.API_KEY looks sensitive and will be stored in source control.\n  Fix: Remove API_KEY from vars and store it with \"wrangler secret put API_KEY\".\n\n! WARNING FC005  staging is missing non-inherited bindings\n  d1_databases is defined at the root but not in env.staging.\n  Fix: Declare the intended d1_databases values inside env.staging.\n```\n\n## Run it\n\nFlareCheck supports `wrangler.jsonc`, `wrangler.json`, and `wrangler.toml`.\n\n```sh\nnpx flarecheck\nnpx flarecheck ./apps/api\nnpx flarecheck --json\nnpx flarecheck --strict\nnpx flarecheck --list-rules\nnpx flarecheck --only FC003,FC005\nnpx flarecheck . --all\nnpx flarecheck --sarif \u003e flarecheck.sarif\n```\n\nExit codes are designed for CI:\n\n- `0`: no errors, and no warnings when `--strict` is enabled\n- `1`: invalid configuration, or warnings with `--strict`\n- `2`: production-readiness errors\n\n### GitHub Actions\n\nUse the reusable action to turn findings into file annotations and fail the\nworkflow on errors or warnings:\n\n```yaml\n- uses: actions/checkout@v6\n- uses: loke-dev/flarecheck@v0.9.0\n```\n\nInputs support focused and monorepo scans:\n\n```yaml\n- uses: loke-dev/flarecheck@v0.9.0\n  with:\n    path: apps\n    all: true\n    only: FC003,FC005,FC009\n```\n\nThe action runs the public npm package and accepts `path`, `strict`, `all`,\n`only`, `ignore`, and `version`. Findings point to the relevant Wrangler or\n`package.json` line. The `strict` and `all` inputs accept only `true` or `false`\nso configuration mistakes fail visibly. To use the CLI directly instead:\n\n```yaml\n- name: Check Worker configuration\n  run: npx flarecheck --github --strict\n```\n\n### Adopt rules incrementally\n\nList the stable rule IDs, run a focused subset, or temporarily skip rules that\nare not relevant to a project:\n\n```sh\nnpx flarecheck --list-rules\nnpx flarecheck --only FC003,FC005\nnpx flarecheck --ignore FC002\n```\n\n`--only` and `--ignore` are mutually exclusive, reject unknown rule IDs, and\naccept comma-separated IDs case-insensitively.\n\n### Scan a monorepo\n\nUse `--all` to recursively discover and scan every Wrangler configuration below\na directory. Common generated directories are skipped, including framework\noutput from Astro, Next.js, Nuxt, SvelteKit, and Vercel.\n\n```sh\nnpx flarecheck . --all\nnpx flarecheck ./apps --all --github --strict\nnpx flarecheck . --all --json\n```\n\nHuman output includes every Worker and an aggregate summary. JSON returns a\n`projects` array, while GitHub output annotates each configuration file.\n\n### Upload results to GitHub Code Scanning\n\nFlareCheck can produce SARIF 2.1.0 for GitHub Code Scanning and compatible\nanalysis dashboards:\n\n```yaml\npermissions:\n  contents: read\n  security-events: write\n\nsteps:\n  - uses: actions/checkout@v6\n  - name: Generate FlareCheck SARIF\n    run: npx flarecheck --sarif \u003e flarecheck.sarif\n    continue-on-error: true\n  - name: Upload FlareCheck results\n    uses: github/codeql-action/upload-sarif@v4\n    with:\n      sarif_file: flarecheck.sarif\n```\n\nUse `--all --sarif` to combine every Worker in a monorepo into one standards-based\nreport. FlareCheck includes rule metadata, severity, file locations, fixes, and\nstable fingerprints.\n\n## Checks\n\n[Full rule reference with examples and fixes](https://flarecheck.loke.dev/rules)\n\n| Rule | Check |\n| --- | --- |\n| `FC001` | Compatibility date exists, is valid, and is not stale |\n| `FC002` | `nodejs_compat` is enabled |\n| `FC003` | Likely secrets are not committed in `vars` |\n| `FC004` | Workers observability and sampling are intentional |\n| `FC005` | Every environment declares its non-inherited bindings, including current AI, secrets, streaming, and VPC families |\n| `FC006` | Deployment scripts select a configured environment |\n| `FC007` | Wrangler uses Cloudflare's recommended JSONC format |\n| `FC008` | Non-production environments do not share stateful production resources |\n| `FC009` | Routed Workers give every named environment an explicit target |\n\nRules are deterministic, documented, and designed to favor useful findings over\nvolume. FlareCheck never uploads source code or requires Cloudflare credentials.\n\n## Development\n\n```sh\npnpm install\npnpm check\npnpm dev -- ./tests/fixtures/risky\npnpm site:dev\n```\n\n## Contributing\n\nRules must point to authoritative Cloudflare documentation, include a fixture,\nand explain the production consequence. Please open an issue before implementing\na broad or framework-specific rule.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floke-dev%2Fflarecheck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floke-dev%2Fflarecheck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floke-dev%2Fflarecheck/lists"}