Derived Modular Arch
Tooling

Biome

GritQL heuristics from @derived-modular/biome-plugin for Biome projects.

@derived-modular/biome-plugin adds four DMA architectural rules to Biome via GritQL patterns. Convenient if Biome is already your sole linter and formatter.

This is best-effort: the plugin looks at import strings, it does not build a full graph. The ESLint plugin is more accurate — it uses @derived-modular/boundaries and proper path resolution.

You still need dma check in CI.

Installation

npm install -D @derived-modular/biome-plugin

Configuration

// biome.jsonc
{
  "extends": ["@derived-modular/biome-plugin"],
  "files": {
    "includes": ["**", "!dist"]
  }
}

The plugin enables four GritQL rules: layer-direction, feature-to-feature, public-api, no-barrel.

Coverage

RuleBiomeESLintdma check
layer-directionheuristic
feature-to-featureheuristic
public-apiheuristic
no-barrelheuristic
no-cycle
inbound predicates

Limitations

No import resolution. The plugin matches @/ and relative path patterns but does not fully read tsconfig aliases. Complex aliases may slip through or cause false positives.

Grit plugin paths resolve from the project root (./node_modules/@derived-modular/biome-plugin/...). Works reliably in flat node_modules (npm, bun); in some monorepo / PnP layouts Biome is still improving shared-config support.

No graph rules. Cycles and "feature with inbound → service" — CLI only.

If you can choose — use the ESLint plugin. Keep Biome for teams already fully on Biome and willing to accept heuristics.

When it fits

SituationRecommendation
Biome is the unified toolchainbiome-plugin + dma check in CI
Already have ESLintESLint for DMA instead of Biome
Need maximum editor accuracyESLint, not Biome

Example config — examples/vue-vite/biome.jsonc.

What's next

On this page