Shareable Prettier configuration with plugin support.
- 🎯 Consistent formatting across projects
- 🚀 Bun and Node.js 18+ support
- 🎨 Tailwind CSS class sorting
- 📦 Optional plugins for XML, SVG, package.json, shell scripts, and more
- 🔧 Full TypeScript definitions
# Bun
bun add -d @kjanat/prettier-config prettier
bun pm pkg set prettier="@kjanat/prettier-config"Other package managers
# npm
npm install --save-dev @kjanat/prettier-config prettier
npm pkg set prettier="@kjanat/prettier-config"# pnpm
pnpm add --save-dev @kjanat/prettier-config prettier
pnpm config set --location=prettier "@kjanat/prettier-config"# yarn
yarn add @kjanat/prettier-config prettier --dev
yarn config set prettier "@kjanat/prettier-config"Add to package.json:
{ "prettier": "@kjanat/prettier-config" }Or create .prettierrc:
"@kjanat/prettier-config"
Create prettier.config.mjs:
import prettierConfig from "@kjanat/prettier-config";
/** @satisfies {Config} */
export default { ...prettierConfig, semi: false, printWidth: 100 };Or with TypeScript (prettier.config.ts):
import type { Config } from "prettier";
import prettierConfig from "@kjanat/prettier-config";
export default { ...prettierConfig, semi: false } satisfies Config;- @prettier/plugin-xml: XML and SVG formatting
- prettier-plugin-go-template: Go templates
- prettier-plugin-nginx: Nginx configs
- prettier-plugin-pkg: Sorts package.json
- prettier-plugin-prisma: Prisma schemas
- prettier-plugin-sh: Shell scripts
- prettier-plugin-tailwindcss: Sorts Tailwind classes
- prettier-plugin-toml: TOML files
CSS,HTML,XMLuse tabsSVGusesHTMLparser for better whitespace handlingMarkdownwraps atprintWidthXML:- Sort attributes by key
- Single attribute per line
{
objectWrap: "collapse",
experimentalTernaries: true,
overrides: [
// CSS, HTML, XML use tabs
{ files: ["*.css"], options: { useTabs: true } },
{ files: ["*.html"], options: { useTabs: true } },
// SVG uses HTML parser for better whitespace handling
{
files: ["*.svg"],
options: {
parser: "html",
useTabs: true,
htmlWhitespaceSensitivity:"ignore",
}
},
// Markdown wraps at printWidth
{ files: ["*.md"], options: { proseWrap: "always" } },
// XML formatting
{
files: ["*.xml"],
options: {
parser: "xml",
useTabs: true,
singleAttributePerLine: true,
xmlSortAttributesByKey: true
}
}
]
}Notable:
- SVG files: Use HTML parser instead of XML for better inline SVG handling
- Markdown: Prose wraps at
printWidth(override withproseWrap: "preserve"if needed)
Configure custom utility functions:
import type { PluginOptions } from "prettier-plugin-tailwindcss";
import prettierConfig from "@kjanat/prettier-config";
/**
* @satisfies {PluginOptions}
* @see https://github.com/tailwindlabs/prettier-plugin-tailwindcss
*/
const tailwindOptions = {
tailwindFunctions: ["cn", "clsx", "tw"],
};
/** @satisfies {Config} */
export default {
...prettierConfig,
...tailwindOptions
};| Environment | Version | Support |
|---|---|---|
| Bun | ≥1.0.0 | ✅ |
| Node.js | ≥18.0.0 | ✅ |
Module System: ESM only
bun run build # Build package
bun typecheck # Type checking
bun run format # Format codePlugins are peer dependencies. Install required plugins:
bun add -d @prettier/plugin-xml prettier-plugin-tailwindcss- ESM: Add
"type": "module"topackage.json - CommonJS: Use
.cjsextension for config - TypeScript: Set
moduleResolutionto"bundler"or"node16"
Contributions welcome! Submit a PR:
- Fork repository
- Create feature branch
- Commit changes
- Push and open PR
MIT © kjanat