Skip to content

Changelog

Latest updates and feature releases for xtarterize. Entries since v1.0.0 are curated below; see the full changelog for complete notes and every patch version.

Generated CI and release workflows now install pnpm with pnpm/setup@v2 instead of v1. Re-run apply to update an existing project; nothing else about the workflows changes.

Test files follow the same size limits as source

Section titled “Test files follow the same size limits as source”

Generated biome.json no longer exempts test files from the 60-line function limit (v1.24.0 had left them out). After updating, keep test blocks short: split a long describe into smaller ones or move shared setup out of it, otherwise check will flag them.

query and init --compose find tasks from related phrasings again: typing reaches strict TypeScript, updates the dependency updater, and code the VS Code task. Multi-word queries like auto update rank the exact phrase first, and exact matches stay ahead of related ones.

agent/skills-install now selects the executor for the detected package manager: pnpm dlx, yarn dlx for Yarn Berry, and bunx, while npm keeps npx --yes. npm 11 rejects npx when devEngines.packageManager names another package manager, and quality/package-engines writes that field during init, so pnpm, Yarn Berry, and bun projects no longer fail the skills task. Yarn classic has no dlx command and keeps the npx fallback.

query and init --compose no longer match related words automatically. Common queries like “strict typescript” and “ci pipeline” rank the same, but queries that relied on a related word score much lower (“typing” returns no results); use different wording or lower --threshold when that happens.

Flags must be passed after the command (xtarterize check --json); entry-level flags such as xtarterize --json check are rejected by the invocation guard instead of being silently dropped. The dead check --verbose flag is removed, list --quiet no longer prints the timing block, and init --compose --quiet no longer prints plan banners.

Detection recognizes workspace packages under services/ like packages/ and apps/, and tsconfig.jsonc and .eslintrc.mjs are detected consistently. Project profiles are computed fresh on every run, so detection always reflects the current files.

workspace/pnpm-workspace patches an existing packages: list in place instead of replacing the file. Missing apps/* and packages/* globs are inserted, while comments, catalog:, overrides:, onlyBuiltDependencies, ordering, indentation, quote style, and line endings survive. Files without a packages: key are left untouched, and layouts that cannot be edited safely are reported as conflicts.

Batch dependency install failures are now reported as apply errors with a failing exit code. Interactive add plans and executes its selection once, so one run manifest covers the whole operation and undo restores all of it. package.json changes preserve comments, indentation, and key order, and Vite plugin diffs and backups point at the real config file.

Production JavaScript source maps are disabled, reducing the published package size.

Unknown commands and options now exit 1 before anything runs, with a suggested correction when one is close (for example, Unknown option --jsn for "xtarterize check". Did you mean --json?). Typos in flags were previously dropped silently by the parser.

-y now works as a shorthand for --yes on init, sync, and restore, and add accepts --json.

Generated Biome and Oxlint configs now enforce 500-line file and 60-line function limits (test files disable the function limit). query --limit and --threshold validate their inputs instead of silently falling back: non-numeric, negative, or out-of-range values exit with an error.

Task status checks in add and dry-run diffs finish faster, and init --compose no longer pollutes JSON stdout when --format json is used.

add --all in JSON mode now reports failed task checks in the errors array and sets ok to false, keeping the machine-readable contract aligned with the exit code.

Configure skip and only defaults in .xtarterizerc or package.json, with command-line flags taking precedence when needed.

undo and restore now support machine-readable JSON output, completing a consistent JSON contract across the CLI.

Query results now show whether each task is new, changed, skipped, or in conflict, making it easier to decide what to apply.

JSON output now remains valid when there are no pending changes or when a dry run fails. Fresh projects without a lockfile also use the detected package manager for dependency installation.

add, init, and sync now support JSON output that can be consumed directly by CI pipelines and automation.

Conflicting tasks are now reported clearly, and --include-conflicts works consistently across add, init, and sync.

Individual task-check failures no longer abort the entire command.

check can now emit GitHub Actions annotations for non-conformant tasks and failing diagnostics, with automatic enablement in GitHub Actions.

Badge output stays clean in JSON and stdout modes, and undo now removes files created by the last run instead of failing when no backup exists.

check, diff, and doctor now return non-zero exit codes when conformance checks, pending changes, or diagnostics fail. Dry-run failures are also reported to CI.

New quality/package-engines, workspace/pnpm-workspace, and release/versionrc tasks help projects describe their runtime, workspace, and release configuration.

Generated TypeScript, Git hook, VS Code, and CI configuration is stricter and better aligned with modern Node.js projects.

Existing workspace files are preserved, and package-manager metadata reflects the project’s actual package manager.

The .xtarterize/ directory for backups and cache is now automatically added to .gitignore, keeping generated internals out of project status.

New xtarterize query <query> command that discovers tasks using a built-in scoring engine (no AI, no network). It matches task labels, ids, groups, keywords, and config targets, so near-miss spellings still find the right task.

Results are grouped by domain bundle (e.g. TypeScript, CI/CD) with per-group actionable xtarterize add commands.

New xtarterize init --compose <query> flag that reorders init tasks by relevance.

All 26 built-in tasks now describe their tags, config targets, and keywords, so query and init --compose understand more ways of describing the tasks you want.

Running xtarterize in a monorepo now shows only relevant tasks for where you’re running from:

  • Running from the monorepo root? You’ll see CI/CD, release tooling, turbo, renovate, and editor config tasks - not package-level tsconfig or Vite plugin tasks.
  • Running inside a workspace package? You’ll see tsconfig path aliases, vite-plugin-checker, and rollup-plugin-visualizer - not root-level CI or release tasks.
  • Tasks that apply everywhere continue to work as before.

Also fixes a detection bug where Node.js projects using Vite for build orchestration were misidentified as runtime: 'browser' instead of runtime: 'node'.

Running xtarterize concurrently across multiple workspace packages no longer crashes with spurious file-not-found errors thanks to cache collision protection. Tests are also now more resilient to transient failures and version drift in external tools.

New flags across the restoration, add, and diagnostic commands: restore --yes skips confirmation when restoring the latest backup, while restore --quiet suppresses verbose output. add --all applies all new and patch tasks without interaction, and doctor --json is now visible in command-level --help.

create-xtarter-app scaffolding enhancements

Section titled “create-xtarter-app scaffolding enhancements”

create-xtarter-app gains several new flags: --quiet suppresses banners and progress output, --json outputs the scaffold result as structured JSON, and --no-color disables colorized output. The --yes flag now defaults to the next-chakra template when -t is omitted. The help system has been migrated from hand-rolled HELP_TEXT to citty auto-generated help.

CLI reference documentation in Starlight now covers the new flags, agent skills have been updated for accurate flag references, and JSON output examples have been corrected to match the actual output shape.

Git hooks generated by xtarterize add release/git-hooks now work across npm, yarn, and bun, using the correct command format for each package manager via nypm.

The minimum Node.js version has been raised to 24 - projects using Node 18–23 now receive a clear error from npm instead of a cryptic runtime failure. Backup collision resolution ensures files with names that could collide in the backup directory (e.g., a/b.js and a__b.js) use a collision-safe encoding scheme. xtarterize undo and xtarterize restore now reject restore operations targeting files outside the project root via path traversal protection.

Vite plugin dry-run output for tasks like vite-plugin-checker and rollup-plugin-visualizer now matches what xtarterize add actually writes. The detection cache has been improved so config directory changes (.github/, .vscode/, .changeset/) are tracked at the file level, ensuring stale project profiles are invalidated when files within these directories change.

Edge-case hardening across the entire pipeline - no new features, but significantly improved stability for all commands and surfaces.

try/catch guards prevent crashes on individual task failures across init, sync, diff, add, doctor, and restore. The --skip/--only flags no longer filter phantom empty-string values, and doctor uses Promise.allSettled for resilient diagnostics when one check fails.

Robust error handling for atomic writes with temp file cleanup ensures no orphaned temp files. Schema validation guards against corrupted cache entries. Fixed a React Native + React co-detection issue that returned null. The skipped count now correctly tracks explicit skips from the check phase.

Fixed this.getScripts undefined crash in packageScriptsTask. The commitMsgHook now accepts a package manager parameter instead of hardcoding pnpm. Corrected check() return values for proper conflict vs new status detection.

The merged multi-diff view now preserves all diffs instead of dropping earlier ones. The JSON ok field reflects actual conformance state, not intention. Multiselect cancel properly aborts via abortIfCancelled.

Windows-compatible path handling, fixed pnpm overrides crash, async readdir replaces sync readdirSync, improved project name sanitization, and proper handling of explicit false CLI flag values.

Outdated content refreshed - Node.js minimum bumped to 24, missing --timing and --format flags documented, Rspack added to detected bundlers, task applicability fixed for renovate/lint-staged, and CLI path corrected from apps/cli to apps/xtarterize.

xtarterize add without a task ID now shows a grouped multi-select menu for interactive task selection. xtarterize check --badge <path> generates an SVG conformance badge with score, progress bar, and status.

Removed editorconfig, nvmrc, and agent/skills tasks - editorconfig is redundant with linters and VS Code settings, nvmrc lts/* is too vague, and agent/skills duplicated AGENTS.md content. The codegen/plop task now requires a detected framework to be applicable.

Non-recommended lint rules are now mapped from ESLint configs: eqeqeq, prefer-const, no-shadow, max-params, React rules, and Vitest overrides for Oxlint; noExcessiveCognitiveComplexity and useMaxParams for Biome.

Generated config templates for Biome, Oxlint, Oxfmt, and commitlint now ship with proper TypeScript types.

The minimum Node.js version has been bumped to 24. Older versions receive a clear error from npm instead of a cryptic runtime failure.

Each task during init and sync now shows a spinner animation at the task level, giving you real-time feedback on what’s being applied. The conformance plan table uses colored status tags (new, patch, skip, conflict) for at-a-glance understanding.

The workspace flag (-w) is now supported for pnpm dependency installs in monorepo roots, making it easier to manage shared dependencies alongside per-package installs.

A new --format flag for init, sync, diff, and add commands lets you choose between terminal-friendly and JSON output:

Shows +N -M change stats per file and @@ hunk headers in git-style unified diff format.

The release workflow task now detects whether your project uses Changesets and generates the appropriate workflow - either changesets/action@v1 for Changesets projects or tag-push for simple versioning.

Node.js version is now auto-detected from .nvmrc and package.json engines.node, ensuring CI and local environments stay in sync.

The new doctor command provides environment and project health diagnostics:

Environment

Node version, package manager, OS detection

Tools

Displays installed tool versions (Biome, oxlint, etc.)

Project

Project health checks and diagnostics

Configuration

Config file status and detected settings

The --verbose flag provides detailed system information, and JSON output mode enables machine consumption of diagnostic data.

The auto-update workflow now uses native package manager commands (pnpm update && pnpm dedupe) instead of npm-check-updates, reducing external dependencies and aligning with package manager best practices.

Duplicate scripts with the same command are now skipped automatically during package script management. The "extends": "config:base" format is treated as equivalent to "extends": ["config:base"], and only missing scripts are added - existing scripts are never overwritten.

All dry-run and diff output now uses a consistent git-style patch view across new, modified, and JSON files, providing a uniform review experience regardless of file type.

Six new conformance tasks expand xtarterize coverage:

EditorConfig

.editorconfig generation for consistent editor settings

npmrc

.npmrc with strict engine checks and exact version pinning

nvmrc

Node version pinning in .nvmrc

lint-staged

Run linters only on staged files - faster pre-commit hooks

Git hooks

Pre-configured git hooks via simple-git-hooks

pnpm catalogs

Workspace catalog: protocol for centralized dependency versions

Skills from the same source repo are now grouped into a single npx command with multiple --skill flags, reducing redundant downloads and setup time.

The agent skills catalog has been expanded to 20+ stack-specific skills:

Frontend / UI

baseline-ui, fixing-accessibility, fixing-metadata, fixing-motion-performance

React

react-dev, react-useeffect

Vue / Nuxt

vue, vue-best-practices, nuxt

Expo / React Native

upgrading-expo, vercel-react-native-skills

Build tools

vite, vitest, tsdown, turborepo

Database / Auth

supabase-postgres-best-practices, postgres-drizzle, redis-best-practices, better-auth-best-practices, create-auth-skill

AI / SDKs

ai-sdk

Specialized

remotion-best-practices

Diffs targeting the same JSON file are now merged into a single unified view instead of separate per-task diffs - see the complete intended state at once.

Framework-aware Biome config, Plop templates, and CI workflows are now generated based on your project’s detected stack. The --cwd flag is correctly resolved throughout the full pipeline, and conformance plan and dry-run output are rendered as proper tables.

v1.0 - April 21, 2026 Initial

Section titled “v1.0 - April 21, 2026 ”