npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dunggramer/biomejs-config

v1.1.3

Published

The shareable configuration for Biome in your project

Readme

@dunggramer/biomejs-config

Shareable Biome configuration for JavaScript, TypeScript, and React projects

npm version License: MIT CI

A comprehensive, opinionated Biome configuration that provides consistent code formatting and linting rules for modern JavaScript and TypeScript projects. This configuration emphasizes code quality, security, and maintainability while remaining flexible enough to customize for your specific needs.

Features

  • 🎯 Opinionated but flexible - Sensible defaults with easy customization
  • ⚡️ Fast - Powered by Biome's Rust-based tooling
  • 🔒 Security-focused - Strict rules for common security pitfalls
  • 📦 React-ready - Includes React-specific linting rules
  • 🧪 Test-friendly - Special configurations for test files
  • 🎨 Consistent formatting - 2 spaces, single quotes, trailing commas
  • 💅 CSS/Tailwind support - Full CSS formatting with Tailwind directives
  • 🤖 Auto-organize - Imports, attributes, and class names sorted automatically
  • 📝 Multi-language - JavaScript, TypeScript, CSS, HTML, JSON/JSONC support

Installation

Install the package along with Biome:

# Using npm
npm install -D @dunggramer/biomejs-config @biomejs/biome

# Using pnpm
pnpm add -D @dunggramer/biomejs-config @biomejs/biome

# Using yarn
yarn add -D @dunggramer/biomejs-config @biomejs/biome

Quick Start

Create a biome.jsonc file in your project root:

{
  "$schema": "https://biomejs.dev/schemas/latest/schema.json",
  "extends": ["@dunggramer/biomejs-config"]
}

Add scripts to your package.json:

{
  "scripts": {
    "format": "biome format --write .",
    "lint": "biome lint .",
    "check": "biome check --write ."
  }
}

That's it! Your project is now configured with comprehensive formatting and linting rules.

VSCode Integration

For the best developer experience, install the Biome VSCode extension and configure your .vscode/settings.json:

{
  // Enable Biome as the default formatter
  "editor.defaultFormatter": "biomejs.biome",

  // Format on save
  "editor.formatOnSave": true,

  // Auto-fix on save
  "editor.codeActionsOnSave": {
    "source.organizeImports.biome": "explicit",
    "source.fixAll.biome": "explicit",
    "quickfix.biome": "explicit",
    "addMissingImports": "explicit",
    "source.action.useSortedAttributes.biome": "explicit",
    "source.action.useSortedProperties.biome": "explicit",
  },

  // Disable other formatters to avoid conflicts
  "[javascript]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[javascriptreact]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[typescript]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[json]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[jsonc]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[css]": {
    "editor.defaultFormatter": "biomejs.biome"
  }
}

Recommended Customizations for Your Project

Depending on your project type and team preferences, you may want to customize these settings:

1. VCS Branch Name

If your repository uses master instead of main (or another branch):

{
  "extends": ["@dunggramer/biomejs-config"],
  "vcs": {
    "defaultBranch": "master"  // or "develop", "trunk", etc.
  }
}

2. Console Usage

The default allows console.log. For production apps, you may want stricter rules:

{
  "extends": ["@dunggramer/biomejs-config"],
  "linter": {
    "rules": {
      "suspicious": {
        "noConsole": "error"  // Block all console usage
        // Or allow specific methods:
        // "noConsole": { "level": "error", "options": { "allow": ["warn", "error"] } }
      }
    }
  }
}

3. Default Exports

If your team prefers named exports everywhere:

{
  "extends": ["@dunggramer/biomejs-config"],
  "linter": {
    "rules": {
      "style": {
        "noDefaultExport": "error"  // Enforce named exports
      }
    }
  },
  // Keep overrides for config files that require default exports
  "overrides": [
    {
      "includes": ["**/*.config.*", "**/vite.config.ts", "**/*.stories.*"],
      "linter": {
        "rules": {
          "style": { "noDefaultExport": "off" }
        }
      }
    }
  ]
}

4. TypeScript Strictness

For stricter TypeScript projects:

{
  "extends": ["@dunggramer/biomejs-config"],
  "linter": {
    "rules": {
      "suspicious": {
        "noExplicitAny": "error"  // Block 'any' type
      },
      "style": {
        "noNonNullAssertion": "error"  // Block '!' assertions
      }
    }
  }
}

5. Line Width

For larger displays or narrower code style:

{
  "extends": ["@dunggramer/biomejs-config"],
  "formatter": {
    "lineWidth": 120  // Or 80 for more conservative
  },
  "css": {
    "formatter": {
      "lineWidth": 120  // Keep CSS in sync
    }
  }
}

6. Import Restrictions

Prevent barrel file imports or enforce modular lodash:

{
  "extends": ["@dunggramer/biomejs-config"],
  "linter": {
    "rules": {
      "style": {
        "noRestrictedImports": {
          "level": "error",
          "options": {
            "paths": {
              "lodash": "Use lodash/<name> instead.",
              "lodash-es": "Use lodash-es/<name> instead.",
              "@/utils": "Import specific utilities, not the barrel file.",
              "moment": "Use date-fns or dayjs instead."
            }
          }
        }
      }
    }
  }
}

7. Environment-Specific Overrides

Different rules for different file types:

{
  "extends": ["@dunggramer/biomejs-config"],
  "overrides": [
    {
      "includes": ["**/scripts/**", "**/tools/**"],
      "linter": {
        "rules": {
          "suspicious": {
            "noConsole": "off"  // Allow console in scripts
          }
        }
      }
    },
    {
      "includes": ["**/*.stories.*", "**/*.story.*"],
      "linter": {
        "rules": {
          "suspicious": {
            "noExplicitAny": "off"  // Relax for Storybook files
          }
        }
      }
    }
  ]
}

8. Framework-Specific Globals

Add globals for your testing framework or environment:

{
  "extends": ["@dunggramer/biomejs-config"],
  "javascript": {
    "globals": [
      // Vitest
      "describe", "it", "expect", "vi", "beforeEach", "afterEach",
      // Jest
      "jest",
      // Node.js
      "__dirname", "__filename"
    ]
  }
}

9. Ignore Additional Directories

Project-specific build outputs or vendor code:

{
  "extends": ["@dunggramer/biomejs-config"],
  "files": {
    "ignore": [
      "**/generated/**",      // Code generation output
      "**/vendor/**",         // Third-party code
      "**/.docusaurus/**",    // Docusaurus cache
      "**/storybook-static/**" // Storybook build
    ]
  }
}

10. Disable Auto-Organize for Specific Files

Keep manual control over import/key order in certain files:

{
  "extends": ["@dunggramer/biomejs-config"],
  "overrides": [
    {
      "includes": ["**/theme.ts", "**/constants.ts"],
      "assist": {
        "actions": {
          "source": {
            "organizeImports": "off",
            "useSortedKeys": "off"
          }
        }
      }
    }
  ]
}

What's Included

Formatter Configuration

JavaScript/TypeScript

  • Indentation: 2 spaces
  • Line width: 100 characters
  • Quotes: Single quotes
  • Trailing commas: ES5 (arrays, objects)
  • Quote properties: Preserved

CSS

  • Line width: 100 characters (matches JS/TS)
  • Indentation: 2 spaces
  • Tailwind directives: Supported (@apply, @theme, etc.)
  • CSS Modules: Enabled
  • Line comments: Allowed (for tooling)

HTML

  • Self-closing void elements: Always (<br />, <img />)

JSON/JSONC

  • Indentation: 2 spaces
  • Comments: Allowed in JSONC files
  • Trailing commas: Allowed
  • TSConfig: Special handling with comments and trailing commas

Linter Rules

This configuration enables comprehensive linting across multiple categories:

Correctness Rules (Strict)

Prevents common programming errors and enforces correct code patterns:

  • No unused variables or imports
  • Proper React Hook dependencies
  • No unreachable code
  • Valid typeof checks
  • And more...

Security Rules (Strict)

Protects against common security vulnerabilities:

  • No dangerouslySetInnerHTML misuse
  • No global eval
  • Enforces secure link targets
  • XSS prevention

Style Rules (Flexible)

Enforces consistent code style:

  • Use const when possible
  • Prefer template literals
  • Shorthand array type syntax
  • Import type for TypeScript
  • And more...

Complexity Rules (Moderate)

Reduces code complexity:

  • No useless constructors or fragments
  • Optional chaining preferred
  • Literal keys over computed keys
  • And more...

Accessibility Rules (Warnings)

Ensures web accessibility:

  • Button type attributes
  • Keyboard event handlers
  • Valid anchor usage

Nursery Rules (Experimental)

Beta features for improved DX:

  • Sorted Tailwind classes: Auto-sort class names in className, classList, clsx(), cn(), cva(), tw(), twMerge() for cleaner diffs

See CONFIGURATION.md for detailed explanations of all rules.

Auto-Organize Features

The config includes intelligent code organization:

  • Auto-organize imports: Deduplicates and sorts import statements
  • Sorted JSX/HTML attributes: Normalizes attribute order for stable diffs
  • Sorted object keys: Alphabetizes object keys (where safe, see overrides)
  • Sorted type properties: Consistent ordering in TypeScript types

Special File Configurations

The config includes intelligent overrides for specific file types:

Test Files (*.test.*, *.spec.*)

  • Relaxed noExplicitAny rule for flexibility in tests

Config Files (*.config.*, vite.config.ts)

  • Allows default exports (commonly required by bundlers)

TSConfig (tsconfig.json, tsconfig.*.json)

  • Comments and trailing commas allowed
  • Object key sorting disabled (preserves manual order like compilerOptions first)

Package.json

  • Object key sorting disabled (preserves conventional order)

JSON5 Files (*.json5)

  • Double quotes enforced
  • No trailing commas (spec compliance)

Community Files (.all-contributorsrc)

  • Double quotes to match community conventions

Global Variables

Pre-configured global variables for testing:

  • Cypress: cy, Cypress, before, context, assert

VCS Integration

  • Git integration enabled
  • Respects .gitignore patterns
  • Default branch: main
  • Comprehensive ignore patterns for:
    • Dependencies: node_modules, .pnpm, .yarn, .npm
    • Build outputs: dist, build, .next, .nuxt, .svelte-kit, etc.
    • Framework-specific: .turbo, .parcel-cache, .vercel, .netlify
    • Testing artifacts: coverage, playwright-report, test-results

Usage Examples

Format your code

# Format all files
pnpm format

# Check formatting without writing
biome format .

Lint your code

# Lint with auto-fix
pnpm check

# Lint without auto-fix
pnpm lint

CI/CD Integration

# .github/workflows/ci.yml
- name: Check code quality
  run: biome ci .

Migration

Migrating from ESLint and Prettier? See our Migration Guide.

Contributing

Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.

Security

If you discover a security vulnerability, please see our Security Policy.

FAQ

See FAQ.md for frequently asked questions.

License

MIT © DungGramer

Links


Made with ❤️ by DungGramer