Skip to content

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.

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)
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
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
Task What it does
deps/renovate Write renovate.json
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
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
Task What it does
codegen/plop Install Plop and write plopfile.ts with framework-specific generators
Task What it does
monorepo/turbo Install Turborepo and write turbo.json
workspace/pnpm-workspace Add workspace globs to pnpm-workspace.yaml
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.

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.

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.

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.

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.

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.

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.

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.

Learn how to contribute a task