Product

Turn static legacy ESLint config into a flat-config starting point

A proof-first workflow for the narrow static-config subset: .eslintrc JSON/YAML, package.json eslintConfig, and simple ignore migration. Dynamic JS config logic stays out of the automatic path.

Start here

Use the proof page to qualify static-config fit before this is listed.

The public package identifies whether a repo belongs in the deterministic static-config subset; checkout is not listed for this product yet.

  • Local workflow with no repo upload.
  • Source-linked findings and manual guidance; no automatic edits.
  • Manual-review findings stay visible instead of hidden.

Checkout is not listed yet.

Trust boundary

Scope and validation

  • Run on a branch and review the documented scope before applying changes.
  • The public repo is scanner-first and does not expose the full paid apply engine.
  • Examples establish only the cases shown. Run your own application tests before merging.

What this fixes

  • Static .eslintrc JSON or YAML config discovery.
  • package.json eslintConfig discovery for repos that have not moved to flat config.
  • Simple ignore-pattern migration candidates.
  • Manual-review findings for JS config logic, multiple config sources, existing flat config, and negated ignores.

What this proof includes

  • Public scanner and proof page for static legacy ESLint config fit.
  • Commercial-case notes for the FlatCompat bridge subset.
  • Planned commercial deliverable: generated eslint.config.cjs and dependency guidance for supported static configs.
  • Fail-closed reporting when the repo does not fit the static subset.

Example before/after

See the deliverable shape before it is listed.

Illustrative output format: sample counts and validation results below are not a run on your repository. Use the linked proof artifacts for recorded evidence. You can also make changes manually using the free report and migration guides.

Local command

python -m pip install "https://github.com/zippertools/sqlalchemy-14-to-20-codemod/archive/refs/tags/v0.1.2.zip#subdirectory=products/flatconfig-lift"
python -m flatconfig_lift.cli path/to/repo --report migration-report.json

If installation fails, retry from the GitHub quickstart or contact support at support@zippertools.org.

Sample report

Scan complete
supported_static_configs: 1
manual_review_findings: 2
files_uploaded: 0
next_step: generate FlatCompat bridge in paid pack

Before/after diff preview

- .eslintrc.json
+ eslint.config.cjs

+ const { FlatCompat } = require("@eslint/eslintrc");
+ const legacyConfig = require("./.eslintrc.json");
+ const compat = new FlatCompat({ baseDirectory: __dirname });
+ module.exports = [...compat.config(legacyConfig)];

The public page is proof-first today; the commercial shape is a generated FlatCompat bridge for supported static configs.

PatternBehavior
static .eslintrc JSON/YAMLrewrite
package.json eslintConfigrewrite
.eslintignoremigrate when simple
.eslintrc.js logicmanual review

Apply output

proof output
static_configs_detected: 1
generated_preview: eslint.config.cjs
manual_review_findings: 2
checkout_status: not listed

Validation summary

validation summary
json_yaml_parse: passed
js_config_guard: passed
existing_flat_config_guard: passed
overall: proof-only fit signal

Final manager summary

final manager summary
Decision: proof-only today, no checkout listed.
Use when static config dominates.
Do not use for JS config logic.

Use this if

  • Your repo still uses a static .eslintrc JSON/YAML file or package.json eslintConfig.
  • You want the first flat-config bridge pass before hand-tuning plugin behavior.
  • You are comfortable treating JS-backed config and plugin-specific behavior as manual review.

Public proof and fit signals

  • Public proof covers static JSON and YAML configs from real public repos.
  • JS configs and existing flat config files are blocked instead of guessed through.
  • The bridge output stays close to the source config with machine-generated reporting.

Do not use this if

  • Repos built around .eslintrc.js, .cjs, or .mjs logic.
  • Repos that already migrated to eslint.config.*.
  • Teams that want the tool to understand arbitrary plugin ecosystem behavior.

How delivery works

  • Use the public README and proof page today; no checkout is listed for this product.
  • Run the scanner locally to decide whether the repo is in the static-config subset.
  • When listed, delivery should follow the same local ZIP workflow as the paid cleanup packs.

Refund/support note

No purchase is available from this page yet, so there is no paid refund path. Use the proof, README, and contact link for fit questions.

Support: support@zippertools.org

Related fixes

Exact-problem guides for this product

How to migrate .eslintrc to eslint.config.cjs with FlatCompatConvert static .eslintrc JSON or YAML into eslint.config.cjs without executing JS logic.How to migrate package.json eslintConfig to flat configConvert static package.json eslintConfig blocks into flat config without evaluating JS.Why .eslintrc.js is a manual-review case for flat config migrationUnderstand why JS-backed ESLint configs are out of scope for deterministic flat-config migration.How to move .eslintignore patterns into flat configCarry straightforward .eslintignore and ignorePatterns entries into flat config while keeping the hard cases explicit.Why negated ignore patterns need manual review in flat config migrationUnderstand why negated ignore rules belong in manual review instead of a guessed flat-config translation.Why multiple legacy ESLint config sources block flat config migrationIf a repo has more than one legacy ESLint config source, the deterministic migration path should stop for manual review.What to do when eslint.config.* already existsIf the repo already has eslint.config.js, .cjs, or .mjs, the static legacy-config migration path should stop for manual review.How to migrate env and globals settings to ESLint flat configMove env and globals from legacy config into the flat config languageOptions object.How to migrate ESLint overrides to flat config arraysOverrides in legacy config become separate array elements in flat config.How to migrate parserOptions to ESLint flat configMove parserOptions into languageOptions.parserOptions in flat config.