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. Engineering guidance from agustinusnathaniel/skills follows its signal: server-rendered frameworks select hydration-safe-state, routed web apps url-state, browser code using a backend-as-a-service or auth client client-trust-boundary, admin UI libraries admin-panel-engineering, payment or webhook SDKs webhook-integration, money, decimal, or time zone libraries calculation-correctness, CSV, spreadsheet, or IndexedDB libraries bulk-import-engineering, GitHub repositories github-actions-authoring, release tooling release-notes, and Expo or React Native mobile-app-shell. 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.
In interactive runs, the skills task asks how to proceed: Install all installs every missing applicable skill, Choose… shows the missing skills grouped by category so individual skills can be picked (selecting a group header toggles the whole group), and Skip leaves the task out. Runs with --yes, JSON output, or without a terminal install all applicable skills.
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.