3 min read

Biome Config

config biome

v1

// biome.json (v1)
{
  "$schema": "https://biomejs.dev/schemas/1.9.1/schema.json",
  "organizeImports": {
    "enabled": true
  },
  "formatter": {
    "indentStyle": "space"
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "a11y": {
        "useSemanticElements": "error"
      },
      "complexity": {
        "noExcessiveCognitiveComplexity": "error",
        "noUselessStringConcat": "error",
        "noUselessUndefinedInitialization": "error",
        "useSimplifiedLogicExpression": "error",
        "noVoid": "warn"
      },
      "correctness": {
        "noUnusedImports": "error",
        "noUnusedVariables": "error",
        "noUnusedFunctionParameters": "error",
        "useHookAtTopLevel": "error"
      },
      "nursery": {
        "noDuplicateElseIf": "error"
      },
      "performance": {
        "noBarrelFile": "error",
        "useTopLevelRegex": "error"
      },
      "style": {
        "noDefaultExport": "error",
        "useBlockStatements": "error",
        "useCollapsedElseIf": "error",
        "useDefaultSwitchClause": "error",
        "useConsistentArrayType": {
          "level": "error",
          "options": {
            "syntax": "generic"
          }
        },
        "useFilenamingConvention": {
          "level": "error",
          "options": {
            "filenameCases": ["kebab-case"]
          }
        }
      },
      "suspicious": {
        "noConsole": "error",
        "noConsoleLog": "error",
        "noEmptyBlockStatements": "error",
        "useAwait": "error"
      }
    }
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "single"
    }
  },
  "overrides": [
    {
      "includes": ["src/lib/pages/**/index.tsx", "src/*.ts", "*.ts"],
      "linter": {
        "rules": {
          "style": {
            "noDefaultExport": "off"
          }
        }
      }
    },
    {
      "includes": ["src/routes/**/*"],
      "linter": {
        "rules": {
          "style": {
            "useFilenamingConvention": "off"
          }
        }
      }
    }
  ]
}

v2 (Beta)

// biome.json (v2 beta)
{
  "$schema": "https://biomejs.dev/schemas/2.0.0-beta.6/schema.json",
  "vcs": {
    "enabled": false,
    "clientKind": "git",
    "useIgnoreFile": false
  },
  "files": {
    "ignoreUnknown": false,
    "includes": [
      "src/**/*",
      "!turbo",
      "*.config.ts"
    ]
  },
  "formatter": {
    "enabled": true,
    "indentStyle": "space"
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "a11y": {
        "useSemanticElements": "error"
      },
      "complexity": {
        "noExcessiveCognitiveComplexity": "error",
        "noUselessStringConcat": "error",
        "noUselessUndefinedInitialization": "error",
        "useSimplifiedLogicExpression": "error",
        "noVoid": "warn"
      },
      "correctness": {
        "noUnusedImports": "error",
        "noUnusedVariables": "error",
        "noUnusedFunctionParameters": "error",
        "useHookAtTopLevel": "error"
      },
      "performance": {
        "noBarrelFile": "error",
        "useTopLevelRegex": "error"
      },
      "style": {
        "noDefaultExport": "error",
        "useBlockStatements": "error",
        "useCollapsedElseIf": "error",
        "useDefaultSwitchClause": "error",
        "useConsistentArrayType": {
          "level": "error",
          "options": {
            "syntax": "generic"
          }
        },
        "useFilenamingConvention": {
          "level": "error",
          "options": {
            "filenameCases": ["kebab-case"]
          }
        }
      },
      "suspicious": {
        "noDuplicateElseIf": "error",
        "noConsole": {
          "level": "error",
          "options": {
            "allow": ["error", "info"]
          }
        },
        "noEmptyBlockStatements": "error",
        "useAwait": "error"
      }
    }
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "single"
    }
  },
  "overrides": [
    {
      "includes": ["src/lib/pages/**/index.tsx", "src/*.ts", "*.ts"],
      "linter": {
        "rules": {
          "style": {
            "noDefaultExport": "off"
          }
        }
      }
    },
    {
      "includes": ["src/routes/**/*"],
      "linter": {
        "rules": {
          "style": {
            "useFilenamingConvention": "off"
          }
        }
      }
    }
  ],
  "assist": {
    "enabled": true,
    "actions": {
      "source": {
        "organizeImports": {
          "level": "on",
          "options": {
            "groups": [
              [":URL:", ":NODE:", ":PACKAGE:"],
              ":BLANK_LINE:",
              [":ALIAS:"],
              ":BLANK_LINE:",
              [":PATH:"]
            ]
          }
        }
      }
    }
  }
}