Skip to content

Replace prettier + eslint with Biome in TypeScript packages #105

@mgoldsborough

Description

@mgoldsborough

mpak's TS packages currently use prettier for formatting and eslint for linting. The rest of NimbleBrain's TS code (nimblebrain/code, the in-tree synapse-app servers) standardized on Biome — single binary, single config, faster, no plugin hairball.

Today's hairball:

  • apps/web, apps/registry, packages/sdk-typescript, packages/cli, packages/schemas all carry separate eslint + prettier setups.
  • A separate "Format check" CI job (the one that just blocked PR feat(registry): compose ServerDetail from manifest, mount /v1/servers #100) wraps prettier in pnpm --filter ... exec prettier --check.
  • New contributors hit two competing formatters between this repo and the rest of the org.

Migration

  1. Add @biomejs/biome as a workspace devDep at the root.
  2. Drop a biome.json mirroring NimbleBrain's settings (2-space indent, single quotes, trailing commas — match prettier's current output to avoid a one-shot reformat churn the first time).
  3. Replace per-package lint / format:check / format scripts with biome check / biome format.
  4. Drop the prettier + eslint devDeps + their config files (.prettierrc, eslint.config.js).
  5. Update .github/workflows/test.yml — replace the Format check job with biome ci.
  6. Update CONTRIBUTING.md and per-package CLAUDE.md files where they reference prettier or eslint.
  7. Run biome check --write once to normalize the tree, commit as a separate "style: biome reformat" commit so the substantive history stays grep-able.

Why now

  • Removes the inconsistency between this repo and nimblebrain/code — same tooling everywhere makes context-switching cheap.
  • Kills one CI job (Format check folds into lint).
  • One config file replaces ~6 scattered configs.

Open questions

  • The Python side stays on ruff (already standard); only the TS packages migrate.
  • apps/scanner is Python — out of scope.
  • Some legacy lint rules in eslint.config.js (custom unused-import handling) need a mapping check; biome covers most of them, may be a few stragglers worth flagging.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpkg/registryRegistry API serverpkg/sdk-typescriptTypeScript SDK (@nimblebrain/mpak-sdk)pkg/webWeb UI (app.mpak.dev)refactorCode restructuring without behavior changes

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions