dprintlisted
Install: claude install-skill virajp/ai-plugins
# dprint — the repo formatter
**One formatter, one config, at the repo root.** dprint owns whitespace and
layout across every language in the repo; the linter owns correctness. Keeping
them apart is the rule — a formatting rule in the linter and a correctness rule
in dprint each cost more than they save, and the two then fight over the same
line.
In a monorepo the root config is the config. Symlink it into members that need
one rather than forking it; a per-member config is how two files in one repo end
up formatted differently.
## The config, and what each key is for
```jsonc
{
"includes": ["**/*.ts", "**/*.json", "**/*.md", "**/*.toml"],
"excludes": ["**/node_modules/", "**/dist/", "**/*-lock.yaml"],
"markdown": { "lineWidth": 80 },
"exec": {
"commands": [
{ "command": "taplo fmt --config .config/taplo.toml -", "exts": ["toml"] }
]
},
"plugins": ["https://plugins.dprint.dev/typescript-0.0.0.wasm"]
}
```
- **`plugins` are pinned by version in the URL.** Unpinned, the same commit
formats differently on two machines and the diff is attributed to whoever
committed second.
- **`excludes` must cover every generated tree** — build output, lockfiles,
vendored code, and anything a renderer writes. Formatting generated output is
a permanent, meaningless diff and it breaks any check asserting the output
matches a fresh generation.
- **`exec` is the escape hatch** for a language dprint has no plugin for: it
pipes the file through an external f