Skip to content

feat: separate linter category and add ESLint support#74

Merged
plvo merged 25 commits intomainfrom
feat/linter-eslint
Feb 12, 2026
Merged

feat: separate linter category and add ESLint support#74
plvo merged 25 commits intomainfrom
feat/linter-eslint

Conversation

@plvo
Copy link
Owner

@plvo plvo commented Feb 12, 2026

Summary

  • Separates linters from tooling extras into a dedicated linter category with single selection
  • Adds ESLint 9 flat config as an alternative to Biome
  • Moves Biome from tooling to linter category (tooling now only has Husky)

ESLint architecture

  • Turborepo: Shared packages/eslint-config package with per-stack exports (base, next, react, react-native, server). Per-app eslint.config.mjs files use thin imports from the shared package.
  • Single repo: Full inline ESLint config per stack, all deps in root package.json
  • Stack-specific configs via template stack suffixes (eslint.config.mjs.nextjs.hbs)

Changes

  • MetaProject and ProjectContext types: add linter field
  • META.project: add linter category (biome moved from tooling, eslint added)
  • Template resolver: add resolveStackSpecificAddonTemplates for stack-suffix project addon templates
  • Package JSON generator: linter handling for app, root, and shared package generation
  • CLI, flags, summary: --linter flag, prompt handling, display
  • Handlebars has helper: add linter case
  • 9 new ESLint template files (5 shared configs + 4 per-app stack configs)

Test plan

  • ESLint + single repo + Next.js: inline config, all deps in root package.json
  • ESLint + turborepo + Next.js + Hono: shared package with exports, thin app imports
  • ESLint + turborepo + all 4 stacks: correct config per stack
  • Biome + single repo: biome.json, deps, scripts all present
  • Biome + turborepo: root-scoped biome, no biome in app deps
  • --linter invalid flag validation: error with available options
  • Interactive mode: linter prompt appears between ORM and tooling
  • No linter selected: no eslint/biome files or deps generated

@vercel
Copy link

vercel bot commented Feb 12, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
create-faster-www Ready Ready Preview, Comment Feb 12, 2026 3:20pm

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a first-class linter project category (single selection) to separate linters from other tooling extras, and adds ESLint 9 flat config support alongside Biome. It updates the CLI flow/flags, template resolution to support stack-suffixed project addon templates, and package.json generation for both single-repo and turborepo outputs.

Changes:

  • Add linter to project metadata/types and wire it through CLI prompts, --linter flag parsing, and the TUI summary output.
  • Add stack-suffix support for project addon templates and generate per-stack eslint.config.mjs files plus a shared packages/eslint-config (turborepo).
  • Update package.json generation to install/configure Biome/ESLint appropriately across single vs turborepo layouts.

Reviewed changes

Copilot reviewed 21 out of 21 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
apps/cli/src/__meta__.ts Adds the new linter category (Biome + ESLint) and moves Biome out of tooling.
apps/cli/src/types/meta.ts Extends MetaProject to include linter.
apps/cli/src/types/ctx.ts Extends ProjectContext to include linter?: string.
apps/cli/src/lib/handlebars.ts Adds has("linter", ...) support for templates.
apps/cli/src/lib/template-resolver.ts Adds stack-suffix project-addon template resolution and linter template collection.
apps/cli/src/lib/package-json-generator.ts Adds linter-aware package.json generation for apps/root/packages.
apps/cli/src/flags.ts Adds --linter flag and validation.
apps/cli/src/cli.ts Wires interactive prompt handling + display output for linter.
apps/cli/src/tui/summary.ts Includes linter in the “recreate command” and summary structure display.
apps/cli/templates/project/linter/biome/biome.json.hbs Updates Biome schema version to match the dependency bump.
apps/cli/templates/project/linter/eslint/* Adds shared ESLint config templates + per-stack eslint.config.mjs templates.
.claude/CLAUDE.md Updates internal documentation to reflect the new linter category and flags.
docs/plans/2026-02-12-linter-eslint.md Adds an implementation plan document for the linter separation + ESLint support work.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Add getPackageManager() to resolve pm version via execSync. Turborepo
root and single repo package.json now include the packageManager field.
Tighten param type to NonNullable<PackageManager>.

Also: update Next.js tsconfig (react-jsx, dev types), delete plan file.
Biome's lint script was overwriting turbo lint in turborepo root.
Also scan addon directory once instead of per-app for stack-specific templates.
… root

Biome v2 handles monorepos natively from root — lint/format/check
scripts should overwrite turbo equivalents since biome doesn't need
per-app orchestration like ESLint does.
Replaces hardcoded switch with dynamic ProjectContext lookup so new
categories don't require updating the helper.
plvo added 2 commits February 12, 2026 16:17
- Move Biome docs from extras/ to linter/, add `check` script, update schema
- Create ESLint docs with stack configs, single/turborepo modes
- Split sidebar into LINTERS and EXTRAS sections
- Remove project-specific ignores from biome.json template
- Replace old --extras flag with --linter and --tooling
- Add TanStack Start to frameworks list
- Separate linters from dev tools in features
@plvo plvo merged commit e5b0236 into main Feb 12, 2026
5 checks passed
@plvo plvo deleted the feat/linter-eslint branch February 12, 2026 15:22
@github-actions github-actions bot mentioned this pull request Feb 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant