@zayne-labs/prettier-config package provides a modular Prettier configuration with automatic plugin detection, refined sorting logic, and seamless integration with modern frameworks.
Features
Modular Factory
Toggle features like Tailwind, Astro, and Import Sorting individually
Smart Import Sorting
Distance-based sorting from URLs to local paths
Tailwind v4 Ready
Support for tailwindStylesheet and advanced class sorting
Auto-Installation
Prompts to install missing plugins when needed
Installation
Usage
The package exports a factory functionzayne that combines configuration segments:
prettier.config.js
Configuration Options
Base Options
Thezayne factory accepts an options object:
Opinionated base defaults for consistent formatting.
Enables
@ianvs/prettier-plugin-sort-imports with distance-based sorting.Enables Tailwind and ClassNames plugins for class sorting.
Enables
prettier-plugin-astro for Astro component formatting.Basic Example
prettier.config.js
Import Sorting
Default Sorting Rules
WhensortImports is enabled (default), imports are organized by “distance” from the current file:
- User patterns: Custom patterns passed via
importOrder(highest priority) - URLs: Remote modules (e.g.,
https://esm.sh/...) - Protocols: Built-in protocols (
node:,bun:,jsr:,npm:) - Packages: Third-party npm packages (e.g.,
react,lodash) - Aliases: Local aliases (
@/,#,~,$,%) - Paths: Relative and absolute file paths (excluding CSS)
- CSS: Style files (lowest priority)
Example Sorted Imports
Custom Import Order
Override the default sorting with custom patterns:prettier.config.js
Tailwind CSS Support
The Tailwind integration combines three plugins for comprehensive class handling:prettier-plugin-tailwindcss: Sorts Tailwind classesprettier-plugin-classnames: Multi-line formatting & attribute supportprettier-plugin-merge: Ensures plugins work together
Basic Tailwind Setup
prettier.config.js
Advanced Tailwind Configuration
prettier.config.js
Tailwind Options
Additional attributes to sort Tailwind classes in.
Functions to sort Tailwind classes in.
Path to your CSS entry point (Tailwind v4 feature).
Criterion for ending class names on line wraps.
Auto-transform non-expression classes to expression syntax when wrapping.
Tailwind with Custom Functions
Astro Support
Enable Prettier formatting for Astro components:prettier.config.js
Extending Configuration
Merge additional configuration objects:prettier.config.js
The factory intelligently merges arrays (plugins, overrides) without duplicates. Later configs override earlier ones for scalar values.
Plugin Auto-Installation
This config uses a lazy-loading approach to avoid bloatingnode_modules with unused plugins.
How It Works
- When you enable a feature (e.g.,
astro: true), the config checks if required plugins are installed - If missing, Prettier will prompt you to auto-install when running
prettier --write . - Plugins are only added as peer dependencies, not bundled
Example Prompt
Complete Example
A real-world configuration for a Next.js project with Tailwind:prettier.config.js
package.json
Deduplication
The factory automatically deduplicates:- Plugins array: Removes duplicate plugin names
- Overrides array: Merges overrides with the same file patterns
- Object values: Later configs override earlier ones
FAQ
Can I disable import sorting?
Can I disable import sorting?
Yes, set
sortImports: false in the factory options:How do I use with ESLint?
How do I use with ESLint?
This config works alongside ESLint. Use
@zayne-labs/eslint-config for linting, and this package for formatting. Prettier focuses on code style, ESLint on code quality.Why aren't plugins included as dependencies?
Why aren't plugins included as dependencies?
Plugins are peer dependencies to keep the package lightweight. You only install what you use, and the config prompts you when needed.
Can I use this in a monorepo?
Can I use this in a monorepo?
Yes! Place the config in your root and reference it from workspace packages, or create a shared config package that extends this one.
