Conformance Tasks
xtarterize applies configuration through discrete tasks. Each task detects whether it is needed and applies changes only when necessary. Use --only <task-id> or --skip <task-id> to select tasks.
In monorepos, tasks are filtered by scope: root tasks appear only at the monorepo root, and package tasks only inside workspace packages. See the monorepo guide.
Linting and formatting
Section titled “Linting and formatting”| Task | What it does |
|---|---|
lint/biome |
Install Biome and Ultracite, write biome.json |
lint/oxlint |
Install Oxlint and Ultracite when Vite+ or an existing Oxlint config is detected; write oxlint.config.ts or update an existing oxlint.config.* (legacy .oxlintrc.json is detected but not rewritten) |
lint/oxfmt |
Install Oxfmt and Ultracite when Vite+ or an existing Oxfmt config is detected; write oxfmt.config.ts (legacy .oxfmtrc.json is detected but not rewritten) |
TypeScript
Section titled “TypeScript”| Task | What it does |
|---|---|
ts/strict |
Enable strict compiler options in tsconfig.json |
ts/paths |
Add the @/* path alias to tsconfig.json, plus baseUrl outside Next.js |
ts/incremental |
Enable incremental and tsBuildInfoFile |
gitignore/tsbuildinfo |
Ignore *.tsbuildinfo in .gitignore |
Vite plugins
Section titled “Vite plugins”| Task | What it does |
|---|---|
vite/checker |
Add vite-plugin-checker to vite.config.ts |
vite/visualizer |
Add rollup-plugin-visualizer to vite.config.ts |
| Task | What it does |
|---|---|
ci/ci |
Write a GitHub Actions workflow for lint, typecheck, and test |
ci/release |
Write a release workflow triggered by tags, or by branch/PR when Changesets is detected |
ci/auto-update |
Write a weekly dependency update workflow |
Dependencies
Section titled “Dependencies”| Task | What it does |
|---|---|
deps/renovate |
Write renovate.json |
Release
Section titled “Release”| Task | What it does |
|---|---|
release/commitlint |
Write commitlint.config.ts; the git hook runs commitlint via dlx |
release/czg |
Install czg and add a commit script |
release/cat-version |
Install commit-and-tag-version and write .versionrc |
release/git-hooks |
Install husky and wire the commit-msg, prepare-commit-msg, pre-commit, and pre-push hooks |
release/versionrc |
Write .versionrc.json with changelog sections |
Code quality
Section titled “Code quality”| Task | What it does |
|---|---|
quality/knip |
Write knip.config.ts; Knip is installed by scripts/package-scripts when it adds the knip script |
quality/lint-staged |
Install lint-staged and write .lintstagedrc.json |
quality/package-engines |
Add devEngines to package.json |
Code generation
Section titled “Code generation”| Task | What it does |
|---|---|
codegen/plop |
Install Plop and write plopfile.ts with framework-specific generators |
Monorepo
Section titled “Monorepo”| Task | What it does |
|---|---|
monorepo/turbo |
Install Turborepo and write turbo.json |
workspace/pnpm-workspace |
Add workspace globs to pnpm-workspace.yaml |
Editor
Section titled “Editor”| Task | What it does |
|---|---|
editor/vscode |
Write or merge .vscode/settings.json and .vscode/extensions.json |
| Task | What it does |
|---|---|
agent/agents-md |
Write AGENTS.md with project description and commands |
agent/skills-install |
Install agent skills for the detected stack |
The skills task selects skills using detected project capabilities. Web UI projects receive interface and motion guidance from emilkowalski/skills, jakubkrehel/skills, and addyosmani/agent-skills; Expo and React Native projects receive animate-expo, and Sonner projects receive ask-sonner. Test runner dependencies select testing skills, while API, auth, or database dependencies select security guidance from cloudflare/security-audit-skill and addyosmani/agent-skills. Detected Git, GitHub workflows, and agent instructions select matching development workflow skills. New candidates that require an explicit user request or an undetected tool are left for manual installation. Installing security-audit does not start an audit; that workflow still requires an explicit request.
Scripts
Section titled “Scripts”| Task | What it does |
|---|---|
scripts/package-scripts |
Add lint, check, fix, typecheck, and similar scripts to package.json |
scripts/npmrc |
Write .npmrc with save-exact and peer dependency settings |
All tasks are idempotent: a second run makes no changes. Each task reports one of new, patch, skip, or conflict.
Task details
Section titled “Task details”ts/strict
Section titled “ts/strict”Patches tsconfig.json with four options:
| Option | Purpose |
|---|---|
strict |
Enable all strict type-checking options |
noUnusedLocals |
Error on unused local variables |
noUnusedParameters |
Error on unused function parameters |
verbatimModuleSyntax |
Require import type for type-only imports |
Each option is checked independently. An existing option with a different value is reported as a conflict instead of being overwritten, so intentional settings are never loosened. Use --skip ts/strict to leave this task out; the other TypeScript tasks still apply.
editor/vscode
Section titled “editor/vscode”Writes or merges .vscode/settings.json and .vscode/extensions.json.
Base settings: Biome formats TS, JS, JSON, and JSONC, with format on save enabled and format on paste disabled; Biome fix and organize imports run as explicit code actions on save; non-relative import specifiers (@/ paths) with update imports on file move for TS and JS.
Detected tools add settings:
| Detected | Added |
|---|---|
| Monorepo | typescript.tsdk from the workspace; search.exclude for node_modules, .turbo, dist |
| Vite | files.associations maps .css to Tailwind CSS |
| Vue | vue.server.hybridMode; Vue formatter |
| React Native | typescript.tsserver.watchOptions for fs events |
| Next.js | typescript.tsdk; Emmet JSX languages |
| TanStack Router | files.exclude hides routeTree.gen.ts |
| Tailwind CSS | CVA/CN class regex patterns for IntelliSense |
| TypeScript | typescript.disableAutomaticTypeAcquisition; typescript.enablePromptUseWorkspaceTsdk |
Extensions: recommends biomejs.biome and ms-vscode.vscode-typescript-next, plus framework-specific extensions for Tailwind CSS, Vue, or React Native. Existing recommendations are kept and merged, never removed.
quality/package-engines
Section titled “quality/package-engines”Adds a devEngines field to package.json with the expected Node.js version and package manager, for example:
{ "devEngines": { "runtime": { "name": "node", "version": ">=22" }, "packageManager": { "name": "pnpm", "version": ">=11" } }}The Node version comes from .nvmrc, engines.node, or a default of 22 (written as >=22). packageManager.version defaults to >=11 for pnpm (the minimum pnpm/setup can install) and >=10 for npm, yarn, or bun, and uses an existing packageManager field when present. Existing devEngines values take precedence during the merge.
workspace/pnpm-workspace
Section titled “workspace/pnpm-workspace”Ensures pnpm-workspace.yaml declares the workspace globs pnpm needs; in a single-package project it creates the file with only a comment placeholder:
packages: - 'apps/*' - 'packages/*'When the file exists with a packages: list, only missing globs are inserted. Comments, other keys such as catalog: and overrides:, key order, indentation, quote style, and line endings stay untouched. A file without a packages: key is left alone. Layouts that cannot be edited safely, such as a flow-style packages: list missing a glob, are reported as a conflict. The task applies only when pnpm is the detected package manager.
release/git-hooks
Section titled “release/git-hooks”Installs husky and wires four Git hooks:
| Hook | Action |
|---|---|
commit-msg |
Run commitlint --edit on the commit message |
prepare-commit-msg |
Run cz --hook when czg or commitizen is installed; otherwise a no-op |
pre-commit |
Run lint-staged, or biome check --write when lint-staged is not installed |
pre-push |
Run typecheck and test, or check:turbo in Turborepo projects |
Hooks are written to .husky/. In Vite+ projects they go to .vite-hooks/ instead, and vp staged replaces the pre-commit hook without installing husky.
release/versionrc
Section titled “release/versionrc”Writes .versionrc.json for commit-and-tag-version and compatible tools. The file maps conventional commit types to changelog sections and sets bumpFiles to package.json.
- Visible:
feat,fix,refactor,perf - Hidden:
docs,style,test,chore,ci,build,revert
The separate release/cat-version task installs the commit-and-tag-version dependency and writes the legacy .versionrc file. Use both together, or versionrc alone if you install the tool yourself.